我正在尝试将新行插入 MYSQL 数据库。问题实际上是如何构造用于准备语句的插入字符串。插入的新行具有新值,但从另一个表中获取其值的一列除外。我使用 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)
这是令人惊讶的,因为我放了 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驱动程序在我看来很好时抱怨参数数量。或者我忽略了什么?