sql jdbc getgeneratedkeys 返回列“id”未找到,列类型未知
Posted
技术标签:
【中文标题】sql jdbc getgeneratedkeys 返回列“id”未找到,列类型未知【英文标题】:sql jdbc getgeneratedkeys returns column "id" not found, column type unknown 【发布时间】:2011-02-20 17:42:35 【问题描述】:我想使用插入查询检索表中最近更新的值。
这些是我的 sql 表中的数据类型。
数据类型:
int(11) // primary key auto increment, not being assigned by sqlQuery
varchar(30)
timestamp // has a default value. but i am explicit assigning it using CURRENT_TIMESTAMP
varchar(300)
varchar(300)
varchar(300)
int(11)
varchar(300)
java代码
statement.executeUpdate(sqlQuery, Statement.RETURN_GENERATED_KEYS);
ResultSet rs = statement.getGeneratedKeys();
System.out.println("here: " + rs.getMetaData().getColumnCount());
System.out.println("here1: " + rs.getMetaData().getColumnName(1));
// none of the following 3 works
System.out.println("id: " + rs.getInt(1));
System.out.println("id: " + rs.getInt("GENERATED_KEY"));
System.out.println("id: " + rs.getInt("id"));
for a bit of background see [this][1]
`rs.getMetaData().getColumnTypeName(1)` tells me column type `UNKNOWN`
堆栈跟踪
SEVERE: null
java.sql.SQLException
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:815)
at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5528)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5448)
[1]: http://***.com/questions/2853066/sql-java-get-value-assigned-to-auto-increment-primary-key
【问题讨论】:
问题不清楚吗? 您使用的是什么版本的 MySQL 和 MySQL 连接器? 【参考方案1】:您需要拨打rs.next()
:
int autoIncKeyFromApi = -1;
rs = stmt.getGeneratedKeys();
if (rs.next())
autoIncKeyFromApi = rs.getInt(1);
else
// do what you have to do
System.out.println(autoIncKeyFromApi);
【讨论】:
我尝试了几种组合。不是这个! 没错,但我会把它放在if
块中。另请参阅this answer。
@PascalThivent 你能解释一下为什么我们需要 rs.next() 吗?【参考方案2】:
可能是因为 sqlQuery 没有创建任何新记录! 在这种情况下,它将返回一个空的 ResultSet 看getGeneratedKeys()的规范
【讨论】:
以上是关于sql jdbc getgeneratedkeys 返回列“id”未找到,列类型未知的主要内容,如果未能解决你的问题,请参考以下文章
jdbc-mysql基础 ResultSet getGeneratedKeys 插入一条字段并返回其主键
如何让 Statement.getGeneratedKeys 工作