Java SQLite保存重复项
我的应用程序中有一个SQLite数据库。我试图在数据库中保存一些记录,但在保存重复项时进行查询 代码: 通常,我用Java SQLite保存重复项,java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,我的应用程序中有一个SQLite数据库。我试图在数据库中保存一些记录,但在保存重复项时进行查询 代码: 通常,我用db.rawQuery(“从“+TABLE_NAME+”中选择*,其中userid=“+userid+”,null)检查重复项查询,但仍在保存 这里怎么了? 谢谢。您尚未发布该表的定义语句,但由于您在插入新行之前正在查询检查用户ID是否已经存在,因此我假设列用户ID不是唯一的。 省去所有麻烦,通过在列定义中添加关键字UNIQUE,将其定义为UNIQUE: CREATE TABLE t
db.rawQuery(“从“+TABLE_NAME+”中选择*,其中userid=“+userid+”,null)检查重复项代码>查询,但仍在保存
这里怎么了?
谢谢。您尚未发布该表的定义语句,但由于您在插入新行之前正在查询检查用户ID
是否已经存在,因此我假设列用户ID
不是唯一的。
省去所有麻烦,通过在列定义中添加关键字UNIQUE
,将其定义为UNIQUE
:
CREATE TABLE table_name(
...,
userid TEXT UNIQUE,
...
);
现在,您无需事先检查任何内容即可使用该方法:
int result = db.insert(TABLE_NAME, null, values);
if (result == -1) {
System.out.println("This exist: "+userid+" "+fullname);
}
如果insert()
返回-1
,这意味着它失败了,并且您知道,由于没有任何其他约束,它失败了,因为用户ID
已经存在。
insert()
返回的任何其他值(等于新插入行的rowid
)表示它成功。
如果您决定进行更改,则必须从设备上卸载应用程序并重新运行,以便重新创建数据库,或者升级数据库的版本 您可以尝试使用
db.insertWithOnConflict(表名称,null,值,SQLiteDatabase.CONFLICT\u REPLACE)
int result = db.insert(TABLE_NAME, null, values);
if (result == -1) {
System.out.println("This exist: "+userid+" "+fullname);
}