类型PreparedStatement中的方法setString(int,String)不适用于参数(int,String [])

时间:2019-02-27 13:39:22

标签: java sql java-ee servlet-3.0 setstring

我知道setString允许在指定位置插入一个值, 现在,我想从jsp页面获取复选框值,以将其传递到数据库。

我将checkbox的变量定义为String数组,因为它可以处理一个或多个值。

这是我在类中定义变量的方式:

public String[] rep;

这是我的servlet在doPost方法中检索此参数的方式:

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

这是我的DAO类中来自prepareStatement查询的一行:

st.setString(3, exam.rep);

,但显示此错误: 类型PreparedStatement的方法setString(int,String)不适用于参数(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 :(得分:0)

如果您可以向我们展示您的SQL查询,将会有所帮助。准备好的语句采用单个值,而不是数组。在将第一个参数定义为查询中?的索引时,将其替换为相应的第二个参数。这样的事情可能适合您的需求;

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

如果要使用准备好的语句存储数组值,则应以某种方式设置字符串格式,以便在从数据库中读取时可以将其转换回数组。