2012-08-09 55 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();