Android 在不影响其他列的情况下,将SQLite列更新为null
我的android应用程序中有下表。我想删除设置为空的所有数量行。 我正在使用update语句来做这件事,但它会导致错误 这是我使用的update语句Android 在不影响其他列的情况下,将SQLite列更新为null,android,sqlite,Android,Sqlite,我的android应用程序中有下表。我想删除设置为空的所有数量行。 我正在使用update语句来做这件事,但它会导致错误 这是我使用的update语句 getContentResolver().update(MenuEntry.CONTENT_URI, null, MenuEntry.COLUMN_ITEM_QTY+ "='" + null + "'", null); 我的提供者类更新方法 public int update(Uri uri, ContentVa
getContentResolver().update(MenuEntry.CONTENT_URI, null,
MenuEntry.COLUMN_ITEM_QTY+ "='" + null + "'", null);
我的提供者类更新方法
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
final int match = sUriMatcher.match(uri);
int rowsUpdated;
switch (match) {
case MENU:
rowsUpdated = db.update(OrderContract.MenuEntry.TABLE_NAME, values, selection,
selectionArgs);
if (rowsUpdated != 0) {
getContext().getContentResolver().notifyChange(uri, null);
}
break;
case MENU_ID:
rowsUpdated = db.update(OrderContract.MenuEntry.TABLE_NAME, values, selection,
selectionArgs);
break;
case ORDER:
rowsUpdated = db.update(OrderContract.OrderEntry.TABLE_NAME, values, selection,
selectionArgs);
if (rowsUpdated != 0) {
getContext().getContentResolver().notifyChange(uri, null);
}
break;
case ORDER_ID:
rowsUpdated = db.update(OrderContract.OrderEntry.TABLE_NAME, values, selection,
selectionArgs);
break;
default:
throw new UnsupportedOperationException("Unknown uri: " + uri);
}
return rowsUpdated;
}
这是错误日志
有没有办法通过使用update或delete语句来完成此操作?像往常一样使用ContentValue更新。为特定密钥传递null
ContentValues values = new ContentValues();
values.putNull(MenuEntry.COLUMN_ITEM_QTY);
int updatedRows = getContentResolver().update(MenuEntry.CONTENT_URI, values, null, null);
为您的问题更新了带有特定答案的代码片段。感谢Aun提供您的答案。。我编辑代码并运行它..然后它显示以下错误并关闭11-05 11:24:31.307:E/AndroidRuntime8031:java.lang.RuntimeException:无法启动服务uk.co.bapos.android.kitchendisplay。StatusUpdateService@411a87c8有意{flg=0x4 cmp=com.resbook.resbookkitchenapp/uk.co.bapos.android.kitchendisplay.StatusUpdateService具有额外功能}:android.database.sqlite.sqliteconstraintextException:order_item.qty可能不为空代码19 11-05 11:24:31.307:E/androidRuntimean解决此问题的想法..我已将您的代码放入以尝试捕获。然后,应用程序运行,但未将qty列设置为空。表的架构定义order_item.qty不能为空。因此,它抛出SQLiteconstraintextexeption:order_item.qty不能为空如果确实需要,可以更改架构以允许此列为空值
11-05 11:01:14.241: E/AndroidRuntime(7212): Caused by: java.lang.IllegalArgumentException: Empty values
11-05 11:01:14.241: E/AndroidRuntime(7212): at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1531)
11-05 11:01:14.241: E/AndroidRuntime(7212): at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1514)
11-05 11:01:14.241: E/AndroidRuntime(7212): at android.content.ContentProvider$Transport.update(ContentProvider.java:235)
11-05 11:01:14.241: E/AndroidRuntime(7212): at android.content.ContentResolver.update(ContentResolver.java:1020)
11-05 11:01:14.241: E/AndroidRuntime(7212): at android.app.Service.onStartCommand(Service.java:450)
11-05 11:01:14.241: E/AndroidRuntime(7212): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2850)
11-05 11:01:14.241: E/AndroidRuntime(7212): ... 10 more
ContentValues values = new ContentValues();
values.putNull(MenuEntry.COLUMN_ITEM_QTY);
int updatedRows = getContentResolver().update(MenuEntry.CONTENT_URI, values, null, null);