2014-12-26 44 views
0

我正在使用android SQLite数据库。 我正在SQLLite异常作为 “产生的原因:android.database.sqllite.SQLITEException:no such column DD(code 1):,在编译:在选择行时Android SQLite数据库中没有这样的列异常

SELECT _id, sms, contact, time FROM messages WHERE contact =DD-Aircel ORDER BY _id DESC '

而选择具有接触作为DD-Aircel的(未同时插入相同的)行。 我认为这是由于连字符' - '在DD-Aircel中。 列联系人的数据类型为STRING。 可以用any1 plz解释解决方案。 在此先感谢。

+1

DD-Aricel是一个字符串,因此需要用引号括起来,总是用引号括住字符串! – bakriawad

回答

4

我相信你想要做的是:

db.query(DATABASE_MSGTABLE,             // Table name 
    new String[] { KEY_MSGGROWID, KEY_MSGSMS, KEY_MSGCONTACT, KEY_MSGTIME }, // Columns to select 
    "contact = ?",                // selection (WHERE clause) 
    new String[] { "DD-Aircel" },            // Arguments for the Where clause 
    null,                  // GROUP BY (leave null because you're not grouping) 
    null,                  // HAVING (leave null because you're not grouping) 
    "_id DESC");                // ORDER BY 

如果您始终使用相同的联系人姓名进行过滤(即您总是过滤值"DD-Aircel"),仅使用选择查询contact = 'DD-Aircel'是安全的。

使用选择查询contact = ?允许您按任意contact名称进行过滤。当联系人姓名在所有情况下都不知道时,您应该这样做。即使联系人名称包含单引号(例如,如果联系人名称为Dad's Cell),此方法也可以确保查询正常工作。

+0

发送提姆,你的方法也工作正常,即使有一些特殊字符如单引号的列条目。 Tx agaim 4给予建议 –

0

加上引号值:

WHERE contact ='DD-Aircel' 

如果你正在使用的查询,使用像参数值:

String selection = "contact = ?"; 
String[] selectionArgs = new String[] { "DD-Aircel" }; 
+0

本来会喜欢更短的回答''DD-Aircel''哈哈。 – Jimmy

+2

如何展示正确的方式?使用占位符“?”和参数? – WarrenFaith

+0

其实在代码中,我没有使用原始查询。我正在做的是 –

相关问题