开发者社区> 问答> 正文

用where条件查询SQLite数据库

在数据库中用string作为where条件查询数据库,程序就会关闭。如果换成数字作为条件,就没问题。帮我看一下代码:

public ArrayList<Contact> getAvailableList() 
{
    // TODO Auto-generated method stub
    ArrayList<Contact> results = new ArrayList<Contact>();
    String[] columns = new String[]{KEY_NAME, KEY_NUMBER, KEY_STATUS};
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_STATUS +"=available" , null, null, null, KEY_NAME);
    String sName = "";
    String sNum = "";
    String status = "";
    int iName = c.getColumnIndex(KEY_NAME);
    int iNumber = c.getColumnIndex(KEY_NUMBER);
    int iStatus = c.getColumnIndex(KEY_STATUS);
    Contact contact;
    for(c.moveToFirst(); ! c.isAfterLast(); c.moveToNext())
    {
        contact = new Contact();
        sName += c.getString(iName);
        sNum += c.getString(iNumber);
        status += c.getString(iStatus);
        contact.setName(sName);
        //contact.setPhoneNumber(sNum);
        contact.setPhoneNumber("0".concat(sNum));
        contact.setStatus(status);
        results.add(contact);
        sName = "";
        sNum = "";
        status = "";
    }
    return results;
}

展开
收起
a123456678 2016-07-18 13:52:52 3083 0
1 条回答
写回答
取消 提交回答
  • 在SQL中要把字符安用括号括起来的。像这样:

    // 添加这个 v v
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_STATUS +"='available'",

        null, null, null, KEY_NAME);

    如果你用动态数据,可以用selectionArgs参数:

    String status = "available";
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_STATUS +"=?",

        new String[] {status}, null, null, KEY_NAME);

    这个方法可以保护你不受SQL注入的影响。

    2019-07-17 19:57:46
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载