0

我想根据 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 可能是什么原因?

4

3 回答 3

4

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

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

这只是说明为什么手动构造 SQL 字符串不是一个好主意的一个例子。除了这些类型的错误之外,您还会遇到 SQL 注入问题。这是当您的输入未正确清理并且 SQL 命令最终执行您不打算执行的操作时。

于 2012-08-09T01:53:30.927 回答
1

我建议不要基于串联字符串执行过滤。这使您面临 SQL 注入攻击。(这里有一些例子说明它是如何工作的。)

更安全的解决方案是:

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

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

于 2012-08-09T02:04:19.903 回答
0

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

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

于 2012-08-09T01:54:39.520 回答