2017-10-10 3 views
2

tables 이름이 들어있는 tList이라는 목록이 있습니다. 이 목록에있는 표는 존재할 수도 있고 존재하지 않을 수도 있습니다. 모든 테이블에서 데이터를 검색하려고합니다. 나는 이렇게하고있다. 테이블에 데이터베이스가 있는지 확인합니다.

for(String t:tList){ 
    sql=Select * from t 
} 

그러나 table가없는 경우이 시나리오에서

, 나는 예외를 얻고 해당 테이블이 존재하지 않는 내 프로그램은 종료 가져옵니다. 테이블 만 있으면 데이터를 검색 할 수 있도록 처리하는 방법

테이블이 있지만 비어있는 시나리오가 하나 더 있습니다. 오류가 발생합니다.

//your query 
    sql=Select * from t 
    Statement stmt = yourDBConnection.createStatement(); 
    ResultSet rs = stmt.executeQuery(sql); 
    if (!rs .isBeforeFirst()) {  
    System.out.println("Table is empty"); 
    } 
+1

음 ... 당신이 예외를 잡을 수 있습니다 .... 그리고 빈 테이블이 당신에게 오류를 제공하지 않아야합니다. – Henry

+0

오라클입니까? 아니면 어떤 데이터베이스? – user7294900

+0

sybase 데이터베이스 – zaib7777

답변

1

당신이 DatabaseMetaData.getTables() 예를 시도 이러한 두 가지 시나리오에 도와주세요 더 적절한 방법은 데이터를 얻는 것입니다. java.sql.DataBaseMetaData.

java.sql.Connection 객체는 테이블, 지원되는 SQL 문법, 저장 프로 시저,이 연결 기능 등을 설명하는 정보를 제공 할 수 있습니다. 이 정보는 getMetaData 메소드로 확보됩니다.

참조 : https://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html https://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html

+0

시도했지만 데이터베이스에서 모든 테이블을 가져 오는 것 같아요 그리고 이것도 내가 동일한 문제가 발생할 것이라고 생각합니다 – zaib7777

+0

다시 한번 시도 할 것입니다 그러나 그것과 함께 나는 테이블이 비어 있는지 확인하고 싶습니다. 비어있는 경우 프로그램을 실행하고 싶습니다. – zaib7777

+0

테이블이 비어 있습니다. '존재하는 경우 모든 테이블에서 데이터를 검색하고 싶습니다.' 빈 테이블은 빈 결과 집합이되고 .next()는 false가됩니다. . – Optional

2

나는 생각 : 당신의 빈 테이블의 질문에 대답하기

편집

DatabaseMetaData md = connection.getMetaData(); 
ResultSet rs = md.getTables(null, null, t, null); //t is your tableName (defined in loop of your question) 
while (rs.next()) { 
    System.out.println(rs.getString(3)); 
} 

:

관련 문제