2012-11-08 94 views
1

我通過ContentProvider插入數據到SQLiteDatabase。我的代碼行:ContentProvider插入不插入數據到SQLiteDatabase

Uri mNewUri = getContentResolver().insert(MY_URI, values); 

值是,我已經填充了通過各種調用的put方法的數據ContentValues變量。在調試器中,我看到insert方法返回一個有效的Uri到mNewUri中。但是,當我嘗試顯示數據時,我沒有收到任何數據。當我去命令行和嘗試:

cmd> adb -e shell 
cmd> sqlite3 /data/data/com.MyProject.project/databases/db-name.db 
sqlite> select * from MyInfo_tbl; 

(MyInfo_tbl是表在我的數據庫類),但是我看到表中沒有結果。在我的ContentProvider的插入方法是:

public Uri insert(Uri uri, ContentValues values) { 
    int uriType = sURIMatcher.match(uri); 
    if (uriType != ALLDATA) { 
     throw new IllegalArgumentException("Invalid URI for insert"); 
    } 
    SQLiteDatabase sqlDB = mDB.getWritableDatabase(); 
    try { 
     long newID = sqlDB.insertOrThrow(TABLE_BASEPATH, 
       null, values); 
     if (newID > 0) { 
      Uri newUri = ContentUris.withAppendedId(uri, newID); 
      getContext().getContentResolver().notifyChange(uri, null); 
      return newUri; 
     } else { 
      throw new SQLException("Failed to insert row into " + uri); 
     } 
    } catch (SQLiteConstraintException e) { 
     Log.i(DEBUG_TAG, "Ignoring constraint failure."); 
    } 
    return null; 
} 

有誰知道爲什麼會或在那裏我可以開始尋找解決這個問題?謝謝!

PS我也試圖通過調用我的數據庫提供程序的onCreate方法中的db.execSQL行插入數據到數據庫。這也不會插入任何數據。

+0

'MyInfo_tbl'和'TABLE_BASEPATH'是同一件事嗎? – Luksprog

+0

是的,它們是一樣的東西。 – Melanie

+0

您是否試圖查詢該方法插入返回的'Uri'的提供者? – Luksprog

回答

0

不在數據庫中插入數據背後的原因是你的表創建查詢不會成功執行,因爲一些丟失的逗號或一些錯誤,或者在uri中會有一些問題。