我通过 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 行来将数据插入数据库。这也不会插入任何数据。