java addbatch_java-关于addBatch(String)的注意事项

在PreparedStatement的addBatch()方法旁边,在Statement类中还有一个addBatch(String)方法.

我想处理一系列不同的sql语句,并且正在寻找关于addBatch(String)意味着性能方面的一些澄清.使用此方法安全(快速)还是在Java中对相似的sql语句进行分组并按组执行更好?

解决方法:

批处理允许您将相关的SQL语句分组为一个批处理,并通过一次调用将其提交给数据库.

将多个SQL语句一次发送到数据库时,可以减少通信开销,从而提高性能.

addBatch(String sql)在接口java.sql.Statement中定义,而addBatch()在java.sql.Statement接口中定义.PreparedStatement是扩展Statement的子接口之一. (其他是java.sql.CallableStatement)

无法在PreparedStatement或CallableStatement和sql上调用addbatch(String sql)方法-通常这是一个SQL INSERT或UPDATE语句.

如果要批量插入或批量更新操作,则首选addBatch().

批量执行的阻塞因素很少

DB make/version.

JDBC driver make/version.

例如:如果您使用的是MySQL,请使用最新的驱动程序将rewriteBatchedStatements = true添加到您的连接字符串中以使statement.addBatch()实际上创建批处理插入.

另外,您应确保自动提交为false.维护一个计数器,该计数器到达该计数器的executeBatch,当Java中的可用堆内存受到约束时,这将有所帮助.

例:

conn.setAutoCommit(false);

PreparedStatement pStmt = conn.prepareStatement("INSERT INTO mytable (field1,field2) VALUES (?,?)");

for all values:

pStmt.setString(1,val1);

pStmt.setString(2,val2);

pStmt.addBatch();

if ( i % 1000 == 0) {

pstmt.executeBatch();// Execute every 1000 items

}

pstmt.executeBatch();

conn.commit();

标签:jdbc,prepared-statement,java

来源: https://codeday.me/bug/20191101/1981352.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您可以参考以下代码实现Java读取文件并批量保存到数据库: ```java import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class BatchInsert { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "123456"; try (Connection conn = DriverManager.getConnection(url, user, password)) { String sql = "INSERT INTO mytable (name, age) VALUES (?, ?)"; PreparedStatement statement = conn.prepareStatement(sql); File file = new File("data.txt"); BufferedReader reader = new BufferedReader(new FileReader(file)); String line; while ((line = reader.readLine()) != null) { String[] parts = line.split(","); String name = parts[0]; int age = Integer.parseInt(parts[1]); statement.setString(1, name); statement.setInt(2, age); statement.addBatch(); } statement.executeBatch(); System.out.println("Data inserted successfully!"); } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们首先建立了与数据库的连接,然后定义了一个 SQL 语句,并使用 PreparedStatement 对象进行了预编译。 接着,我们使用 BufferedReader 对象读取文件的每一行数据,并将其分割为姓名和年龄两个部分。然后,我们将这些数据设置到 PreparedStatement 对象中,并使用 addBatch() 方法将其添加到批处理中。 最后,我们调用 executeBatch() 方法将批处理中的所有 SQL 语句一次性执行。 当然,您需要根据您的具体情况修改代码中的数据库连接信息、SQL 语句、数据文件路径等参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值