1

ContentProvider を介して SQLiteDatabase にデータを挿入しています。私のコード行:

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

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 行を呼び出して、データベースにデータを挿入しようとしました。これもデータを挿入しません。

4

1 に答える 1