2

車の価格を更新しようとしていますが、データベース内の項目の 1 つしか更新できません。私の論理は間違っていると思います。

誰かがそれを解決する方法を私に提案できますか.

MySQL テーブル:

 +-----------+-----------+
 | car       | price     |
 +-----------+-----------+
 | Bmw       |    434312 |
 | Audi      |    222121 |
 | Mercedes  |     33333 |
 +-----------+-----------+

HTML コード:

                       <td><input TYPE="text" NAME="Bmw"></td>

                       <td><input TYPE="text" NAME="Audi"></td>

                       <td><input TYPE="text" NAME="Mercedes"></td>

Java コード:

  String Bmw=(String)session.getAttribute("Bmw");
    session.setAttribute("Bmw",Bmw);
    Bmw=request.getParameter("Bmw");

 String Audi=(String)session.getAttribute("Audi");
    session.setAttribute("Audi",Audi);
    Audi=request.getParameter("Audi");

 String Mercedes=(String)session.getAttribute("Mercedes");
    session.setAttribute("Mercedes",Mercedes);
    Mercedes=request.getParameter("Mercedes");




 try {
    Connection conn = null;
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    conn =       DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");
    Statement st = null;
    session.setAttribute("st",st);
    st = conn.createStatement();
    String sqlqueryCommand = "select * from item";
    ResultSet results = st.executeQuery(sqlqueryCommand);


    while(results.next()) {
            if(request.getParameter("Bmw")!=null &&    results.getString("car").equals("Bmw")) {
                    st.executeUpdate("update item set price='"+Bmw+"' where   car='"+results.getString("car")+"'");
                    conn.commit();
            }
            if(request.getParameter("Audi")!=null && results.getString("car").equals("Audi")) {
                    st.executeUpdate("update item set price='"+Audi+"' where car='"+results.getString("car")+"'");
                    conn.commit();
            }
            if(request.getParameter("Mercedes")!=null && results.getString("car").equals("Mercedes")) {
             st.executeUpdate("update item set price='"+Mercedes+"' where car='"+results.getString("car")+"'");
             conn.commit();
             }  
    }
    conn.close();
}
catch(Exception e) {
    System.out.println(e);
}
4

2 に答える 2

1

何のために選択する必要がありますか?あなたはその結果を前もって知っています。

この部分:

文字列Bmw=(String)session.getAttribute( "Bmw"); session.setAttribute( "Bmw"、Bmw);

あまり意味がありません。セッションからではなく、リクエストから値を取得したくないのではないでしょうか。

sql-injectionsに注意してください。代わりに、プリペアドステートメントとパラメータープレースホルダーを使用してください。

これは、少し短く安全に物事を行う方法についての提案です。これは、jdbcがどのように機能するかについての記憶からのものです。

String[] types = new String[]{"Bmw", "Audi", "Mercedes"};
PreparedStatement statement = conn.prepareStatement("update item set price=:price where car=:car");
for(String type : types)
{
  String parameterValue = request.getParameter(type);
  if (type != null)
  {
    statement.setObject("price", parameterValue);
    statement.setObject("car", type);
    statement.executeUpdate();
  }
}
statement.close();

さらに、catchブロックでは、e.printStackTrace()の代わりに使用することをお勧めしSystem.out.println(e);ます。これは、デバッグ時に非常に役立ちます。

PS:あなたの車のコラムアイテムに空白が含まれていないことを確認しますか?results.getString("car")任意のループに印刷します。

于 2012-05-18T19:56:21.893 に答える
1

結果をトラバースするときは注意してください。テーブルを読みながら更新しています。

データベースのメタデータが既にあるため、Select クエリは必要ありません。

results.getString("car").equals("Bmw")

この行を役に立たなくする

where   car='"+results.getString("car")+"'"

両方のステートメントを単純な Where ステートメントに置き換える必要があります。

where car='Bmw'

車のタイプを一度ハードコーディングしたことがあり、これをずっと使用する必要がある場合。これにより、更新のみを実行できます。疑問がある場合は、結果セットの状態を確認してくださいcon.commit()

于 2012-05-18T21:15:25.340 に答える