从未知数据库SQL和Java中查找外键
我有一个java程序,可以查询任何类型的数据库和任意数量的表。用户可以输入一个字符串,它将返回包含该字符串的表和行。问题是这些表中的某些表具有外键。我如何能够在没有任何数据库知识的情况下递归地遍历所有表来查找外键和行
平台:Windows7(64) 数据库类型:Postgres
代码:
public static void connectPostGres(String type, String server, String database, String port, String username, String password) { System.out.println("-------- PostgreSQL JDBC Connection Testing ------------"); try { Class.forName("org.postgresql.Driver"); } catch (ClassNotFoundException e) { System.out.println("Where is your PostgreSQL JDBC Driver? Include in your library path!"); e.printStackTrace(); return; } System.out.println("PostgreSQL JDBC Driver Registered!"); Connection connection = null; try { connection = DriverManager.getConnection("jdbc:postgresql://" + server + ":" + port + "/" + database, username, password); //connection = DriverManager.getConnection("*********); } catch (SQLException e) { System.out.println("doh!"); e.printStackTrace(); return; } if (connection != null) { System.out.println("Searching..."); LinkedList allTables = new LinkedList(); try { Statement st = connection.createStatement(); ResultSet rs = st.executeQuery("select * from pg_tables");//get all the tables while (rs.next()) { String myString = rs.getString("tablename"); if (myString.trim().charAt(0) == 'p' && myString.trim().charAt(1) == 'g') { //this is just some crappy tables we dont want to query through } else if (myString.trim().charAt(0) == 's' && myString.trim().charAt(1) == 'q' && myString.trim().charAt(2) == 'l') { //this is just some crappy tables we dont want to query through } else { allTables.add(myString);//add all tables to a linkedlist } } rs.close(); String masterQuery = ""; for (int i = 0; i columnList = new LinkedList(); for (int j = 1; j 0) { for (int j = 0; j
# 1 楼答案
您可以阅读这个关于检索postgres元数据的信息性article
通常,您必须深入了解信息模式或使用系统目录
编辑
此外,将尽可能多的逻辑放在SQL中,以避免检索和处理根本不需要的数据
这里是上述文章的副本/粘贴,列出了所有约束条件(您可以在这里找到这两种方法)
# 2 楼答案
您可以查询数据库元数据以获取此类信息:
见DatabaseMetaData