java 逐行讀取csv文件存入mysql數據庫


DynamicParameter.java

//主鍵自增,生成uuid的工具類

package com.nantian.sms.util;

import java.text.SimpleDateFormat;

public class DynamicParameter {


/**
* 獲取20位隨機數
* 4位年份+13位時間戳+3位隨機數
* @author yuyu
*/

public static void main(String[] args) {
//調用生成id方法
System.out.println(getGuid());
}

/**
* 20位末尾的數字id
*/
public static int Guid=100;

public static String getGuid() {

DynamicParameter.Guid+=1;

long now = System.currentTimeMillis();
//獲取4位年份數字
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy");
//獲取時間戳
String time=dateFormat.format(now);
String info=now+"";
//獲取三位隨機數
//int ran=(int) ((Math.random()*9+1)*100);
//要是一段時間內的數據連過大會有重復的情況,所以做以下修改
int ran=0;
if(DynamicParameter.Guid>999){
DynamicParameter.Guid=100;
}
ran=DynamicParameter.Guid;

return time+info.substring(2, info.length())+ran;

}

}

-----------------------------------------------------------------------------------------------------------------------------------------------------------

TestReadCSV.java

package com.nantian.filereader;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.nio.charset.Charset;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.csvreader.CsvReader;

public class TestReadCSV {

//@SHP mycat--主鍵自增
//static String ResultDynPara=DynamicParameter.getGuid();

public static void main(String[] args) throws ClassNotFoundException, SQLException, Exception {
String csvFilePath = "D:\\signmsg.csv";
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://LocalHost:3306/testspringcloud", "root","root");
System.out.println("數據庫連接成功!");
readCsv(csvFilePath,con);
System.out.println("數據導入完成!");
}

/**
* map.put("cardNum", split[2].trim());//卡號
map.put("idCard", split[7].trim());//證件號碼
map.put("opertionId", split[8].trim());//櫃員號
map.put("orgNum",split[11].trim());//網點號
map.put("mobile",split[15].trim() );//手機號
map.put("bankServiceType",split[3].trim());//行內業務類型
map.put("serviceType",split[17].trim());//外部業務類型
map.put("bankProduct", split[12].trim());//3位銀行產品代碼
* @param csvFilePath
* @param con
* @throws Exception
*/
private static void readCsv(String csvFilePath, Connection con) throws Exception {
int lineNumber=countLines();
System.out.println("lineNumber="+lineNumber);
BufferedReader br = null;
try {
String sql="Insert into b_signmsg(signMsgId,cardNum,idCard,opertionId,orgNum,mobile,bankServiceType,serviceType,bankProduct) values(?,?,?,?,?,?,?,?,?)";
PreparedStatement pStatement=con.prepareStatement(sql);

br = new BufferedReader(new FileReader(csvFilePath));
String line =null;
int i=1;
while((line = br.readLine())!=null){
String ResultDynPara=DynamicParameter.getGuid();
//讀取到的內容給line變量
//line = br.readLine();//加上這一行會導致readLine()方法被執行了兩次,導致讀取數據不全
//System.out.println("line="+line);
//System.out.println("line="+line);
//ArrayList<String> csvList = new ArrayList<String>();
//CsvReader reader = new CsvReader(csvFilePath,',',Charset.forName("gbk")); //一般用這編碼讀就可以了
//reader.readHeaders(); // 跳過表頭 如果需要表頭的話,不要寫這句。
//逐條讀取記錄,直至讀完
//System.out.println(reader.readRecord());
//while(reader.readRecord()){
//csvList.add("123");
//}
//System.out.println("csvList="+csvList);
Map map=new HashMap<>();
//System.out.println(br.readLine());//讀取每一行數據
//replaceAll的參數是regex,即基於規則表達式的替換,比如,可以通過replaceAll("\\d", "*")把一個字符串所有的數字字符都換成星號;
String[] split = line.replaceAll("\"", "").split(",");//去掉存入數據庫中的""
System.out.println("split.length="+split.length);
System.out.println(split);
String cardNum="";
if (split[2].trim().length()!=0) {
cardNum=split[2].trim();
}
String idCard="";
if (split[7].trim().length()!=0) {
idCard= split[7].trim();
}
String opertionId="";
if (split[8].trim().length()!=0) {
opertionId=split[8].trim();
}
String orgNum="";
if (split[11].trim().length()!=0) {
orgNum=split[11].trim();
}
String mobile="";
if (split[15].trim().length()!=0) {
mobile=split[15].trim();
}
String bankServiceType="";
if (split[3].trim().length()!=0) {
bankServiceType=split[3].trim();
}
String serviceType="";
if (split[17].trim().length()!=0) {
serviceType=split[17].trim();
}
String bankProduct="";
if (split[12].trim().length()!=0) {
bankProduct=split[12].trim();
}
pStatement.setString(1, ResultDynPara);
pStatement.setString(2, cardNum);
pStatement.setString(3,idCard);
pStatement.setString(4, opertionId);
pStatement.setString(5, orgNum);
pStatement.setString(6, mobile);
pStatement.setString(7,bankServiceType );
pStatement.setString(8, serviceType);
pStatement.setString(9, bankProduct);
pStatement.execute();
System.out.println("pStatement="+pStatement);
System.out.println("第"+(i++)+"次循環");
}
} catch (SQLException e) {
e.printStackTrace();
}

}

private static int countLines() throws Exception {
int lineNumber=0;
File file4=new File("D:\\signmsg.csv");
if(file4.exists()) {
FileReader fr=new FileReader(file4);
LineNumberReader lnr=new LineNumberReader(fr);

long timeS=System.currentTimeMillis();//時間單位為ms
while(null != lnr.readLine()) {
lineNumber+=1;
}
long timeE=System.currentTimeMillis();
System.out.println("此種方法所耗時間為:"+(timeE-timeS)+"ms,文件總條數為:"+lineNumber+"條");
lnr.close();
}
return lineNumber;
}
}

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

