使用db.ececSQL语句在sqlite android中插入语句

时间:2014-03-17 11:41:42

标签: android sqlite

如果提供的值在该表中不存在,我只想将值插入表中,我的意思是我提供了一个列为UNIQUE,因此当尝试输入两次该值时,sqlite3 UNIQUE约束将被破坏,想要一个sqlite3插入语句,这有助于我的代码是这样做的。我读到INSERT IGNORE用于此目的。有人可以为我提供正确的语法吗? 我的代码如下。

String insertQuery1 = "INSERT INTO Bookdetails bookpath,lastchapter VALUES(?,?)";
                    db.execSQL(Query1, new String[] { filepath, none });

此查询的正确语法是什么? filepath和none是分配了值的字符串 此表Bookdetails也有一个主键字段' id'这是自动增量?以这种方式插入数据会产生任何问题吗?

3 个答案:

答案 0 :(得分:2)

更改

INSERT INTO Bookdetails bookpath,lastchapter VALUES(?,?)

INSERT OR IGNORE INTO Bookdetails (bookpath,lastchapter) VALUES(?,?)

OR IGNORE会导致违反UNIQUE等约束时,插件不会发生,并且不会出错。

要插入的列名称必须位于()个parens。

此外,您还将其他一些查询传递给execSQL(),而不是此处的insertQuery1

  

此表Bookdetails还有一个主键字段' id'这是自动增量?以这种方式插入数据会产生任何问题吗?

不,因为没有插入。

如果你有INSERT OR REPLACE而不是忽略,那么它会转换为DELETE后跟INSERT,如果插件本身未指定id,则会生成新的行ID

答案 1 :(得分:2)

String insertQuery1 =“INSERT INTO Bookdetails(bookpath,lastchapter)VALUES(?,?)”;                     db.execSQL(Query1,new String [] {filepath,none});

答案 2 :(得分:1)

查询错误:

INSERT INTO Bookdetails bookpath,lastchapter VALUES(?,?)

应该是:

INSERT INTO Bookdetails (bookpath, lastchapter) VALUES (?, ?)

注意字段列表周围的括号!