我試圖找到所有表的所有唯一鍵。它將獨立於供應商。請提前幫助感謝。Java代碼查找數據庫中所有表的唯一鍵
1
A
回答
0
正如注:Kunal說,你需要使用模式和表現場檢查需要嘗試檢查架構類
5
您可以使用JDBC元數據,以獲得有關此類事情的信息。
以下是您可以使用的示例片段。
儘管Oracle JDBC驅動程序用於測試,但它的供應商無關。 您可以使用其他數據庫供應商的代碼。
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Test {
public static void main(String[] args) throws Throwable {
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521/service.name", "username", "password");
DatabaseMetaData meta = conn.getMetaData();
String schemaName = "SCHEMA_NAME";
List<String> tables = listAllTableNames(meta, schemaName);
printPrimaryKeys(schemaName, tables.iterator(), meta);
printUniqueIndexes(schemaName, tables.iterator(), meta);
}
private static List<String> listAllTableNames(DatabaseMetaData meta, String schemaName) throws SQLException {
List<String> list = new ArrayList<String>();
ResultSet rs = meta.getTables(null, schemaName, null, new String[] { "TABLE" });
while(rs.next()) {
String tableName = rs.getString("TABLE_NAME");
list.add(tableName);
}
return list;
}
private static void printPrimaryKeys(String schemaName, Iterator<String> iter, DatabaseMetaData meta) throws SQLException {
while(iter.hasNext()) {
String tableName = iter.next();
ResultSet rs = meta.getPrimaryKeys(null, schemaName, tableName);
while(rs.next()) {
String pkName = rs.getString("PK_NAME");
String table = rs.getString("TABLE_NAME");
String schema = rs.getString("TABLE_SCHEM");
String columnName = rs.getString("COLUMN_NAME");
System.out.println("----------------------------------------");
System.out.println("Table: " + schema + "." + table);
System.out.println("Key Name: " + pkName);
System.out.println("Column(s): " + columnName);
}
}
}
private static void printUniqueIndexes(String schemaName, Iterator<String> iter, DatabaseMetaData meta) throws SQLException {
while(iter.hasNext()) {
String tableName = iter.next();
boolean listUniqueIndex = true;
ResultSet rs = meta.getIndexInfo(null, schemaName, tableName, listUniqueIndex, true);
while(rs.next()) {
String indexName = rs.getString("INDEX_NAME");
String table = rs.getString("TABLE_NAME");
String schema = rs.getString("TABLE_SCHEM");
String columnName = rs.getString("COLUMN_NAME");
if(indexName == null) {
continue;
}
System.out.println("****************************************");
System.out.println("Table: " + schema + "." + table);
System.out.println("Index Name: " + indexName);
System.out.println("Column Name: " + columnName);
}
}
}
}
0
同時檢查sourceforge上的DbTamer,包括源代碼。 http://sourceforge.net/projects/dbtamer/ 它旨在對數據庫進行反向工程,使其更容易在不同的RDBMS之間傳輸,但其核心是用於迭代表格並將表格元數據提取到可重用對象模型中的代碼。
相關問題
- 1. 查找數據庫中的所有表按主鍵
- 2. SQL Server:查找數據庫中唯一表的列表
- 3. 在所有數據庫的所有對象中查找表名
- 4. R - 在數據幀的子集中查找所有唯一值
- 5. 在sequalizer中查找所有唯一ID的所有最新數據?
- 6. 在所有列中查找唯一值
- 7. 使用Java查找實例中的所有SQL Server數據庫
- 8. 唯一查詢所有類型的數據庫[TOP(1)]
- 9. 查找數據庫表的唯一約束條件
- 10. mongoDB中的主鍵在所有數據庫中都是唯一的嗎?
- 11. Grails:Joda LocalDate作爲MySQL數據庫中的唯一鍵碼
- 12. 從所有行的表字段中查找唯一字符
- 13. 查找數據庫中引用某個主鍵的所有外鍵約束
- 14. 查找MySQL數據庫表列中的所有字符?
- 15. 爲postgresql數據庫中的所有表查找min(created_at)
- 16. 查找不在列表中的數據庫表中的鍵
- 17. 查找所有具有外鍵的表
- 18. 一次檢索數據庫中所有表的MAX主鍵值
- 19. 查找所有R唯一字符串
- 20. 在矩陣中查找所有可能的唯一數組
- 21. 查找PHP代碼庫中的所有字符串
- 22. Cakephp查找所有數據庫錯誤
- 23. 查找SQL Server數據庫中的所有僞相關數據
- 24. 刪除所有列中的唯一鍵
- 25. Mysql - 在所有數據庫中查找表格
- 26. 所有表格和代碼都從Access數據庫中消失
- 27. Java中的唯一ID代碼
- 28. Azure SQL數據庫查找與特定表關聯的所有數據庫
- 29. EF代碼模型中沒有外鍵的第一查找值
- 30. 在一個數據庫中所有表
你是什麼意思?你想查詢一個給定表的模式是否有唯一的約束? – Thilo 2010-12-09 07:12:29