【问题标题】:MySQL Java JDBC: How to get the name of an auto-incremented column?MySQL Java JDBC:如何获取自动递增列的名称?
【发布时间】:2011-10-05 08:54:13
【问题描述】:

我正在开发一个使 MySQL 数据库的使用变得更简单的程序。现在我必须创建表单来添加和编辑数据库中表中的数据。问题是,当我创建表单时,我不想显示自动递增列的字段。我只需要列的名称来解决这个问题,但我不知道如何找到自动递增列的名称。我已经尝试查找答案,但我发现的只是有关查找自动生成的密钥的信息。有人可以帮助我或指出正确的方向吗?感谢您的帮助。

更新: 谢谢您的帮助。根据下面的答案,我想出了这个方法:

public Vector<String> getAutoIncrementedColumns(String table) {
    Vector<String> columnNames = new Vector<String>();
    Connection connection;
    try {
        connection = DriverManager.getConnection(getUrl(), getUser(),
                    getPassword());
        Statement statement = connection.createStatement();
        ResultSet result = statement.executeQuery("Select * from "+table);
        int columnCount = result.getMetaData().getColumnCount();
        for(int i = 1; i <=columnCount; i++){
            if(result.getMetaData().isAutoIncrement(i)){
                columnNames.add(result.getMetaData().getColumnName(i));
            }
        }

    } catch (SQLException e) {

        e.printStackTrace();
    }


    return columnNames;
}

【问题讨论】:

    标签: java mysql sql jdbc


    【解决方案1】:

    INFORMATION_SCHEMA.COLUMNS 表的EXTRA 列应包含此信息。

    PS:这是我的想法。手边没有MySql,可能需要测试确认。

    【讨论】:

      【解决方案2】:

      一旦你有了ResultSet,你就可以调用它的getMetaData方法来获取ResultSetMetaData对象。从那里,您可以使用 isAutoIncrement 方法来确定列是否为 AUTO_INCREMENT 列,并使用 getColumnName 来获取列的名称。

      【讨论】:

        【解决方案3】:

        ResultSetMetaData 类可以提供此信息。

        但您必须先执行select * 才能获得结果集。你可以这样做

        SELECT * FROM table LIMIT 1 
        

        获取结果集。

        【讨论】:

          【解决方案4】:

          如果您有权访问架构 information_schema,则可以从表中获得这些信息

          • 表格(列:auto_increment,0 = 否,1 = 是)
          • COLUMNS(列:extra = 特定列的 auto_increment)

          【讨论】:

            猜你喜欢
            • 2012-06-21
            • 2011-08-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-16
            • 2014-10-01
            • 2012-12-20
            相关资源
            最近更新 更多