我的表格定义如下:
VideoID INTEGER,PRIMARY KEY,Status TEXT
我希望每当用户滚动列表时更新此表,如果有任何videoID的新数据应该更新,否则如果新的videoIDfound它应该插入表中
它与insertWithOnConflict()运行良好但问题是它每次都使用默认值更新看到的列,我不希望我想要存储无法更改的videoID的显示状态
我尝试的替代方案是:
String que="INSERT OR REPLACE INTO " + TABLE_NAME + "("+VIDEOTITLE+","+VIDEO_ID+","+VIDEO_TIME+","
+VIDEO_VIEW+","+VIDEO_AMOUNT+","+VIDEO_THUMB+","+VIDEO_URL+","+VIDEO_DETAILS+","+YOUTUBE_KEY+")"+" VALUES ( "+VIDEOTITLE+","+VIDEO_ID+","+VIDEO_TIME+","+VIDEO_VIEW+","+VIDEO_AMOUNT+","+VIDEO_THUMB+","+VIDEO_URL+
","+VIDEO_DETAILS+","+YOUTUBE_KEY+",(SELECT "+STATUS+" FROM "+TABLE_NAME+" WHERE videoId = "+ curr_id+" ));";
db.execSQL(que);
但这并没有执行。 curr_id是videoId。
答案 0 :(得分:-1)
不幸的是,SQLite不支持insert or replace
。
您可以使用on conflict replace
来实现类似的行为。您可以阅读更多相关信息this question。
请记住,on conflict replace
实际上会删除现有记录并创建另一个记录。这意味着,如果您为主键使用自动增量列,您将获得不同的记录,而不是更新现有记录。
如果您想保持记录的完整性,您可能需要查看其他更复杂的选项。