2012-10-29 3 views
1

데이터베이스를 연결하고 연결된 데이터베이스의 모든 행을 기본 데이터베이스에 삽입하는 데 문제가 있습니다.Java에서 Sqlite 데이터베이스 연결

여기 내 코드입니다.

public void selectOldDb(String dbName) throws Exception { 
    createNewDB(); 
    Class.forName("org.sqlite.JDBC"); 

    Connection connOldDb = DriverManager.getConnection("jdbc:sqlite:"+ dbName); 
    String newDbName = getDirToNewDb(); 

    newDbName = newDbName + "auftraege.db"; 
    Connection connNewDb = DriverManager.getConnection("jdbc:sqlite:"+ newDbName); 

    connNewDb.prepareStatement("ATTACH DATABASE \"" + connOldDb + "\" AS fromDB").execute(); 

    connNewDb.prepareStatement("INSERT INTO main.auftraege SELECT * FROM fromDB.SendeDS").execute(); 

    connNewDb.close(); 
    connOldDb.close(); 
} 

삽입하려고하면이 오류가 발생합니다.

[SQLITE_ERROR] SQL 오류 또는 누락 된 데이터베이스 (그런 테이블 : fromDB.SendeDS) 내가 잘못하고있는 중이 야 무엇

?

+0

두 가지 가능성이 있습니다 : 1) 테이블이 존재하지 않는 경우 2) 데이터베이스 또는 테이블 이름에 오타가 있습니다. –

+0

답변 해 주셔서 감사합니다. 테이블이 있습니다. 나는 연결 후 결과 세트로 그것을 테스트 해 본다. 그러나 오타로 무엇을 의미합니까? – user1761808

+0

오타 (typo) 란,'SendeDS'가 실제로 쿼리하려는 테이블의 이름인지 다시 한 번 확인해야한다는 의미입니다. 내가 영어 원어민 이니까, 대신에 당신이 "SendDS"또는 "SenderDS"중 하나를 선택했을 가능성이 있음을 알았습니다. 이러한 오타는 간과하기 쉽습니다. 나는 당신이 이것을 두 번 확인하도록 제안하고 있습니다. –

답변

2

ATTACH DATABASE 명령에는 파일 이름이 필요하지만 Connection 개체 표현을 지정합니다.

connOldDb이 필요하지 않으며 대신 dbName을 사용하십시오.

+0

감사합니다. 그것은 매우 쉽고 잘 작동합니다. 새 코드는 다음과 같습니다. connNewDb.prepareStatement ( \t \t "ATTACH DATABASE" "+ dbName +" 'AS fromDB "). execute(); – user1761808

+0

이전 DB에 대한 연결을 전혀 열지 않아도됩니까? – Tacitus86

+0

@ Tacitus86 "connOldDb'는 필요하지 않습니다. –

관련 문제