Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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 如何在不多次触发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语句也有效。您需要使用批更新 其中,多个查询保存在内存中,并触发一次 这里有一个例子- 您需要使用批处理更新 其中,多个查询保存在内存中,并触发一次 这里有一

“knowledge”是哈希表,我在其中存储了要插入数据库的名称-值对。但对于while循环的每次迭代,插入查询都会被触发。我认为这是低效的。如何通过只触发一次insert查询来插入多行?

注意 批量更新不限于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)...