如何使用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
我想从表格中获取值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
那么,我怎样才能使用MySQL
来获取Java
表中所有主键的数组或者我可以变成数组的内容?
答案 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);
}