0

私のデータベースは、ユーザー名と残高の 2 つの列で構成されています。username の値は Mike で、balance の値は null です。残高を更新しようとしていますが、何らかの理由で更新されません。また、エラーは発生しません。助言がありますか

 <p>This is the deposit page</p>
    <form action="deposit.jsp" method="POST">
    <label>deposit: </label><input type="text" name="deposit"><br>
    <label>name: </label><input type="text" name="name"><br>
    <input type="submit" value="deposit">

  <%

  String deposit=request.getParameter("deposit");
 String name=request.getParameter("name");
   try{
  Connection conn = null;
  Class.forName("com.mysql.jdbc.Driver").newInstance();
  conn =    DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root"); 
  Statement st=null;
  st=conn.createStatement();
 st.executeUpdate("update username set balance='"+deposit+"' where username='"+name+"'");

 }
catch(Exception e){
 System.out.println(e);
}
%>
</form>
 </body>
 </html>
4

4 に答える 4

2


追加:ブロックの最後にconn.commit()

于 2012-05-16T20:28:00.923 に答える
1

ここで何が起こっているのかを正しく理解していれば、ページが読み込まれるとすぐに(ユーザーが送信を押したときではなく)、実際にdb insertを呼び出しています...この場合、SQLはユーザー名=''を検索します。 ?多分私はあなたが何をしているのか理解していません。そして、シバン全体でcommit()を呼び出す必要がありますが、それは実際にいくつかの有用な値を与えた後です。

[編集..]ああ、ユーザーが送信を押したかどうかに応じて、同じページを2回呼び出しているようです...これは、この種のことを処理するための信じられないほど悪い方法です...できるかどうかを確認するためのテストとしてデータベースに何かを入れても問題ありませんが、このような本物を構築してはいけません。プレゼンテーションとビジネスロジックは、どのような場合でも別々に保管してください。JSP(およびPHPと他のすべてのテンプレートエンジン)がそれらをマージする機能を提供することを私は知っていますが、あなたが何かを「できる」からといって、あなたがそうすべきだという意味ではありません。

[編集2]データベースが表示されませんが、usernameという列があり、usernameというテーブルが本当にありますか?それがあなたが今話していることだからです。update [TABLE NAME]。存在しないテーブルに書き込もうとしているため、これは失敗していると思います。

ああ、コミットは更新後に呼び出されます。

于 2012-05-16T20:29:00.710 に答える
1

このページを初めてロードするときに、以下を更新しようとします。

update username set balance='null' where username='null';

少なくとも、この情報を持ち、タイプのユーザーがいる場合char、何も起こりません。一方、scriptlets今日を使用することは悪い習慣と見なされます。MVCデザインパターンを適用することをお勧めします。

MVCとJDBCを使用した優れた回答のJSPが あります。

于 2012-05-16T20:49:05.770 に答える
1

クエリが 1 回だけ実行されるように、2 つのページを作成することをお勧めします。最初のページには、ケース名や残高などの入力フィールドが含まれています。したがって、フォームを送信した後、スクリプトレットに記述したコードを配置できる次のページに転送します。も書くSystem.out.println(e.getmessage())。したがって、適切なメッセージが表示されます。また、クエリにスペルミスがないことを確認するために、Mysql ブラウザでクエリを試してください。

于 2012-05-16T20:43:22.433 に答える