java 如何批量插入数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 如何批量插入数据相关的知识,希望对你有一定的参考价值。
请问下java 如何批量插入数据到sql server
参考技术A 通过jdbc就可以执行批量插入了。以下案例:
1、逐条执行10万次
2、分批执行将10万分成m批,每批n条,分多种分批方案来执行。
/**
* 批处理执行
*
* @param m 批次
* @param n 每批数量
* @throws Exception 异常时抛出
*/
public static void testInsertBatch(int m, int n) throws Exception
init(); //初始化环境
Long start = System.currentTimeMillis();
for (int i = 0; i < m; i++)
//从池中获取连接
Connection conn = myBroker.getConnection();
Statement stmt = conn.createStatement();
for (int k = 0; k < n; k++)
String sql = "\n" +
"insert into testdb.tuser \n" +
"\t(name, \n" +
"\tremark, \n" +
"\tcreatetime, \n" +
"\tupdatetime\n" +
"\t)\n" +
"\tvalues\n" +
"\t('" + RandomToolkit.generateString(12) + "', \n" +
"\t'" + RandomToolkit.generateString(24) + "', \n" +
"\tnow(), \n" +
"\tnow()\n" +
")";
//加入批处理
stmt.addBatch(sql);
stmt.executeBatch(); //执行批处理
stmt.close();
myBroker.freeConnection(conn); //连接归池
Long end = System.currentTimeMillis();
System.out.println("批量执行" + m + "*" + n + "=" + m * n + "条Insert操作,共耗时:" + (end - start) / 1000f + "秒!");
参考技术B 问题太笼统,你的意思是写个for循环?最后提交事务或者每10个提交一次事务?与数据库无关
Java批量插入更新操作
以前总是说批量插入和更新的效率比非批量的要高,但是一直没有使用过批量处理数据的功能,现在由于项目中需要处理的数据量比较大,所以使用了批量处理的功能,java代码如下:
1.java实现批量插入数据:
Connection conn; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://192.168.0.200:3306/xxx", "root", "root"); conn.setAutoCommit(false); String sql = "insert into test_user (u_name,create_date) value (?,SYSDATE())"; PreparedStatement prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); conn.setAutoCommit(false); for (int i = 1; i <= 100; i++) { prest.setString(1, "a" + i); prest.addBatch(); } prest.executeBatch(); conn.commit(); conn.close(); } catch (Exception ex) { ex.printStackTrace(); }
2.java实现批量更新数据:
Connection conn; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://192.168.0.200:3306/xxx", "root", "root"); conn.setAutoCommit(false); // 保存当前自动提交模式 boolean autoCommit = conn.getAutoCommit(); // 关闭自动提交 conn.setAutoCommit(false); Statement stmt =conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); for (int i = 1; i <= num; i++) { //通过遍历可以一次性插入多条sql语句 stmt.addBatch("update test_user set test_user.u_name = (‘d"+i+"‘) where test_user.u_name = (‘c"+i+"‘)"); } stmt.executeBatch(); stmt.clearBatch(); conn.commit(); conn.close(); } catch (Exception ex) { ex.printStackTrace(); }
以上是关于java 如何批量插入数据的主要内容,如果未能解决你的问题,请参考以下文章