" route_id"找不到

时间:2015-06-18 15:23:07

标签: java jdbc

我想在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变量的屏幕截图:

enter image description here

修改 当我这样查询时,我得到了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);
             }

1 个答案:

答案 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,其唯一的答案引用了我上面链接的相同错误。