0

我想从表中获取特定数据..我已插入查询,但它给了我错误...我的应用程序将崩溃...活动代码是

public Cursor getpicSpecfic(String st)
    {
        return db.query(DATABASE_TABLE_PIC, 
                new String[] {"id", "pic_name", "pic_place","pic_fellows","pic_purpose","pic_location","pic_jeoPoint_longi","pic_jeoPoint_lati","pic_sd_card","pic_time","pic_date"}, 
            "pic_name"+"="+st, null, null, null, null);
    }

而logcat中的错误是

01-31 01:43:13.033: E/AndroidRuntime(877): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.imagegallary/com.example.imagegallary.FullImageDetail}: android.database.sqlite.SQLiteException: no such column: nnn (code 1): , while compiling: SELECT id, pic_name, pic_place, pic_fellows, pic_purpose, pic_location, pic_jeoPoint_longi, pic_jeoPoint_lati, pic_sd_card, pic_time, pic_date FROM Img WHERE pic_name=nnn

我正在传递一个字符串 nnn,它是图片名称 ..我通过 sqllite 浏览器看到这将存在 nnn ......任何帮助

4

3 回答 3

0

在该query()方法中,有一个参数在很大程度上被忽略了,因为这里提出的问题数量直接来自不使用它。

selectionArgs是将准备并插入到查询中的参数列表。使用它非常好,因为它可以保护查询免受任何类型的注入(自愿或非自愿)并逃避一切。此外,它(理论上)可以通过识别具有不同参数的相同查询来帮助数据库优化查询。

它还通过使查询 args 自由来简化查询,因此可以进行分组、常量和独立审查。

它的使用如下:

String[] projection = {...}; // your projection
String selection = "pic_name = ?"; // ? is replaced by the selectionArgs in order
String[] selectionArgs = new String[] { st }; // no need to quote, escape or anything
Cursor res = db.query(DATABASE_TABLE_PIC, projection, selection, selectionArgs, null, null, null);
于 2013-01-30T16:45:47.790 回答
0

一个很常见的错误。
尝试' '像这样在 st 周围添加:

public Cursor getpicSpecfic(String st)
    {
        return db.query(DATABASE_TABLE_PIC, 
                new String[] {"id", "pic_name", "pic_place","pic_fellows","pic_purpose","pic_location","pic_jeoPoint_longi","pic_jeoPoint_lati","pic_sd_card","pic_time","pic_date"}, 
            "pic_name"+"='"+st + "'", null, null, null, null);
    }
于 2013-01-30T08:56:20.547 回答
0

' '通过将单引号添加到 where 条件的传递值来尝试这种方式,如下所示:

public Cursor getpicSpecfic(String st)
{
    return db.query(DATABASE_TABLE_PIC, 
            new String[] {"id", "pic_name", "pic_place","pic_fellows","pic_purpose","pic_location","pic_jeoPoint_longi","pic_jeoPoint_lati","pic_sd_card","pic_time","pic_date"}, 
        "pic_name"+"="+ "'" + st + "'", null, null, null, null); <<--- see the difference in this line.
}
于 2013-01-30T09:02:44.620 回答