0

我有以下SQLite select声明功能

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,为什么?

4

2 回答 2

0

query方法将为您清理您的数据输入,因此当您?用撇号包装 s 时,撇号将成为输入字符串本身的一部分。这导致您的查询返回 0 行。

'?'要解决此问题,请删除更改to的所有实例?

于 2012-06-24T18:08:22.507 回答
0

你已经用?单引号括起来了,改变这个:

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

上面的行试图从字面上匹配COL_ITEM_CART_ID一个问号,像这样改变它:

COL_ITEM_CART_ID + "=? and "+ COL_ITEM_ID + "=?"
于 2012-06-24T18:04:17.100 回答