MYSQL データベースに新しい行を挿入しようとしています。問題は、実際にはステートメントの準備に使用される挿入文字列をどのように構成するかです。挿入される新しい行には、別のテーブルから値を取得していた 1 つの列を除いて、新しい値があります。テストにH2を使用していましたが、これが文字列の構造です。
"INSERT INTO RESERVATION CUSTOMER_CODE,ROOM_NUMBER,RESERVATION_DATE,START_DATE,END_DATE,
TOTAL_PRICE) values(select CUSTOMER_CODE FROM CUSTOMER where EMAIL=?,?,?,?,?,?)"
挿入文字列は MYSQL でも同じだと思っていましたが、うまくいきません。私はぐるぐる回って、この答えを見つけましたhttps://stackoverflow.com/a/26080/1788917。そこで、文字列を次のように変更しました。
"INSERT INTO RESERVATION
CUSTOMER_CODE,ROOM_NUMBER,RESERVATION_DATE,START_DATE,END_DATE,
TOTAL_PRICE) select CUSTOMER_CODE FROM CUSTOMER where EMAIL=?,?,?,?,?,?"
エラーが変わったので何とか動いたと思います。しかし、MYSQL ドライバーは、まだエラーがあることを通知しています。どういうわけか、引用符が必要以上にあるかのようです。これがエラーです
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your
SQL syntax; check the manual that corresponds to your MySQL server version for the
right syntax to use near ''A13','2013-04-20','2013-04-20','2013-04-24',14000.0'
at line ...
つまり、他のテーブルから最初の値(CUSTOMER_CODE)を適切に取得しましたが、残りの値は一緒に引用されているため、気になっています。どうすればこれを解決できますか...
私の間違いはどこですか?
選択クエリなしでステートメントを挿入できるように、顧客コードを取得するメソッドを作成することにしました。文字列は次のようになります
"INSERT INTO RESERVATION
(CUSTOMER_CODE,ROOM_NUMBER,RESERVATION_DATE,START_DATE,END_DATE,TOTAL_PRICE)
values(?, ?, ?, ?, ?, ?)"
しかし、今mysqlドライバーはこのように不平を言っています...
java.sql.SQLException: Parameter index out of range (2 > number of parameters, which
is 1). at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
1 ではなく 6 つの疑問符を付けたので、これは驚くべきことです。値を?
プレースホルダーに設定しているこれらの行の 2 行目にエラーが表示されます。
preStatement.setLong(1, customer.getCustomerCode());
preStatement.setString(2, reservation.getRoomNumber());
preStatement.setDate(3, reservation.getReservationDate());
preStatement.setDate(4, reservation.getStartDate());
preStatement.setDate(5,reservation.getEndDate());
preStatement.setDouble(6, reservation.getTotalPrice());
では、MYSQL ドライバーがパラメーターの数について不平を言っているのはなぜですか。または私は何を見落としていますか?