无法使用 executeQuery() 发出数据操作语句

2022-09-02 20:38:20

我使用com.mysql.jdbc.Driver

我需要插入并获取ID。我的查询:

INSERT INTO Sessions(id_user) VALUES(1);
SELECT LAST_INSERT_ID() FROM Sessions LIMIT 1;

错误 -

无法使用 executeQuery() 发出数据操作语句

如何插入和获取ID?


答案 1

您需要使用 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不支持它。


答案 2

可能是你正在使用 executeQuery() 但是要操作数据,你实际上需要 executeUpdate() 而不是 executeQuery()


推荐