2013-07-06 2 views
0

나는 자바에 새로 온 사람을 통해 DB에 연결하고 데이터베이스와이 간단한 프로그램 액세스를 만들기 위해 노력하고 있어요 때자바 예외 : SQLException JDBC

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.Driver; 
import java.sql.SQLException; 
import java.util.Properties; 
import org.apache.derby.jdbc.EmbeddedDriver; 


public class Test1 { 

    public static void main(String[] args) { 
    final String url = "jdbc:derby:emp"; 
    Driver driver=new EmbeddedDriver(); 
    Properties prop=new Properties(); 
    prop.put("create", "true"); 

    try (Connection con = driver.connect(url, prop)) 
    { 
    // Perform useful work. The following throw statement simulates a 
    // JDBC method throwing SQLException. 
    throw new SQLException("Unable to access database table", 
    new java.io.IOException("File I/O problem")); 
    } 
    catch (SQLException sqlex) 
    { 
    while (sqlex != null) 
    { 
    System.err.println("SQL error : "+sqlex.getMessage()); 
    System.err.println("SQL state : "+sqlex.getSQLState()); 
    System.err.println("Error code: "+sqlex.getErrorCode()); 
    System.err.println("Cause: "+sqlex.getCause()); 
    sqlex = sqlex.getNextException(); 
    } 
    } 
} 
} 

를 I했습니다 넣어 내 클래스 패스에 필요한 라이브러리와 실행 구성에서 DERBY_HOME 변수를 설정하십시오. 나는 데이터베이스 파일이 실제로 생성되는 것을 볼 수 있지만, 그것을 실행할 때 나는 다음과 같은 오류가 발생합니다, 나는 데이터베이스에 액세스 할 수 없습니다 :이 일어나는 이유

SQL error : Unable to access database table 
SQL state : null 
Error code: 0 
Cause: java.io.IOException: File I/O problem 

사람이 말해 줄 수?!

+1

오류 stacktrace 사용을 참조하십시오. sqlex.printStackTrace(); – surfealokesea

+0

좋아, 여기 있습니다 :) : 스레드 "주"예외 java.lang.NullPointerException \t Test1.main (Test1.java:38) –

답변

5

당신은이 라인에서 예외에게 자신을 던지고있다 :

throw new SQLException("Unable to access database table", 
    new java.io.IOException("File I/O problem")); 

이 조건이어야한다 :

Connection con=null; 
try { 
    con=driver.connect(url, prop); 
    if (con==null) { 
    throw new SQLException("Unable to access database table", 
     new java.io.IOException("File I/O problem")); 
} catch (Throwable t) { 
    t.printStackTrace(); 
} finally { 
//close every thing not is null 
if (con!=null) con.close(); 
} 

참고 : (죄수는 == null이)가 드라이버 때문에 실행하지 않습니다 보통합니다. connect()가 예외를 throw합니다.

+0

오! 네 말이 맞아. 책에서이 코드를 골라 내고 코드를 신뢰했습니다. 나는 그 줄을 지웠고 이제 연결은 괜찮습니다! 감사! –