java - PreparedStatement 类型中的方法 setString(int, String) 不适用于参数 (int, String[])
问题描述
我知道 setString 允许在指定位置插入一个值,现在我想从 jsp 页面获取复选框值以便将其传递给数据库。
我将 checkbox 的变量定义为 String 数组,因为它可以处理一个或多个值。
这就是我在类中定义变量的方式:
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);
如果您想使用准备好的语句存储数组值,那么您应该以某种方式格式化您的字符串,以便在从数据库读取时将其转换回数组。
推荐阅读
- java - 如何创建 .JAR 来执行特定任务,然后在另一个项目中使用这个 JAR?
- python - 计算 Spark 中两列之间的余弦距离
- javascript - Bot framework v4 Node.js:如何根据外部触发器进入下一个瀑布步骤(发布请求)
- c# - 无法解析来自 Asp.Net WebApi(TFS 类)的依赖项
- php - 无法与主机 smtp.gmail.com 建立连接:stream_socket_client():无法连接到 ssl://smtp.gmail.com:465
- python - 如何更正确地近似点
- laravel - 电子邮件未在注册控制器中发送
- javascript - 未找到 Vue 原生模块:无法解析 '../../App'
- python - Python 我想选择输出的路径
- reactjs - 无法设置 react-select-async-paginate 初始值