簡體   English   中英

Android-未插入數據庫

[英]Android - Database insert not inserting

我在Android應用程序中包含一個數據庫。 我在這里遵循指南:

http://developer.android.com/training/basics/data-storage/databases.html

我有一個“ DatabaseHelper”類, SQLiteOpenHelper根據建議擴展SQLiteOpenHelper ,並且有一個Contract可以保存有關表的信息並實現“ BaseColumns”。 其中,我有一個用於在數據庫中插入新行的功能:

public static void addUploadInfo(SQLiteOpenHelper dbHelper, UploadInfo info) {
    // Gets the data repository in write mode
    SQLiteDatabase db = dbHelper.getWritableDatabase();

    ContentValues values = info.getContentValues();

    // Insert the new row, returning the primary key value of the new row
    long newRowId;
    newRowId = db.insert(
            UploadInfoTable.TABLE_NAME,
            null,
            values);

    db.close(); // Closing database connection

    info.setDatabaseId(newRowId);
}

我正在使用數據庫存儲有關文件的與應用程序相關的元數據。 當我創建一個新文件時,我運行上面的函數,並且一行成功添加到數據庫中(並且如果需要,數據庫創建成功)。 我可以使用以下方法查看它:

public static List<UploadInfo> getUploadInfoList(SQLiteOpenHelper dbHelper) {
    List<UploadInfo> infoList = new ArrayList<>();

    SQLiteDatabase db = dbHelper.getReadableDatabase();
    String allQuery = "SELECT  * FROM " + UploadInfoTable.TABLE_NAME;
    Cursor cursor = db.rawQuery(allQuery, null);

    if (cursor.moveToFirst()) {
        do {
            infoList.add(new UploadInfo(cursor));
        } while (cursor.moveToNext());
    }

    cursor.close();
    db.close();

    return infoList;
}

但是,當應用程序首次加載時,我使用以下命令將一些初始條目插入數據庫:

@Override
public void onResume() {
    super.onResume();
    DatabaseHelper dbHelper = new DatabaseHelper(getActivity());
    for (UploadInfo info: uploadList) {
        UploadInfoTable.addUploadInfo(dbHelper, info);
    }
}

這些條目被分配了一個新的行ID,該行ID似乎是正確的值(不是-1表示錯誤)。 日志中沒有錯誤。 但是,當我下次運行getUploadInfoList時找不到它們。

我也嘗試過這個替代插入功能:

public static void addUploadInfo(SQLiteOpenHelper dbHelper, UploadInfo info) {
    SQLiteDatabase db = dbHelper.getWritableDatabase();

    ContentValues values = info.getContentValues();

    // Insert the new row, returning the primary key value of the new row
    db.beginTransaction();
    long newRowId = -1;
    try {
        newRowId = db.insertOrThrow(
                UploadInfoTable.TABLE_NAME,
                null,
                values);
        db.setTransactionSuccessful();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        db.endTransaction();
    }

    db.close(); // Closing database connection

    info.setDatabaseId(newRowId);
}

但我看到相同的結果。 決不是info null。 我總是記錄ContentValues的內容。 我將最終變量用作列名,所以不要以為列名有誤。 無論如何,這將顯示為-1的行值,但事實並非如此。

為什么一個代碼實現成功插入而另一個不成功?

我懷疑您在onResume()代碼未成功檢測到升級。 而是將所有與升級有關的代碼放在onUpgrade()而不是嘗試在onResume()檢測到升級。 那應該解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM