我想在id
表中获取插入的raw的routes
。目前我收到错误Column 'route_id' not found
,但在我为什么收到此错误之前,路由和方向正在插入表中?
代码:
DatabaseMetaData dbm = con.getMetaData();
ResultSet routesTables = dbm.getTables(null, null, "routes",
null);
int route_id;
if (routesTables.next()) {
PreparedStatement prepRoutesInsert = con.prepareStatement(
"INSERT INTO routes(direction, route)"
+ "VALUES( ?, ?)",
Statement.RETURN_GENERATED_KEYS);
prepRoutesInsert.setString(1, direction);
prepRoutesInsert.setInt(2, route);
prepRoutesInsert.executeUpdate();
try (ResultSet generatedKeys = prepRoutesInsert
.getGeneratedKeys()) {
if (generatedKeys.next()) {
int id = generatedKeys.getInt("route_id");
System.out.println("The id is: " + id);
}
}
路由表格结构:
stt.execute("CREATE TABLE IF NOT EXISTS routes ("
+ "route_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,"
+ "direction VARCHAR(30) NOT NULL, "
+ "route INT(11) NOT NULL )");
geratedKeys变量的屏幕截图:
修改
当我这样查询时,我得到了route_id
但是路由表中的所有原始数据:
PreparedStatement prepRoutesInsert2 =
con.prepareStatement(
"SELECT route_id from routes",
Statement.RETURN_GENERATED_KEYS);
ResultSet rs = prepRoutesInsert2.executeQuery();
while(rs.next()){
int route_id2 = rs.getInt("route_id");
System.out.println(route_id2);
}
答案 0 :(得分:0)
使用
int id = generatedKeys.getInt(1);
代替。
针对this MySQL bug发布的评论说:
您不应按名称检索这些列。只有索引,因为只有一列有MySQL和auto_increments,它们返回可以由Statement.getGeneratedKeys()公开的值。
如果你真的想,你可以使用
int id = generatedKeys.getInt("GENERATED_KEY");
相反,它会起作用,但我不推荐它。 A similar question询问为什么使用名称GENERATED_KEY
,其唯一的答案引用了我上面链接的相同错误。