我有一张用于存储联系人的表格。以下是在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','');
答案 0 :(得分:2)
将val result = db.rawQuery(query, null)
替换为db.execSQL(query)
rawQuery
用于获取不执行更新或插入/删除的行。
同时从sql语句中删除\n
。这在语法上不是错误的(我认为),但这不是必需的。
另外,由于您使用db.setTransactionSuccessful()
,因此您还应该在db.beginTransaction()
的开头和db.endTransaction()
的结尾处使用