我用的mysql
public class Main {
public static void main(String[] args) {
int count = 0;
PreparedStatement pstmt =null;
Connection conn = JDBCUtil.getConnection();
String sql = "insert into mobile_place(number,place) values(?,?)";
try {
InputStreamReader is = new InputStreamReader(new FileInputStream(new File("D:/CC.txt")),"utf-8");
BufferedReader br = new BufferedReader(is);
while(br.readLine() != null){
conn.setAutoCommit(false);
count++;
String str = br.readLine().toString().trim();
String s1 = str.substring(0, str.indexOf(","));
String s2 = str.substring(str.indexOf(",")+1,str.length());
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, s1);
pstmt.setString(2, s2);
pstmt.addBatch();
if(count%500 == 0){
pstmt.executeBatch();
conn.commit();
}
System.out.println("已插入"+count+"条数据");
}
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
1899952 ,新疆-克拉玛依
1899954 ,新疆-昌吉
1899956 ,新疆-昌吉
1899958 ,新疆-伊犁
1899960 ,新疆-库尔勒
1899962 ,新疆-库尔勒
1899964 ,新疆-喀什
1899966 ,新疆-阿克苏
1899968 ,新疆-哈密
1899970 ,新疆-奎屯
1899972 ,新疆-奎屯
1899974 ,新疆-塔城
1899976 ,新疆-博乐
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
有很多这样格式的数据,读取出来存入数据库,但是数据库中根本就没有插入这么多数据,只有很少的一部分插进去了,这是为什么?
逻辑写的不对
改成
pstmt = conn.prepareStatement(sql);
while(br.readLine() != null){
conn.setAutoCommit(false);
count++;
String str = br.readLine().toString().trim();
String s1 = str.substring(0, str.indexOf(","));
String s2 = str.substring(str.indexOf(",")+1,str.length());
pstmt.setString(1, s1);
pstmt.setString(2, s2);
pstmt.addBatch();
if(count%500 == 0){
pstmt.executeBatch();
conn.commit();
}
System.out.println("已插入"+count+"条数据");
}
if(count%500!=0) {
pstmt.executeBatch();
conn.commit();
}
你之前的逻辑会每次循环创建一个pstmt 这样只有第500个可以插入
建议使用:JDBC addBatch,executeBatch
addBatch(String):添加需要批量处理的SQL语句或是参数;
executeBatch();执行批量处理语句;
你可以把一大堆的insert 语句放入在addBatch(sql);中
Statement st = conn.createStatement();
st.addBatch(sql1);
st.addBatch(sql2);
...
st.addBatch(sqln);
st.executeBatch();