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

?一重引用符で囲みました。これを変更してください。

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 に答える
0

このメソッドはデータ入力をサニタイズするため、 sをアポストロフィでqueryラップすると、アポストロフィは入力文字列自体の一部になります。?これにより、クエリは0行を返します。

この問題を修正するには、のすべてのインスタンスを'?'に変更して削除します?

于 2012-06-24T18:08:22.507 に答える