ContentProvider insert不会将数据插入SQLiteDatabase

时间:2012-11-08 22:04:37

标签: android android-contentprovider sqlite

我正在通过ContentProvider将数据插入SQLiteDatabase。我的代码行:

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

values是一个ContentValues变量,我通过对put方法的各种调用填充了数据。在调试器中,我看到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行来向数据库插入数据。这也不会插入任何数据。

1 个答案:

答案 0 :(得分:0)

不在数据库中插入数据的原因是,由于某些错误的逗号或某些错误或者uri中存在一些问题,您的表创建查询将无法成功执行。