2015-02-05 2 views
-1

특정 데이터베이스에서 모든 테이블 이름을 검색하려고합니다. 나는 다음 코드를 시도했다.jdbc를 사용하여 특정 데이터베이스에서 모든 테이블 이름을 가져 오는 방법

try { 
     DatabaseMetaData dbmd = connection.getMetaData(); 
     String[] types = {"TABLE"}; 
     ResultSet rs = dbmd.getTables(null, null, "%", types); 
     while (rs.next()) { 
      System.out.println(rs.getString("TABLE_NAME")); 
     } 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 

그러나 nullpointer 예외를 제공하고있다.

+0

**는 정확하게는 nullpointer 예외주고 **? –

+0

정확히 ** ** RDBMS를 사용하고 있습니까? –

+0

Sqlite를 사용하고 있습니다. – nikalldway

답변

0

는 다음을 시도해보십시오 (여기에서 촬영 : https://stackoverflow.com/a/2780375/1843508)

DatabaseMetaData md = conn.getMetaData(); 
ResultSet rs = md.getTables(null, null, "%", null); 
while (rs.next()) { 
    System.out.println(rs.getString(3)); 
} 

+0

코드를 사용해 보았지만 출력이 나오지 않습니다. 생성자에서 다음 코드를 호출하고 Sqlite 데이터베이스를 사용하고 있습니다. – nikalldway

+0

JDBC를 통해 다음 쿼리를 실행하고 결과가 표시되는지 확인하십시오. SELECT name FROM sqlite_master WHERE type = 'table'; –

1

예 다음은 방법 conn.getMetaData()가 예상 데이터를 반환하는 것을 보여줍니다.

public class Main { 

    public static void main(String[] args) throws SQLException { 
     try (Connection conn = DriverManager.getConnection("jdbc:sqlite:testdata.db"); 
       Statement stmt = conn.createStatement()) { 
      String sql = "CREATE TABLE IF NOT EXISTS TEST_TABLE" 
        + " (ID INT PRIMARY KEY  NOT NULL," 
        + " NAME   TEXT NOT NULL, " 
        + " ADDRESS  CHAR(50))"; 
      stmt.executeUpdate(sql); 

      DatabaseMetaData md = conn.getMetaData(); 
      ResultSet rs = md.getTables(null, null, "%", null); 
      while (rs.next()) { 
       System.out.printf("table name: %s%n", rs.getString("TABLE_NAME")); 
      } 
     } 
    } 
} 

제조 출력 :

table name: TEST_TABLE 
+0

고마워요 ... – nikalldway

관련 문제