使用Java获取MySQL表中的所有主键

时间:2014-06-13 02:30:00

标签: java mysql primary-key

如何使用MySQL获取Java表中所有主键的名称?假设我有一张桌子:

Name │ Phone Number │ verified
─────┼──────────────┼─────────
John │ 871-123-1842 │    0
Mark │ 912-917-8172 │    1
Matt │ 182-134-9917 │    1
Jake │ 971-991-8264 │    1

我想从表格中获取值JohnMarkMattJake

我知道可以有一个替代方案,只需拥有所有主键的列表,并在添加新键时添加它,只是我正在寻找更简单的东西,这将占用更少的空间。我正在寻找类似的东西:

PreparedStatement query = mySqlConnection.prepareStatement("SELECT * FROM `table`");
ResultSet results = query.executeQuery();
List<Object> results = results.getPrimaryKeyValues(); //I don't know what to put here

那么,我怎样才能使用MySQL来获取Java表中所有主键的数组或者我可以变成数组的内容?

3 个答案:

答案 0 :(得分:1)

首先,我想您不知道哪些列是您桌面上的主键。第一步是获取这些列名,然后获取值。

获取列名称:

public ArrayList<String> findPrimaryKeyColumnNames(Connection connection, 
                 String catalog, String schema, String table){ 
    /* open the connection*/
    ...

    ArrayList<String> columns = new ArrayList<String>();
    DatabaseMetaData dbData = connection.getMetaData();
    Resultset result = dbData.getPrimaryKeys(catalog, schema, table);
    while (result.next())
        columns.add(result.getString("COLUMN_NAME"));

    ... 
    /* you should... PROBABLY... close your connection ;) */

    return columns;
}

此方法的作用是返回一个ArrayList,其中包含您在参数中放置的表中的外键列的名称。

使用这个新信息,您可以轻松地进行如下的动态查询:

String query = "SELECT ";
for(String column : columns) //columns contains the info from the first method
    query += column + ", ";
query = query.substring(0, query.length - 2); //you want to get rid of that extra comma
query += "FROM " + tableName;

然后,您可以从此查询中恢复数据,它只包含给定表的主键。

答案 1 :(得分:0)

没有类似getPrimaryKeyValues()的方法。

您需要遍历ResultSet以创建自己的值列表。类似的东西:

String sql = "Select Name from yourTableNameHere";

Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery( sql );
List<String> names = new ArrayList<String>();

while (rs.next())
{
    names.add( rs.getString(1) );
}

rs.close();
stmt.close();

System.out.println( names );

答案 2 :(得分:0)

 DatabaseMetaData databaseMetaData = conn.getMetaData();  

 ResultSet resultSet = databaseMetaData.getPrimaryKeys(null, null ,  tablename);          

while (resultSet.next()) {
                String primarykeys= resultSet.getString(4);
                System.out.println(primarykeys);
            }