[英]Get all primary keys in a MySQL table using Java
如何使用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
我想从表中获取值John
, Mark
, Matt
和Jake
。
我知道可以有一种选择,就是只列出所有所有主键,并在添加新主键时将其添加到其中,只是我在寻找更简单的东西,它将占用更少的空间。 我正在寻找类似的东西:
PreparedStatement query = mySqlConnection.prepareStatement("SELECT * FROM `table`");
ResultSet results = query.executeQuery();
List<Object> results = results.getPrimaryKeyValues(); //I don't know what to put here
那么,如何使用Java
MySQL
表中所有主键的数组或可以变成数组的东西呢?
首先,我想您不知道表上哪些列是主键。 第一步将是获取这些列名称,然后获取值。
要获取列名:
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;
然后,您可以从该查询中恢复数据,并且该数据仅包含给定表的主键。
没有像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 );
DatabaseMetaData databaseMetaData = conn.getMetaData();
ResultSet resultSet = databaseMetaData.getPrimaryKeys(null, null , tablename);
while (resultSet.next()) {
String primarykeys= resultSet.getString(4);
System.out.println(primarykeys);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.