gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:54:33 26 4
gpt4 key购买 nike

我使用com.mysql.jdbc.Driver

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

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

错误-

Can not issue data manipulation statements with executeQuery()

如何插入和获取id?

最佳答案

您需要使用 executeUpdate() 方法来执行 INSERT 语句,而您需要使用 executeQuery() 方法来执行 SELECT 语句。这是由于 JDBC 规范对其使用提出的要求:

来自 Statement.executeQuery() 的 Java API 文档:

Executes the given SQL statement, which returns a single ResultSet object.

Parameters:

sql - an SQL statement to be sent to the database, typically a static SQL SELECT statement

来自 Statement.executeUpdate() 的 Java API 文档:

Executes the given SQL statement, which may be an INSERT, UPDATE, or DELETE statement or an SQL statement that returns nothing, such as an SQL DDL statement.

Parameters:

sql - an SQL Data Manipulation Language (DML) statement, such as INSERT, UPDATE or DELETE; or an SQL statement that returns nothing, such as a DDL statement.

您的代码(此处发布的伪代码)应显示为:

statement.executeUpdate("INSERT INTO Sessions(id_user) VALUES(1)"); // DML operation
statement.executeQuery("SELECT LAST_INSERT_ID()"); // SELECT operation

当然还有 MySQL documentation demonstrates how to perform the same activity for AUTO_INCREMENT columns ,这显然是你需要的。

如果您需要在同一个事务中同时执行这两个语句,请在一个字符串中提交语句,并用分号分隔它们,如下所示:

statement.execute("INSERT INTO Sessions(id_user) VALUES(1); SELECT LAST_INSERT_ID() FROM Sessions LIMIT 1;");

那么你需要使用 execute() 方法。请注意,这取决于数据库和 JDBC 驱动程序对在单个 execute() 中批处理语句提供的支持。这在 Sybase 和 MSSQL Server 中受支持,但我认为它在 MySQL 中不受支持。

关于java - 无法使用 executeQuery() 发出数据操作语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6454627/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com