Метод setString (int, String) в типе PreparedStatement не применим для аргументов (int, String []) - PullRequest
0 голосов
/ 27 февраля 2019

Я знаю, что setString позволяет вставлять значение в указанную позицию, теперь я хочу получить значения флажков со страницы jsp, чтобы передать их в базу данных.

Я определил переменную флажка как строкумассив, поскольку он может обрабатывать одно или несколько значений.

Так я определил переменную в классе:

public String[] rep;

Так мой сервлет должен получить этот параметр в методе doPost:

String[] rep = request.getParameterValues("rep");

и это строка из моего класса DAO из запроса readyStatement:

st.setString(3, exam.rep);

, но отображается эта ошибка: метод setString (int, String) вТип PreparedStatement не применим для аргументов (int, String [])

весь запрос

public static void  add(Exam exam) throws ClassNotFoundException, SQLException {
    Connection cnx;
    cnx = Connect.getConnection();
    String req = "insert into examen values (?,?,?)";
    PreparedStatement st = cnx.prepareStatement(req);
    st.setString(1, exam.titre);
    st.setString(2, exam.question);
    st.setString(3, exam.rep);
    st.executeUpdate();
}

1 Ответ

0 голосов
/ 27 февраля 2019

Будет полезно, если вы покажете нам свой SQL-запрос.Подготовленные операторы принимают одно значение, а не массив.Поскольку вы определяете первый параметр как индекс ? в вашем запросе, который нужно заменить на соответствующий второй параметрНечто подобное может удовлетворить ваши потребности;

String stmt = "INSERT INTO abc (some_field) VALUES (?);";
PreparedStatement ps = conn.prepareStatement(stmt);
String formatted = String.join(",", items);
ps.setString(3, formatted);

Если вы хотите сохранить значение массива с помощью подготовленного оператора, то вам следует отформатировать строку таким образом, чтобы вы могли преобразовать ее обратно в массив при чтении изваша БД.

...