Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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 使用foreach在数据库上进行多次插入是一种好的做法吗?_Java_Mysql_Jdbc - Fatal编程技术网

Java 使用foreach在数据库上进行多次插入是一种好的做法吗?

Java 使用foreach在数据库上进行多次插入是一种好的做法吗?,java,mysql,jdbc,Java,Mysql,Jdbc,我有一封邮件和许多收件人,我想知道的是我想什么时候保存它。。对邮件拥有的每个收件人使用Statement.execute()好吗?或者可以将其视为“硬编码” public void保存(Int-id、字符串主题、字符串正文、ArrayList电子邮件){ String sq=“调用保存消息(?)”; CallableStatement st=this.connection.prepareCall(sq); 圣塞廷(1,身份证); st.setString(2名,受试者); st.setStrin

我有一封邮件和许多收件人,我想知道的是我想什么时候保存它。。对邮件拥有的每个收件人使用Statement.execute()好吗?或者可以将其视为“硬编码”

public void保存(Int-id、字符串主题、字符串正文、ArrayList电子邮件){
String sq=“调用保存消息(?)”;
CallableStatement st=this.connection.prepareCall(sq);
圣塞廷(1,身份证);
st.setString(2名,受试者);
st.setString(3,阀体);
st.execute();
用于(字符串e:电子邮件){
query=“调用saveRecipientByMessage(?,)”;
CallableStatement st2=this.connection.prepareCall(查询);
st2.setInt(1,id);
st2.固定管柱(2,e);
st2.execute();
}
}

感谢阅读。

foreach还可以,但更好的JDBC实践是使用批处理。

我想知道-除了这些,您还可以使用什么?您是否在问,与每个收件人一次插入相比,将所有收件人插入db是否更好?评论而不是回答,因为这有点超出我的范围,但我认为您可以准备语句,并可能在循环之前而不是在循环内部设置ID。在第一次调用中,您绑定了三个变量,但是查询只有两个占位符;这是复制/粘贴错误吗?提示:在循环外准备一次,在循环内执行多次。
   public void save(Int id,String subject, String body, ArrayList<String> emails){

    String sq = "CALL saveMessage(?,?)";
    CallableStatement st = this.connection.prepareCall(sq);
    st.setInt(1,id);
    st.setString(2, subject);
    st.setString(3, body);
    st.execute();

    for(String e:emails){

       query = "CALL saveRecipientByMessage(?,?)";
       CallableStatement st2 = this.connection.prepareCall(query);
       st2.setInt(1,id);
       st2.setString(2,e);
       st2.execute();
    }
}