Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 jdbc中的多行_Java_Arrays_Jdbc_Checkboxlist_On Duplicate Key - Fatal编程技术网

修改:如何在重复值上更新java jdbc中的多行

修改:如何在重复值上更新java jdbc中的多行,java,arrays,jdbc,checkboxlist,on-duplicate-key,Java,Arrays,Jdbc,Checkboxlist,On Duplicate Key,我有一个带有多复选框的.jsp页面。我可以插入多个复选框值,但在使用更新时,它会添加当前复选框行和其他复选框值行。如果我再选中一个复选框,它应该再添加一行,以此类推 以下是我用于更新的代码: CollDAO.java: //Insert checkbox records public void addColl(String qId, String[] arrayColId) { try { PreparedStatement ps = con.preparedStatement("i

我有一个带有多复选框的.jsp页面。我可以插入多个复选框值,但在使用更新时,它会添加当前复选框行和其他复选框值行。如果我再选中一个复选框,它应该再添加一行,以此类推

以下是我用于更新的代码: CollDAO.java

//Insert checkbox records
public void addColl(String qId, String[] arrayColId) {
  try {
    PreparedStatement ps = con.preparedStatement("insert into colTable(qId, colId) values(?,?)");

   for(int i = 0; i < arrayColId.length; i++) {
     ps.setString(1, qId);
     ps.setString(2, arrayColId[i]);
     ps.executeUpdate();
   }
  } catch (SQLException e) {
     e.printStackTrace();
  }
}
//插入复选框记录
public void addColl(字符串qId,字符串[]arrayColId){
试一试{
PreparedStatement ps=con.PreparedStatement(“插入colTable(qId,colId)值(?,)”;
for(int i=0;i
如果我选择2个复选框,这就是它的外观。

rowid|qID|cID--正确

:101:|:121:|:9:

:100:|:121:|:13:

//Update checkbox records
public void updateColl(String qId, String[] arrayColId) {
  try {
    String sql = "update colTable set colId=?, where qId=?";
   PreparedStatement ps = con.preparedStatement(sql);

   for(int i = 0; i < colId; i++) {
     ps.setString(1, colId[i]);
     ps.setString(2, qId);
     ps.executeUpdate();
   }

  } catch (SQLException e) {
     e.printStackTrace();
  }
}
//更新复选框记录
public void updateColl(字符串qId,字符串[]arrayColId){
试一试{
String sql=“update colTable set colId=?,其中qId=?”;
PreparedStatement ps=con.PreparedStatement(sql);
for(int i=0;i
如果我选择了3个复选框,这就是要更新的内容。

rowid|qID|cID--输出错误

:105:|:121:|:2:

:104:|:121:|:9:

:103:|:121:|:13:

//Update checkbox records
public void updateColl(String qId, String[] arrayColId) {
  try {
    String sql = "update colTable set colId=?, where qId=?";
   PreparedStatement ps = con.preparedStatement(sql);

   for(int i = 0; i < colId; i++) {
     ps.setString(1, colId[i]);
     ps.setString(2, qId);
     ps.executeUpdate();
   }

  } catch (SQLException e) {
     e.printStackTrace();
  }
}
:101:|:121:|:9:

:100:|:121:|:13:

//Update checkbox records
public void updateColl(String qId, String[] arrayColId) {
  try {
    String sql = "update colTable set colId=?, where qId=?";
   PreparedStatement ps = con.preparedStatement(sql);

   for(int i = 0; i < colId; i++) {
     ps.setString(1, colId[i]);
     ps.setString(2, qId);
     ps.executeUpdate();
   }

  } catch (SQLException e) {
     e.printStackTrace();
  }
}
这就是它应该看起来的样子。

rowid|qID|cID--正确输出

:103:|:121:|:2:

:101:|:121:|:9:

:100:|:121:|:13:

//Update checkbox records
public void updateColl(String qId, String[] arrayColId) {
  try {
    String sql = "update colTable set colId=?, where qId=?";
   PreparedStatement ps = con.preparedStatement(sql);

   for(int i = 0; i < colId; i++) {
     ps.setString(1, colId[i]);
     ps.setString(2, qId);
     ps.executeUpdate();
   }

  } catch (SQLException e) {
     e.printStackTrace();
  }
}
我已经做了一个星期了,有人能帮我吗


谢谢

在您的情况下,您应该改用批处理:

PreparedStatement ps = con.preparedStatement("your query");

for(int i = 0; i < arrayColId.length; i++) {
     ps.setString(1, qId);
     ps.setString(2, arrayColId[i]);
     ps.addBatch();    
}

ps.executeBatch();
PreparedStatement ps=con.PreparedStatement(“您的查询”);
for(int i=0;i
你可以在这里学到更多

编辑

对于您的更新,您可以使用:

connection.setAutoCommit(false);

int arrayVals = Math.min(arrayColId.length, arrayQId.length);
for (int i = 0; i < arrayVals; i++) {
    ps.setString(1, arrayColId[i]);
    ps.setString(2, arrayQId[i]);
    ps.addBatch(); //add a batch
}

ps.executeBatch();//execute your batch

connection.commit();//when you finish you should to commit your transaction
connection.setAutoCommit(false);
int arrayVals=Math.min(arrayColId.length,arrayQId.length);
对于(int i=0;i
在您的情况下,您应该改为使用批处理:

PreparedStatement ps = con.preparedStatement("your query");

for(int i = 0; i < arrayColId.length; i++) {
     ps.setString(1, qId);
     ps.setString(2, arrayColId[i]);
     ps.addBatch();    
}

ps.executeBatch();
PreparedStatement ps=con.PreparedStatement(“您的查询”);
for(int i=0;i
你可以在这里学到更多

编辑

对于您的更新,您可以使用:

connection.setAutoCommit(false);

int arrayVals = Math.min(arrayColId.length, arrayQId.length);
for (int i = 0; i < arrayVals; i++) {
    ps.setString(1, arrayColId[i]);
    ps.setString(2, arrayQId[i]);
    ps.addBatch(); //add a batch
}

ps.executeBatch();//execute your batch

connection.commit();//when you finish you should to commit your transaction
connection.setAutoCommit(false);
int arrayVals=Math.min(arrayColId.length,arrayQId.length);
对于(int i=0;i
您需要检查arrayColID中的值。您需要检查arrayColID中的值。@Gee您可以使用带有插入或更新的批处理或任何操作Yes@Gee,使用这两种操作,您知道如何完成代码吗,或者我应该编辑我的答案吗?让我们一起检查。@Gee您是否在
connection.setAutoCommit(false)之间设置了操作
connection.commit()
@Gee您可以将批处理与插入、更新或任何操作一起使用Yes@Gee,与这两种操作一起使用,您知道如何完成代码吗,或者我应该编辑我的答案吗?让我们一起使用。@Gee您是否在
连接之间设置了操作。setAutoCommit(false)
connection.commit()