2013-10-16 18 views
1

我有一種方法可以在JCombo Box中顯示錶格。Java JDBC獲取表格

private void getTables() throws SQLException { 


    dburl = "jdbc:oracle:thin:@localhost:1521:ORCL"; 
    connection = DriverManager.getConnection(dburl, "c##lambros", "16111111"); 
    dbmd = connection.getMetaData(); 
    rset= dbmd.getTables(null, null, "%", null); 

    while (rset.next()) { 
     System.out.println(rset.getString(3)); 
    } 

} 

的問題是,我只有3個表名爲:罪犯,代理,信息提供者,但該方法返回我各種表格,如:_GV $ SXGG_APPLY_READER,_GV $ SXGG_APPLY_SERVER,_GV $ SXGG_CAPTURE例如,數百別人的。我如何過濾它們?

回答

1

我發現了它。正確的代碼是:

private void getTables() throws SQLException { 


    dburl = "jdbc:oracle:thin:@localhost:1521:ORCL"; 
    connection = DriverManager.getConnection(dburl, "c##lambros", "16111111"); 
    dbmd = connection.getMetaData(); 
    query = " Select table_name FROM user_tables "; 
    stmt = connection.createStatement(); 
    rset = stmt.executeQuery(query); 

    while (rset.next()) { 
     System.out.println(rset.getString(1)); 
    } 

} 
0

在這裏被some doc建議使用stmt.executeQuery( 「從USER_OBJECTS選擇OBJECT_NAME其中object_type的= 'TABLE'」)是這樣的:

public static void main(String[] args) throws Exception { 
    Connection conn = getOracleConnection(); 
    Statement stmt = null; 
    ResultSet rs = null; 
    stmt = conn.createStatement(); 
    //only for Oracle 
    rs = stmt.executeQuery("select object_name from user_objects where object_type = 'TABLE'"); 

    while (rs.next()) { 
     String tableName = rs.getString(1); 
     System.out.println("tableName=" + tableName); 
    } 

    stmt.close(); 
    conn.close(); 
    } 

這將用於Oracle工作僅雖然

+0

object_name和user_objects是否內置在命令中? – Lambros

+0

我認爲那些是Oracle保存元數據的實體。不是這樣的命令,更像列和表。 – user1455836

0

作爲每甲骨文docs 的getTables()接受4個參數一樣catalog, schemaPattern,tableNamePattern,types,但你正在空,因此你得到所有的表名

在現有的代碼使第四爭論彪這樣new String[]{"TABLE"}

完整的代碼將

private void getTables() throws SQLException { 

String[] types = {"TABLE"}; 
    dburl = "jdbc:oracle:thin:@localhost:1521:ORCL"; 
    connection = DriverManager.getConnection(dburl, "c##lambros", "16111111"); 
    dbmd = connection.getMetaData(); 
    rset= dbmd.getTables(null, null, "%", types); 

    while (rset.next()) { 
     System.out.println(rset.getString("TABLE_NAME")); 
    } 

} 
+0

仍然不起作用。我再次收到許多不相關的表格...... – Lambros

+0

@Lambros你根據我的回答準確地做了什麼? – SpringLearner