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