我在處理多個SQLite DB文件時仍然遇到了很多麻煩。每個DB文件都有它自己的日誌文件,我認爲一旦完成寫作,它應該消失。事實上他們留下來,所以我在刪除DB文件時遇到了麻煩,因爲日誌文件似乎阻止了刪除請求(文件刪除)。SqLite日記文件的問題。 「文件被加密或不是數據庫」
我現在已經沒有想法了,說實話,我對SqLite並不是很有經驗,所以也許在其他地方有一個簡單的錯誤。
我正在使用SQLiteOpenHelper。這是我的onCreate()。
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(TAG, "onCreate");
// SQL statement to create track table
String CREATE_TRACK_TABLE = "CREATE TABLE track ("
+ "name TEXT PRIMARY KEY, " + "version REAL, "
+ "creatingDate TEXT)";
// create track table
db.execSQL(CREATE_TRACK_TABLE);
...
}
這是我寫給數據庫的一個例子。
// add single track
public void addTrack(Track track) {
// 1. get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
// 2. create ContentValues to add key "column"/value
ContentValues values = new ContentValues();
values.put(Track.KEY_NAME, track.getName()); // get name
values.put(Track.KEY_VERSION, track.getVersion()); // get version
values.put(Track.KEY_CREATINGDATE, track.getCreatingDateString()); // get
// version
// 3. insert
db.insert(Track.TABLE_NAME, // table
null, // nullColumnHack
values); // key/value -> keys = column names/ values = column
// values
// 4. close
db.close();
}
以下是我從數據庫中讀取的示例。
// Get single track
public Track getTrack(String name) {
// 1. get reference to readable DB
SQLiteDatabase db = this.getReadableDatabase();
// 2. build query
Cursor cursor = db.query(Track.TABLE_NAME, // a. table
Track.COLUMNS, // b. column names
" name = ?", // c. selections
new String[] { name }, // d. selections args
null, // e. group by
null, // f. having
null, // g. order by
null); // h. limit
// 3. if we got results get the first one
if (cursor != null)
cursor.moveToFirst();
// 4. build track object
Track track = new Track();
track.setName(cursor.getString(0));
track.setVersion(Float.parseFloat(cursor.getString(1)));
if (cursor != null)
cursor.close();
// 5. return track
return track;
}
當我完成錄製時,我仍然有一個-journal文件。有誰知道日誌文件是否必須存在或應該消失?我必須以任何特定的方式關閉SQLiteOpenHelper嗎?日誌文件破壞了我的數據庫列表,因爲每個記錄都有一個由日誌文件引起的幻影條目。此外,我收到此錯誤,當我試圖加載現有的DB-文件:
E/SQLiteLog﹕ (26) file is encrypted or is not a database
E/DefaultDatabaseErrorHandler﹕ Corruption reported by sqlite on database: /data/data/etw.com.roadtracker/databases/TestTrack-journal
E/DefaultDatabaseErrorHandler﹕ deleting the database file: /data/data/etw.com.roadtracker/databases/TestTrack-journal
如果您需要了解更多信息,請自找的,我很絕望...... :-( 謝謝提前!
對於使用數據庫日誌文件不是一個很大的問題。正如你已經提到過的,我可以跳過日誌文件,並且每一個看起來都很好。 爲了物理刪除文件,我需要先刪除日誌文件。這對我來說是錯誤的,所以我想弄清楚爲什麼這些雜誌存在以及爲什麼會造成這麼多麻煩。 有幾種不同的方法來解決這個刪除方法,但是由於數據庫可能會變得非常大,我想避免通過設置「delete-」標記來刪除數據庫。 – RuNaWaY87
當沒有數據庫連接時,可以刪除所有文件。 –