2014-03-03 2 views
0

Windows 7에서 Sqlite를 실행하고 Eclipse에서 java 프로그램을 사용하여 입력 파일의 데이터를 sqlite 데이터베이스 테이블로로드하려고합니다. sqlite exe 파일, java sqlite JDBC jar 파일 및 데이터베이스 파일은 모두 동일한 디렉토리에 있습니다.SQLite java error "데이터베이스 파일을 열 수 없습니다"

나는이 문제에 답하는 것에 가깝지만 지금까지 해결되지 않은 것처럼 들리는 대부분의 스레드를 읽었습니다.

나는 누군가/모두가 폴더 (db 파일이있는 곳)에 대한 업데이트/변경 액세스 권한을 갖기 때문에 폴더 사용 권한을 변경했지만 여전히 기쁨은 없습니다. 데이터베이스 연결을 설정했지만 (아래 디스플레이 참조) 현재 멈춰 있고 아이디어가 부족합니다. 아무도 도와 줄 수 있습니까? 코드는 공용 클래스 데이터베이스 {

public void loadPersonData() { 
    Connection connection = null; 
    PreparedStatement preparedStatement = null; 

    try { 
    connection = ConnectionConfig.getConnection(); 
    preparedStatement = connection 
     .prepareStatement("INSERT INTO PERSON(PERSON_ID,LAST_NAME,FIRST_NAME,STREET,CITY) " 
      + "VALUES(?,?,?,?,?)"); 

     for (PersonData x : ReadPersonData.personList) { 
      preparedStatement.setInt(1, x.getPersonID()); 
      preparedStatement.setString(2, x.getLastName()); 
      preparedStatement.setString(3, x.getFirstName()); 
      preparedStatement.setString(4, x.getStreet()); 
      preparedStatement.setString(5, x.getCity()); 
      preparedStatement.addBatch(); 
     } 

이 LINE (30)에게

입니다

라인 (30)에 실패 - >>>>> preparedStatement.executeBatch를();

} catch (Exception e) { 
     e.printStackTrace(); 

현재 오류 메시지는 다음과 같습니다 : -

데이터베이스 연결 설정

은 java.sql.SQLException : 데이터베이스 파일을 열 수 없습니다

at org.sqlite.core.DB.throwex(DB.java:859) 
at org.sqlite.core.DB.executeBatch(DB.java:760) 
at org.sqlite.core.CorePreparedStatement.executeBatch(CorePreparedStatement.java:77) 
at Database.loadPersonData(Database.java:30) 
at MainApp.main(MainApp.java:16) 

java.sql.SQLException의 : [SQLITE_ERROR] SQL 오류 또는 누락 된 데이터베이스 (연결이 닫혀 있음)

at org.sqlite.core.DB.newSQLException(DB.java:890) 
at org.sqlite.core.CoreStatement.internalClose(CoreStatement.java:109) 
at org.sqlite.jdbc3.JDBC3Statement.close(JDBC3Statement.java:35) 
at Database.loadPersonData(Database.java:44) 
at MainApp.main(MainApp.java:16) 
+0

ConnectionConfig 클래스의 내용은 무엇입니까? – Sanjeev

+0

안녕하세요 Sanjeev, 공용 클래스 ConnectionConfig { \t public static Connection getConnection() { \t \t Connection connection = null; \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t 시도 { \t \t \t가 Class.forName ("org.sqlite.JDBC"); \t \t \t 연결 = DriverManager.getConnection ("jdbc : sqlite : C : \ Program Files (x86) \\ SQLite \\ SS200.db"); \t \t \t System.out.println ("데이터베이스 연결이 설정 됨"); \t \t \t \t} 캐치 (예외 E) {e.printStackTrace();} \t \t 복귀 연결; \t} } –

+0

안녕하세요 Sanjeev, 위의 코드 (초보자 용)는 위의 코드 (서식에 대해 미안 해요!)가 connectionConfig 클래스에있는 SQLite 데이터베이스 연결을 만드는 작업이라고 말합니다. –

답변

0

데이터베이스를 잠그는 잠금 파일이 있다고 생각합니다. 을 삭제해야합니다. 데이터베이스 디렉토리로 이동하여 "YourDbName-journal"이 포함 된 파일을 검색하십시오. 작동하지 않으면 작동합니다. 한 번에 하나의 연결 만 실행하고 닫아야합니다. 귀하의 연결마다.

캐치 절 후에는이

finally{ 
    try{ 
    preparedStatement.close(); 
    connection.close();} 
    catch(Exception e){e.printStackTrace();}} 

sqlite가 하나 개 이상의 연결을 지원하지 않기 때문에 연결을 호출 각 방법 후이 코드를 추가해야합니다 추가 할 수 있습니다.

관련 문제