Java 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

我的应用程序中有一个SQLite数据库。我试图在数据库中保存一些记录,但在保存重复项时进行查询

代码:

通常,我用
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);
}