SQLite where子句

时间:2012-08-09 01:50:17

标签: java android sqlite compiler-errors where-clause

我想根据LOCID选择一些行。我怎么不能写where子句它给出一个编译错误说不兼容的操作数类型说String和int。

String selectQuery = "SELECT  * FROM " + TABLE_LOCATIONAPPS + " WHERE " 
    + KEY_LOCID == id;

这是创建查询,

String query1 = "CREATE TABLE " + TABLE_LOCATIONLABLES + "("
            + KEY_LOCID + " INTEGER PRIMARY KEY," + KEY_LOCNAME + " TEXT,"
            +  ")";

LOCID类型是int可能是什么原因?

3 个答案:

答案 0 :(得分:4)

您没有正确构造字符串。您需要将相等的比较作为字符串的一部分。

String selectQuery = "SELECT  * FROM " + TABLE_LOCATIONAPPS + " WHERE " 
    + KEY_LOCID + " = " + id;

这只是为什么手动构建SQL字符串不是一个好主意的一个例子。除了这些类型错误之外,您还会对SQL注入问题持开放态度。这是当您输入未正确清理并且SQL命令最终执行您不想要的事情时。

答案 1 :(得分:1)

我建议不要根据连接的字符串执行过滤。这会让您开始SQL Injection Attacks。 (这里有一些examples of how it works。)

更安全的解决方案是:

String selectQuery = "SELECT * FROM " + TABLE_LOCATIONAPPS + " WHERE KEY_LOCID = ?"
PreparedStatement pstmt = connection.prepareStatement(selectQuery);
pstmt.setInt(1, id);
ResultSet rs = pstmt.executeQuery();

(这也通过准备好的语句重用打开了提升性能的大门。)

答案 2 :(得分:0)

在我看来,你实际上并没有在查询中进行比较,而是使用Java来比较KEY_LOCID和ID。

尝试:String selectQuery = "SELECT * FROM " + TABLE_LOCATIONAPPS + " WHERE KEY_LOCID == " + id;