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