当前位置: 首页 > 面试题库 >

批量使用JDBC prepareStatement

慕铭
2023-03-14
问题内容

我正在使用Statements批查询我的数据库。我现在已经做了一些研究,我想重写我的应用程序preparedStatement代替使用,但是我很难弄清楚如何向preparedStatement批处理中添加查询。

这就是我现在正在做的:

private void addToBatch(String sql) throws SQLException{
sttmnt.addBatch(sql);
batchSize++;
if (batchSize == elementsPerExecute){
    executeBatches();
}
}

sttmnttype的类成员在哪里Statement

我想做的是使用preparedStatementsetString(int, String)方法设置一些动态数据,然后将其添加到批处理中。

不幸的是,我不完全了解它的工作原理,以及如何setString(int, String)在批处理中使用特定的sql,或者preparedStatemnt为我拥有的每个sql 创建一个新的sql,然后将它们全部加入一个批处理。

有可能这样做吗?还是我真的对我的理解有所缺失preparedStatement


问题答案:

请阅读本文档的6.1.2节中的示例。基本上,您使用相同的语句对象并在设置所有占位符之后调用批处理方法。另一个适用于任何JDBC实现的IBM
DB2示例
。从第二个站点:

try {
  connection con.setAutoCommit(false);        
  PreparedStatement prepStmt = con.prepareStatement(    
    "UPDATE DEPT SET MGRNO=? WHERE DEPTNO=?");
  prepStmt.setString(1,mgrnum1);            
  prepStmt.setString(2,deptnum1);
  prepStmt.addBatch();

  prepStmt.setString(1,mgrnum2);                        
  prepStmt.setString(2,deptnum2);
  prepStmt.addBatch();
  int [] numUpdates=prepStmt.executeBatch();
  for (int i=0; i < numUpdates.length; i++) {
    if (numUpdates[i] == -2)
      System.out.println("Execution " + i + 
        ": unknown number of rows updated");
    else
      System.out.println("Execution " + i + 
        "successful: " + numUpdates[i] + " rows updated");
  }
  con.commit();
} catch(BatchUpdateException b) {
  // process BatchUpdateException
}


 类似资料:
  • 问题内容: 我需要通过REST API的Batch端点将大量节点及其之间的关系插入到Neo4j中,大约每秒5k记录(仍在增加)。 这将是24x7连续插入。每条记录可能只需要创建一个节点,而其他记录可能需要两个节点并创建一个关系。 是否可以通过更改程序或修改Neo4j的设置来提高插入件的性能? 到目前为止,我的进度: 1.我已经使用Neo4j进行了一段时间的测试,但无法获得所需的性能 测试服务器盒:

  • 问题内容: 我正在尝试使用该功能导入一百万行redis命令。 redis_version:2.8.1 这将导致以下错误: 从服务器读取错误:对等连接重置 有人知道我在做什么错吗? 包含例如 编辑 :我现在看到使用管道模式可能有一种特殊格式(?)-http: //redis.io/topics/protocol 问题答案: 要使用管道模式(也称为批量插入),您实际上必须直接以Redis协议格式提供命

  • 问题内容: 我想用Django更新表格-原始SQL中的内容如下: 我的第一个结果是这样的-但这很讨厌,不是吗? 有没有更优雅的方式? 问题答案: UPD Django 2.2版本现在具有bulk_update。 请参阅以下django文档部分 一次更新多个对象 简而言之,你应该可以使用: 你还可以使用F对象来执行诸如增加行数之类的操作: 请参阅文档:https : //docs.djangopro

  • 问题内容: 我试图用大约50,000行10列填充Java中的resultSet,然后使用的方法将它们插入到另一个表中。 为了使过程更快,我进行了一些研究,发现在将数据读入resultSet时,fetchSize起着重要的作用。 如果fetchSize太低,可能会导致到服务器的行程过多,而fetchSize太高则会阻塞网络资源,因此我做了一些尝试,并设置了适合我的基础结构的最佳大小。 我正在阅读此r

  • 问题内容: 我读到这里:使用Python将CSV文件导入sqlite3数据库表 似乎每个人都建议使用逐行读取,而不是使用SQLite的bulk .import。但是,如果您有数百万行的数据,这将使插入速度非常慢。还有其他方法可以避免这种情况吗? 更新:我尝试下面的代码逐行插入,但是速度不如我预期的那样。反正有改进的地方吗 问题答案: 使用生成器表达式将您的数据即时划分为多个块,在事务内进行插入。这

  • 问题内容: 如何批量更新mysql数据?如何定义这样的事情: 具有一些值,例如: 和其他值: 也许用mysql是不可能的?一个PHP脚本? 问题答案: 在这种情况下,最简单的解决方案是使用构造。它的工作速度非常快,并且可以轻松完成工作。 或使用建筑