2012-06-24 37 views
0

我有SQLite select聲明如下功能SQLite的選擇查詢,其中cluase

public Boolean itemFound(String cartId,Long ItemId){ 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Log.d("search",cartId+"--"+ItemId); 

     try { 
      String where = COL_ITEM_CART_ID+"='"+cartId+"' and "+COL_ITEM_ID+" ="+ ItemId+""; 
      Log.d("where===============", where); 
      String columns[] = new String[] { COL_ITEM_ID,COL_ITEM_NAME, COL_ITEM_PRICE, COL_ITEM_ADDDATE,COL_ITEM_QUANTITY,COL_ITEM_CART_ID }; // > null means * (all) 
      Cursor c = db.query(TABLE_NAME, 
           columns , 
           COL_ITEM_CART_ID+"='?' and "+ COL_ITEM_ID + "=?" , 
           new String[]{cartId,String.valueOf(ItemId)}, 
           null, 
           null, 
           COL_ITEM_ADDDATE+" desc"); 


      int numRows = c.getCount(); 

      c.close(); 
      db.close(); 
      if(numRows>0) 
       return true; 
      else 
       return false; 
     } catch (SQLException e) { 
      db.close(); 
      return false; 
     } 
    } 

其中的參數:

  • Long類型的itemId = 9882889921
  • String型cartId = ca1745ef-24eb -4da8-a1ea-9650d78ba5c0

儘管有這些數據重新編碼。返回的行是0,爲什麼?

回答

0

你包裹在單引號?,改變這種:

COL_ITEM_CART_ID+"='?' and "+ COL_ITEM_ID + "=?" 

上面的線是試圖從字面上匹配COL_ITEM_CART_ID一個問號,改變這樣的:

COL_ITEM_CART_ID + "=? and "+ COL_ITEM_ID + "=?" 
0

query方法將清理您爲您輸入的數據,因此當您用撇號包裝?時,撇號將成爲輸入字符串本身的一部分。這導致您的查詢返回0行。

要解決該問題,請刪除將'?'的所有實例更改爲?