さまざまなクエリ文字列を含むforループ内にプリペアドステートメントを配置すると、何らかの方法で破損しますか?PreparedStatementが正しいクエリで実行されていません
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;
}
それはここから配列値を取得します:それはそれは私が作成したDELETEクエリの呼び出しに使用するいくつかの配列要素を取り
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);
}
:
私はこれを持っています:
<%
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>
<%
}
%>
最終的には正しいクエリ入力がありますが、更新を実行していないデータベース。
EDIT: 私はコマンドを実行するときにループが実行され、終了するまで配列内にいくつの値があるかに応じてステートメントが実行されます。
Continue codeブロックの内側にconn.setAutoCommit(false);
と置き換えてください。conn.commit();
を入力してください。 まだ動作しません。
どこにコミットしていますか? – JonK
接続上で 'setAutoCommit(true)'を呼び出していない限り、コードのどこかで 'conn.commit();'を呼び出してデータベースに変更を永続させる必要があります。あなたが 'conn.commit();'を呼んでおらず、自動コミットをオンにしていなければ、それが問題になるでしょう。 – JonK
私はコミットをどこに置くべきかわかりません。また、コードを更新しました。それは単にクエリを実行しません。 – Xenos29