我试图在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