2012-08-09 58 views
0

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

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

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

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

这只是为什么手动构建SQL字符串不是一个好主意的一个例子。除了这些类型的错误之外,您还是打开SQL注入问题。这是当你输入没有正确清理和SQL命令结束执行你不打算。

+0

非此即彼我贴在下面的答案是对的;希望能帮助到你.. – 2012-08-09 01:55:03

0

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

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

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();