Java 使用foreach在数据库上进行多次插入是一种好的做法吗?
我有一封邮件和许多收件人,我想知道的是我想什么时候保存它。。对邮件拥有的每个收件人使用Statement.execute()好吗?或者可以将其视为“硬编码”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
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();
}
}