[英]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.