gpt4 book ai didi

java - 未使用正确的查询执行PreparedStatement

转载 作者:行者123 更新时间:2023-12-01 09:10:45 25 4
gpt4 key购买 nike

将准备好的语句放入具有不同查询字符串的 for 循环中是否会以某种方式破坏它?

我有这个:

if(btn.equals("Continue")){
String[] vals1 = request.getParameterValues("Vals");
String count = "";
queryStr = AniModel.deleteQuery(vals1);
PreparedStatement ps = conn.prepareStatement(queryStr);
int update = ps.executeUpdate();
count = "" + update;

request.setAttribute("query",queryStr);
request.setAttribute("count",count);
RequestDispatcher dispatch = request.getRequestDispatcher("success4.jsp");
dispatch.forward(request, response);
}

它需要几个数组元素,在调用我创建的 DELETE 查询时使用这些元素:

public static String deleteQuery(String[] title){
String qry="DELETE FROM AnimeDatabase WHERE ";
for(int i=0;i < title.length;i++){
if (i>0) qry += " OR ";
qry += "ANI_TITLE='" + title[i] + "'";
}
return qry;
}

它从中获取数组值:

<%



String[] values = request.getParameterValues("cbg");
int countme=0;
int numb=1;
for(int i=0;i < values.length;i++){
countme++;
numb=countme;

%>
<tr><td><input type="hidden" name="Vals" value="<%out.println(values[i]);%>"id="vs_<%=(numb)%>"><%=values[i]%></td></tr>
<%
}
%>

它最终有正确的查询输入,但它只是没有在数据库上执行更新。

编辑:我希望实现的是,当我执行命令时,它将根据数组中的值的数量进行循环并执行语句,直到结束。

将其设置为conn.setAutoCommit(false);并将 conn.commit(); 放入“Continue”代码块中。还是不行。

最佳答案

有几点不知道您真正希望实现什么:

  1. 如果您想生成删除记录的查询,您是否不能创建一个包含执行一次条件的查询?
  2. 您是否遇到过事务提交问题?您要开始交易吗?
  3. 如果您的查询采用参数,我会在循环外准备 SQL 字符串和语句,并在执行前在循环中设置参数。
  4. 另请确保您在所示代码周围的环境中没有任何其他疑问或问题。

但是,您的逻辑没有任何问题,尽管根据我的经验,我发现模式 (3) 更快一些,但我现在看不到代码的直接问题。

(但是还有一些其他问题,例如 count 是一个字符串,但这可能是一个命名问题。虽然更新会返回一个数字,所以您再次转换为字符串,但实际上并没有对 count var 执行任何操作它本质上只包含以字符串格式影响的最后几行)

对于选项 1(以及您的编辑)。还有优化空间:

String[] vals1 = request.getParameterValues("Vals");
int count = 0;
String sql = "DELETE FROM AnimeDatabase WHERE ";

for(int i=0; i < vals1.length; i++) {

if (i>0) sql += " OR ";
sql += "ANI_TITLE='" + vals1 + "'";

}

PreparedStatement ps = conn.prepareStatement(sql);
int update = ps.executeUpdate();
count = update;

关于java - 未使用正确的查询执行PreparedStatement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40937094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com