无法使用 executeQuery() 发出数据操作语句
我使用com.mysql.jdbc.Driver
我需要插入并获取ID。我的查询:
INSERT INTO Sessions(id_user) VALUES(1);
SELECT LAST_INSERT_ID() FROM Sessions LIMIT 1;
错误 -
无法使用 executeQuery() 发出数据操作语句
如何插入和获取ID?
我使用com.mysql.jdbc.Driver
我需要插入并获取ID。我的查询:
INSERT INTO Sessions(id_user) VALUES(1);
SELECT LAST_INSERT_ID() FROM Sessions LIMIT 1;
错误 -
无法使用 executeQuery() 发出数据操作语句
如何插入和获取ID?
您需要使用 executeUpdate() 方法来执行 INSERT 语句,而您需要使用 executeQuery() 方法来执行 SELECT 语句。这是由于 JDBC 规范对其用法的要求:
来自 Statement.executeQuery() 的 Java API 文档:
执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。
参数:
sql - 要发送到数据库的 SQL 语句,通常是静态 SQL SELECT 语句
和来自 Statement.executeUpdate() 的 Java API 文档:
执行给定的 SQL 语句,该语句可以是 INSERT、UPDATE 或 DELETE 语句,也可以是不返回任何内容的 SQL 语句(如 SQL DDL 语句)。
参数:
sql - SQL 数据操作语言 (DML) 语句,如 INSERT、UPDATE 或 DELETE;或不返回任何内容的 SQL 语句,如 DDL 语句。
您的代码(此处发布的伪代码)应显示为:
statement.executeUpdate("INSERT INTO Sessions(id_user) VALUES(1)"); // DML operation
statement.executeQuery("SELECT LAST_INSERT_ID()"); // SELECT operation
当然,MySQL文档演示了如何对AUTO_INCREMENT列执行相同的活动,这显然是您需要的。
如果需要在同一事务中同时执行这两个语句,请在一个字符串中提交语句,并用分号分隔它们,如下所示:
statement.execute("INSERT INTO Sessions(id_user) VALUES(1); SELECT LAST_INSERT_ID() FROM Sessions LIMIT 1;");
然后你需要使用 execute() 方法。请注意,这取决于数据库和 JDBC 驱动程序提供的对在单个 execute() 中一起批处理语句的支持。这在Sybase和MSSQL Server中是受支持的,但我认为MySQL不支持它。
可能是你正在使用 executeQuery() 但是要操作数据,你实际上需要 executeUpdate() 而不是 executeQuery()