5

このコードには、ある種の単純な構文エラーがあります。私は今何時間もそれと戦ってきましたが、あきらめました。あなたはそれを見つけることができますか?きっと簡単です。ありがとう!

ファーストネームのジョンだけを更新しても問題ありません。姓のコメントアウトされた行も更新しようとすると、構文エラーが発生します。

import java.sql.*;

public class UpdateTester {

   public static void main(String[] args) {

      try {

         Connect connect = new Connect();
         Connection connection = connect.getConnection();

         try {

            String sql        = "UPDATE student SET firstName = ? "
                     + " WHERE studentID = 456987";

            //String sql     = "UPDATE student SET firstName = ? "
            //       + " Set lastName = ?, "
            //       + " WHERE studentID = 456987";

            PreparedStatement pst = connection.prepareStatement(sql);
            pst.setString(1, "John");

            //pst.setString(2, "Johnson");

            pst.executeUpdate();
            System.out.println("Updated Successfully!");

            connection.close();

         } catch (SQLException e) {
            System.out.println("Exception 1!");
            e.printStackTrace();
         }
      } catch (Exception e) {
         System.out.println("Exception 2!");
         e.printStackTrace();
      }
   }
}

列名は正しいです。姓だけを単独で更新することも正しく機能します。コメントアウトされた行のように、両方を実行しようとすると、更新が構文エラーで失敗します。

4

1 に答える 1

10

3 つの問題:

  • SET キーワードは、UPDATE ステートメントで 1 回だけ使用できます。
  • 2 番目のパラメータの前のカンマがありません
  • where句の前に不要なコンマ

修正された構文:

String sql     = "UPDATE student SET firstName = ?, "
               + " lastName = ? "
               + " WHERE studentID = 456987";

SQL リファレンス

于 2013-04-04T23:15:18.857 に答える