java - 将复选框值的数组列表插入 mysql 行

标签 java mysql android-studio

我正在尝试将所有选中的复选框值插入 mysql 数据库中的每一行, 一旦选中复选框,该值将通过连续插入行插入到数据库中 这是我的代码,但我不确定是否插入了 arraylist 循环

List<String> boxes = new ArrayList<>();

private class Insert extends AsyncTask<String, String, String>
{
    TextView mssg = (TextView) findViewById(R.id.message);
    String cb = String.valueOf(app);
    CheckBox cbapp = (CheckBox) findViewById(R.id.cb_approver);

    String msg = "";

    @Override
    protected void onPreExecute() {
    }

    protected String doInBackground(String... strings) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection(urls, user, pass);

            if (conn == null) {
                msg = "Connection went wrong";
            } else if(conn!=null) {

                    String query = "INSERT INTO module_pivot (userID,modID,deptID,formsID) VALUES (99,1,?,0)";
                    PreparedStatement prep = conn.prepareStatement(query);

                    for (int i=0;i<boxes.size();i++) {
                    prep.setString((i), boxes.get(i));
                }
                    prep.executeUpdate();
                    msg = "Inserted!";

            }
        } catch (Exception e) {
            msg = "Sql query error";

            e.printStackTrace();
        }
        return msg;
    }

    @Override
    protected void onPostExecute(String msg) {
        mssg.setText(msg);
    }
}

这里是复选框arraylist的值,部门列表

public void onCheck(View view){

    boolean checked = ((CheckBox)view).isChecked();

    switch (view.getId()){

        case R.id.cbObra:
            if (checked)
                boxes.add("15");
            else
                boxes.remove("15");
            break;
        case R.id.cbBus:
            if (checked)
                boxes.add("14");
            else
                boxes.remove("14");
            break;
        case R.id.cbHR:
            if (checked)
                boxes.add("11");
            else
                boxes.remove("11");
            break;
        case R.id.cbIT:
            if (checked)
                boxes.add("4");
            else
                boxes.remove("4");
            break;
        case R.id.cbMan:
            if (checked)
                boxes.add("7");
            else
                boxes.remove("7");
            break;
        case R.id.cbFin:
            if (checked)
                boxes.add("10");
            else
                boxes.remove("10");
            break;
        case R.id.cbPM:
            if (checked)
                boxes.add("12");
            else
                boxes.remove("12");
            break;
        case R.id.cbCC:
            if (checked)
                boxes.add("84");
            else
                boxes.remove("84");
            break;
    }

}

最佳答案

您的代码有一个明显的问题:

  for (int i=0;i<boxes.size();i++) {
                    prep.setString((i), boxes.get(i));
                }
                    prep.executeUpdate();

这样,您将在执行更新之前关闭循环。此外,您应该在事务中运行更新过程。我认为你应该这样做:

conn.setAutoCommit(false);
      for (int i=0;i<boxes.size();i++) {
                        prep.setString((i), boxes.get(i));
                        prep.executeUpdate();
                    }
conn.commit();

其中 conn 是您的 JDBC 连接。

关于java - 将复选框值的数组列表插入 mysql 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60161365/

相关文章:

mysql - JDBC4/MySQL语法错误: when retrieving data from mysql table

android - 在 Android 中使用 Glide 显示图像。看不到任何东西

android - 哪个计算机处理器为 android studio 提供更好的性能? AMD 还是英特尔?

java - FCM 通知负载 - 在应用未运行时确定主题名称

java - 如何获取结果集中WHERE条件求值的结果?

php - 如何在 WordPress 中使用 (NOT IN) OR (IN) using pod

java - 安卓 : Creating Image and filling colors in Canvas

java - 替代 apache xml rpc 客户端,完全受 Google App Engine for java 支持

javascript - 在 redux 中使用 AsyncStorage 保存 boolean 数据

php - php mysql中的计算