2013-07-09 29 views
6

Tôi đang cố đọc một tệp sqlite-File vào bộ nhớ để có hiệu suất tốt hơn, khi đóng ứng dụng của tôi, tôi muốn viết nó trở lại hdd.Sao lưu và khôi phục sqlite từ đĩa sang bộ nhớ trong Java

Tôi đang sử dụng trình điều khiển jdbc (3.7.2) trong Java.

Theo các tài liệu, Mã của tôi trông giống như

this._conn = DriverManager.getConnection("jdbc:sqlite:"); 
Statement stat = this._conn.createStatement(); 
File dbFile = new File(this._config.GetDataBaseFile()); 
if (dbFile.exists()) { 
    this._logger.AddInfo("File exists."); 
    stat.executeUpdate("restore from " + dbFile.getAbsolutePath()); 
} 

Các tập tin tồn tại (và một db sql hợp lệ của nó), this._conn là mở, nhưng nếu tôi muốn thực hiện báo cáo về nó, dường như có không có bảng hay dữ liệu bên trong. Có vẻ như nó không khôi phục lại bất cứ điều gì.

Bất kỳ đề xuất nào về cách giải quyết/gỡ lỗi thêm?

(bằng cách này - nếu tôi sử dụng stat.executeUpdate("backup to test.db") trên kết nối của tôi, nó sao lưu của tôi trống: bộ nhớ: db ...)

+0

Tệp tồn tại và đó là cơ sở dữ liệu SQLite hợp lệ - nhưng nó có chứa bất kỳ bảng nào không? – mthmulders

+0

có. Và dữ liệu là tốt. – RalphP

+0

@ mjreaper..did bạn tìm thấy giải pháp cho mã này? bạn có thể giúp tôi làm thế nào để khôi phục? –

Trả lời

0

Dường như bạn đang thiếu hai điều: 1) Các dấu ngoặc kép quanh tên tập tin và 2) stat.close. Hãy thử các cách sau:

this._conn = DriverManager.getConnection("jdbc:sqlite:"); 
Statement stat = this._conn.createStatement(); 
File dbFile = new File(this._config.GetDataBaseFile()); 
if (dbFile.exists()) { 
    this._logger.AddInfo("File exists."); 
    stat.executeUpdate("restore from '" + dbFile.getAbsolutePath() + "'"); 
    stat.close(); 
} 

Đó là cách duy nhất tôi có thể làm cho nó hoạt động với phiên bản JDBC SQLite phiên bản 3.7.15-M1. Tôi không nghĩ rằng phiên bản quan trọng nhiều trong trường hợp này.

0

Trích dẫn và stat.close() không quan trọng, theo liên kết: 'https://bitbucket.org/xerial/sqlite-jdbc/wiki/Usage', mà tôi đã thử nghiệm. Tuy nhiên, báo giá giúp khi đường dẫn tệp chứa khoảng trắng.

Tôi nghĩ rằng có thể do trình điều khiển jdbc. Hãy thử trình điều khiển JDBC của Xerial cho SQLite, nó hoạt động tốt cho tôi.

Các vấn đề liên quan