Вставьте массив значений флажков в mysql строк - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь вставить все свои проверенные значения флажков в каждую строку в mysql дБ, после того, как флажки установлены, это значение будет вставлено в базу данных с непрерывной вставкой строк. Это мой код, но я не уверен с вставкой arraylist l oop

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;
    }

}

1 Ответ

0 голосов
/ 11 февраля 2020

Ваш код имеет явную проблему:

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

При этом вы закрываете свой l oop перед выполнением обновления. Далее вам следует запустить процедуру обновления в транзакции. Вот что, я думаю, вам следует сделать:

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

Где conn - ваше соединение JDB C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...