Java 如何在不多次触发insert/update查询的情况下将多行插入/更新到数据库中? if(!knowledge.isEmpty()){ 迭代器ClassNmValsiTkw=知识 .entrySet().iterator(); while(classnmValsItrKW.hasNext()){ 条目p1=classnmValsItrKW.next(); 字符串nm=p1.getKey(); 字符串val=p1.getValue(); String query3=“插入到namevalue(seqid、name、value)值(” +seqId+“,”“+nm+”,“+val+”)”; //System.out.println(“插入查询:+query3”); st=connect.createStatement(); st.executeUpdate(查询3); } }
“knowledge”是哈希表,我在其中存储了要插入数据库的名称-值对。但对于while循环的每次迭代,插入查询都会被触发。我认为这是低效的。如何通过只触发一次insert查询来插入多行?在 注意 批量更新不限于Insert语句,它对Update和Delete语句也有效。在 注意Java 如何在不多次触发insert/update查询的情况下将多行插入/更新到数据库中? if(!knowledge.isEmpty()){ 迭代器ClassNmValsiTkw=知识 .entrySet().iterator(); while(classnmValsItrKW.hasNext()){ 条目p1=classnmValsItrKW.next(); 字符串nm=p1.getKey(); 字符串val=p1.getValue(); String query3=“插入到namevalue(seqid、name、value)值(” +seqId+“,”“+nm+”,“+val+”)”; //System.out.println(“插入查询:+query3”); st=connect.createStatement(); st.executeUpdate(查询3); } },java,sql,database,postgresql,hashtable,Java,Sql,Database,Postgresql,Hashtable,“knowledge”是哈希表,我在其中存储了要插入数据库的名称-值对。但对于while循环的每次迭代,插入查询都会被触发。我认为这是低效的。如何通过只触发一次insert查询来插入多行?在 注意 批量更新不限于Insert语句,它对Update和Delete语句也有效。在 注意 批更新不限于Insert语句,它对Update和Delete语句也有效。您需要使用批更新 其中,多个查询保存在内存中,并触发一次 这里有一个例子- 您需要使用批处理更新 其中,多个查询保存在内存中,并触发一次 这里有一
批更新不限于Insert语句,它对Update和Delete语句也有效。您需要使用批更新 其中,多个查询保存在内存中,并触发一次 这里有一个例子-
您需要使用批处理更新 其中,多个查询保存在内存中,并触发一次 这里有一个例子-
如果您不必担心SQL注入意味着您无法获取任何用户数据,那么您可以尝试以下方法
dbConnection.setAutoCommit(false);//commit trasaction manually
String insertTableSQL = "INSERT INTO DBUSER"
+ "(USER_ID, USERNAME, CREATED_BY, CREATED_DATE) VALUES"
+ "(?,?,?,?)";
PreparedStatement = dbConnection.prepareStatement(insertTableSQL);
preparedStatement.setInt(1, 101);
preparedStatement.setString(2, "mkyong101");
preparedStatement.setString(3, "system");
preparedStatement.setTimestamp(4, getCurrentTimeStamp());
preparedStatement.addBatch();
preparedStatement.setInt(1, 102);
preparedStatement.setString(2, "mkyong102");
preparedStatement.setString(3, "system");
preparedStatement.setTimestamp(4, getCurrentTimeStamp());
preparedStatement.addBatch();
preparedStatement.executeBatch();
dbConnection.commit();
注意:这里的
query3
是一个StringBuilder
,执行时也可以使用query3.toString()
。如果您不必担心SQL注入意味着您没有获得任何用户数据,那么您可以尝试一下
dbConnection.setAutoCommit(false);//commit trasaction manually
String insertTableSQL = "INSERT INTO DBUSER"
+ "(USER_ID, USERNAME, CREATED_BY, CREATED_DATE) VALUES"
+ "(?,?,?,?)";
PreparedStatement = dbConnection.prepareStatement(insertTableSQL);
preparedStatement.setInt(1, 101);
preparedStatement.setString(2, "mkyong101");
preparedStatement.setString(3, "system");
preparedStatement.setTimestamp(4, getCurrentTimeStamp());
preparedStatement.addBatch();
preparedStatement.setInt(1, 102);
preparedStatement.setString(2, "mkyong102");
preparedStatement.setString(3, "system");
preparedStatement.setTimestamp(4, getCurrentTimeStamp());
preparedStatement.addBatch();
preparedStatement.executeBatch();
dbConnection.commit();
注意:这里的
query3
是一个StringBuilder
执行时也可以query3.toString()
。像批更新一样?看看和像批更新一样?看看和
if (!knowledge.isEmpty()) {
Iterator<Entry<String, String>> classnmValsItrKW = knowledge
.entrySet().iterator();
StringBuilder query3 = new StringBuilder("insert into namevalue(seqid, name, value) values ");
while (classnmValsItrKW.hasNext()) {
Entry<String, String> p1 = classnmValsItrKW.next();
String nm = p1.getKey();
String val = p1.getValue();
query3.append("("+ seqId + ",'" + nm + "','" + val + "'),");
//System.out.println("Insert query: " + query3);
st = connect.createStatement();
st.executeUpdate(query3);
}
query3.setLength(query3.length() - 1);
}
insert into some_table(a, b) values (a1, b1), (a2, b2)...