我試圖在MYSQL數據庫中插入新行。問題實際上是如何構造用於準備語句的插入字符串。插入的新行具有新值,除了一列從另一個表中獲取其值。我使用H2進行測試,這就是我如何構建字符串。對使用JDBC的Mysql插入語句感到困惑
"INSERT INTO RESERVATION CUSTOMER_CODE,ROOM_NUMBER,RESERVATION_DATE,START_DATE,END_DATE,
TOTAL_PRICE) values(select CUSTOMER_CODE FROM CUSTOMER where EMAIL=?,?,?,?,?,?)"
我認爲插入字符串對於MYSQL是相同的,但它不工作。我google搜索,發現這個答案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)
,因爲我已經把6問號,而不是1 這是令人驚訝的錯誤出現在這些行的第二行,我將值設置爲?
佔位符。
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驅動程序在向我看好的時候抱怨參數的數量。或者我忽略了什麼?
如果只有你可以閱讀錯誤信息......也許它解釋了什麼問題是什麼? – 2013-04-20 12:52:13
@ JB Nizet,幾乎在任何時候這個消息都很有幫助,但是這一次它以不同的語言發言 – Obby 2013-04-20 13:04:15
您是否嘗試過使用第一條語句,但將內部select語句包裝到括號中? – 2013-04-20 13:07:16