需要額外導入mysql驅動包

 

 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

數據庫表結構

/*
Navicat MySQL Data Transfer

Source Server : sxnx-springcloud
Source Server Version : 50520
Source Host : localhost:3306
Source Database : testspringcloud

Target Server Type : MYSQL
Target Server Version : 50520
File Encoding : 65001

Date: 2020-04-15 10:04:12
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for b_signmsg
-- ----------------------------
DROP TABLE IF EXISTS `b_signmsg`;
CREATE TABLE `b_signmsg` (
`signMsgId` bigint(100) NOT NULL COMMENT '短信簽約主鍵,唯一標識',
`cardNum` varchar(22) NOT NULL COMMENT '卡號/賬號',
`customName` varchar(50) DEFAULT NULL COMMENT '持卡戶名',
`idCard` varchar(21) DEFAULT NULL COMMENT '證件號碼',
`opertionId` char(255) DEFAULT '' COMMENT '櫃員號',
`orgNum` char(255) DEFAULT NULL COMMENT '網點號',
`mobile` char(255) NOT NULL COMMENT '手機號',
`bankServiceType` varchar(255) DEFAULT NULL COMMENT '行內業務類型\r\n101:個人收費費實時動賬\r\n111:個人免費實時動賬\r\n201:對公收費費實時動賬\r\n211:對公免費實時動賬\r\n202:對公收費定時余額\r\n203:對公收費定時流水\r\n客戶性質(1:個人 2:對公)+收費方式(0:收費 1:免費)+即時通/余額/流水 \r\n',
`serviceType` varchar(255) DEFAULT NULL COMMENT '外部業務類型(XHGRMF:個人免費 XHDGMF:對公免費 XHGYBY:個人收費包月 XHDGBY:對公收費包月)',
`bankProduct` char(255) DEFAULT NULL COMMENT '3位銀行產品代碼',
`regTime` varchar(14) DEFAULT NULL COMMENT '簽約登記時間YYYYMMDDHHmmss',
PRIMARY KEY (`signMsgId`),
KEY `index_signmsg` (`cardNum`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='短信簽約表';

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

導入結果展示

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM