在SQLite上插入或替换不起作用

时间:2018-08-20 08:59:50

标签: android sqlite android-sqlite

我有一张用于存储联系人的表格。以下是在onCreate中执行的查询。这些查询在sqliteonline.com中给出了预期的结果。我不知道这里出了什么问题。

CREATE TABLE Contacts (rowId INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(256),mobile VARCHAR(30) UNIQUE,email VARCHAR(64))

我正在使用此代码读取联系人。

    val phones = activity.contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null)
                while (phones.moveToNext()) {
                    val name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))
                    var phone = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
                    val contact = Contact()
                    contact.name = name
                    contact.mobile = phone

                    val query = "INSERT OR REPLACE INTO $TABLE_NAME ($COL_NAME, $COL_MOBILE, $COL_EMAIL) \n" +
                            "  VALUES ('${contact.name}','${contact.mobile}','${contact.email}');"
                    val result = db.rawQuery(query, null)
                    Log.d("ContactManager" , "Query : $query")
                    result.close()
                }
                db.setTransactionSuccessful()
                phones.close()

我什至在查询位置尝试了此操作(这也不起作用)

            val query = "INSERT OR REPLACE INTO $TABLE_NAME ($COL_ID,$COL_NAME, $COL_MOBILE, $COL_EMAIL) \n" +
                    "  VALUES ((select $COL_ID from $TABLE_NAME where $COL_MOBILE = '${contact.mobile}'),'${contact.name}','${contact.mobile}','${contact.email}');"

这些是在执行插入或更新时执行的查询。

INSERT OR REPLACE INTO Contacts (name, mobile, email) VALUES ('Police','100','');
INSERT OR REPLACE INTO Contacts (name, mobile, email) VALUES ('Balance Info','111','');
INSERT OR REPLACE INTO Contacts (name, mobile, email) VALUES ('Distress Number','112','');
INSERT OR REPLACE INTO Contacts (name, mobile, email) VALUES ('Distress Number','112','');
INSERT OR REPLACE INTO Contacts (name, mobile, email) VALUES ('Customer Care','121','');

1 个答案:

答案 0 :(得分:2)

val result = db.rawQuery(query, null)替换为db.execSQL(query)
rawQuery用于获取不执行更新或插入/删除的行。
同时从sql语句中删除\n。这在语法上不是错误的(我认为),但这不是必需的。
另外,由于您使用db.setTransactionSuccessful(),因此您还应该在db.beginTransaction()的开头和db.endTransaction()的结尾处使用