Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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 类型PreparedStatement中的方法setString(int,String)不适用于参数(int,String[])_Java_Sql_Jakarta Ee_Servlet 3.0_Setstring - Fatal编程技术网

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

Java 类型PreparedStatement中的方法setString(int,String)不适用于参数(int,String[]),java,sql,jakarta-ee,servlet-3.0,setstring,Java,Sql,Jakarta Ee,Servlet 3.0,Setstring,我知道setString允许在指定位置插入值, 现在我想从jsp页面获取复选框值,以便将其传递到数据库 我将checkbox的变量定义为字符串数组,因为它可以处理一个或多个值 这是我在类中如何将其定义为变量的: public String[] rep; 这就是我的servlet在doPost方法中检索此参数的方式: String[] rep = request.getParameterValues("rep"); 这是preparedStatement查询中我的DAO类的一行: st.set

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

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

这是我在类中如何将其定义为变量的:

public String[] rep;
这就是我的servlet在doPost方法中检索此参数的方式:

String[] rep = request.getParameterValues("rep");
这是preparedStatement查询中我的DAO类的一行:

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

如果您能向我们展示您的SQL查询,这将有所帮助。准备好的语句只接受一个值,而不是数组。当您在查询中将第一个参数定义为
的索引以替换为相应的第二个参数时。像这样的东西可能适合你的需要

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

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

如果要将数组的所有条目放入同一参数,您可以将其转换为
列表
,然后调用列表的
子字符串
方法,这将很好地为您格式化数组。是否所有值都应存储在同一列中?是否可以添加查询以及带有示例值的表定义?是的,所有选定项都应存储在同一列中。表定义有3个字段,标题、测验和响应。错误说明非常清楚,您没有为该方法提供正确类型的参数。你应该传递一个字符串,而不是字符串数组。检查上面的查询,我添加了它!这个问题不是你的问题。您的问题是没有为函数提供所需的参数。因此,请指导我,我应该如何检索复选框ValuesHanks@Adam,这是可行的,但是它会将“on”作为值插入。例如,如果我选中2个答案,它给出的“on,on”与我要检索的复选框名称相去甚远!