Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java获取MySQL表中的所有主键_Java_Mysql_Primary Key - Fatal编程技术网

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

使用Java获取MySQL表中的所有主键,java,mysql,primary-key,Java,Mysql,Primary Key,如何使用Java获取MySQL表中所有主键的名称?假设我有一张桌子: Name │ Phone Number │ verified ─────┼──────────────┼───────── John │ 871-123-1842 │ 0 Mark │ 912-917-8172 │ 1 Matt │ 182-134-9917 │ 1 Jake │ 971-991-8264 │ 1 那么,如何使用Java,获取MySQL表中所有主键的数组,或者将其转换为数组?没有像get

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

Name │ Phone Number │ verified ─────┼──────────────┼───────── John │ 871-123-1842 │ 0 Mark │ 912-917-8172 │ 1 Matt │ 182-134-9917 │ 1 Jake │ 971-991-8264 │ 1
那么,如何使用
Java
,获取
MySQL
表中所有主键的数组,或者将其转换为数组?

没有像
getPrimaryKeyValues()
这样的方法

您需要遍历
ResultSet
来创建自己的值列表。比如:

PreparedStatement query = mySqlConnection.prepareStatement("SELECT * FROM `table`");
ResultSet results = query.executeQuery();
List<Object> results = results.getPrimaryKeyValues(); //I don't know what to put here
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 );
String sql=“从您的表名中选择名称”;
语句stmt=connection.createStatement();
结果集rs=stmt.executeQuery(sql);
列表名称=新的ArrayList();
while(rs.next())
{
name.add(rs.getString(1));
}
rs.close();
stmt.close();
System.out.println(名称);

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

要获取列名,请执行以下操作:

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;
}

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

如果您有复合主键,您希望代码做什么?谢谢!我实际上是在做类似的事情,除了在
rs.getString(1)
中,每次循环时,我都会使
1
递增(哎哟)。再次感谢!谢谢你的帮助!实际上,我可能会将您答案的底部部分用于我正在(尝试)开发的MySQL API!我希望你能接受两个答案,但遗憾的是,你不能。。。我选择camickr是因为它简单得多,但我可能仍然会使用你的一部分。。。谢谢+1对于
,您应该。。。可能关闭您的连接;):D
 DatabaseMetaData databaseMetaData = conn.getMetaData();  

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

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

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

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