2010-12-03 3 views
1
public class GestorBase{ 

public static void main(String[] args){ 
    try 
    { 
    Class.forName("org.sqlite.JDBC"); 
    } 
    catch (ClassNotFoundException e) { 
    System.out.println("Unable to load driver class"); 
    // TODO: handle exception 
    } 
    try { 
    Connection con = DriverManager.getConnection("jdbc:sqlite:db/Freepark.sqlite"); 
    } catch (SQLException e) { 
    // TODO Auto-generated catch block 
    System.out.println("error al buscar la base de datos"); 
    } 

    Statement sentencia = con.createStatement(); 


}} 

이클립스는 말한다 :연결 변수가 해결할 수없는

"사기꾼"변수 타입으로 해석 할 수 없습니다.

왜?

답변

2

con 변수는

try { 
    Connection con = DriverManager.getConnection("jdbc:sqlite:db/Freepark.sqlite"); 
    } 

당신은 try 블록의 측면을 con 그것을 액세스, 블록을 시도하는 지역이다.

Connection con = null; 
Statement sentencia = null; 
try { 
     con = DriverManager.getConnection("jdbc:sqlite:db/Freepark.sqlite"); 
     sentencia = con.createStatement(); 
} catch (SQLException e) { 
     // TODO Auto-generated catch block 
     System.out.println("error al buscar la base de datos"); 
} catch (Exception ex){ 

    //handle it 
} 
+0

그리고 실패하면 NPE를받습니다. –

+0

@Tom Hawtin - tack line 물론 OP가 요구하는 것은 아닙니다. –

+0

life.java 실제로. 그것은 당신의 대답으로 소개 된 버그입니다. –

2

문제는 당신이 try 블록의 내부 con를 선언한다는 것입니다,하지만 블록 외부에서 사용하려고합니다. 당신은 다음을 수행해야합니다 그 실행되면, con 변수가 범위를 벗어나가는 try 블록을 종료하지 않고, 더 이상 볼 수 있기 때문에

Connection con = null; 
try { 
    con = DriverManager.getConnection("jdbc:sqlite:db/Freepark.sqlite"); 
} catch (SQLException e) { 
    // TODO Auto-generated catch block 
    System.out.println("error al buscar la base de datos"); 
    return; // return because nothing can be done w/out a connection 
} 

Statement sentencia = con.createStatement(); 

오류가 발생했습니다.

Here is a little info about scope : 첫번째 섹션 스크롤 변수 명칭

변수의 범위는 변수가 유효한 코드 블록이다. 범위는 또한 프로그램이 실행될 때 변수가 만들어지고 소멸 될 때도 제어합니다.

+0

그리고 실패하면 NPE를 얻습니다. –

+0

@Tom 물론 Null 체크를 추가하거나 catch에서 더 잘 처리 할 것입니다. 그러나 이것은 단지 교육적인 목적을위한 것입니다. – jjnguy

+0

@Tom, 데이터베이스에 연결하는 저수준 메서드에서 예외를 던질 것입니다. 그 시점에서 그들을 처리 할 수있는 좋은 방법은 없을 것입니다. – jjnguy

관련 문제