Java 在使用游标查询时,如何解决sqlite中的语法异常?

Java 在使用游标查询时,如何解决sqlite中的语法异常?,java,android,sqlite,Java,Android,Sqlite,在我的项目中,我使用以下游标查询: Cursor c = db.query(VivzHelper.TX_TABLE, columns, helper.TX_ID + "='" + name + "' AND " + helper.TX_DATE + " BETWEEN '"+ datefrom.from_date + "' AND '" + dateto.to_date + "' AND '"+ helper.TX_TYPE +" = '"+"DM", null, helper.TX_NAM

在我的项目中,我使用以下游标查询:

Cursor c = db.query(VivzHelper.TX_TABLE, columns, helper.TX_ID + "='" + name + "' AND " + helper.TX_DATE + " BETWEEN '"+ datefrom.from_date + "' AND '"  + dateto.to_date + "'  AND '"+ helper.TX_TYPE +" = '"+"DM", null, helper.TX_NAME, null, null);
对于我的上述查询,我得到以下异常:

android.database.sqlite.SQLiteException: near "DM": syntax error (code 1): , while compiling: SELECT _id, txname, SUM(amount) AS amount, date, txtype FROM transactions WHERE txid='E' AND date BETWEEN '2015-09-06' AND '2015-09-06'  AND 'txtype = 'DM GROUP BY txname
见本部分:

AND 'txtype = 'DM GROUP BY txname
应该是:

AND txtype = 'DM' GROUP BY txname
 AND "+ helper.TX_TYPE +" = 'DM'", null,

错误在这里:

 AND '"+ helper.TX_TYPE +" = '"+"DM", null,
应该是:

AND txtype = 'DM' GROUP BY txname
 AND "+ helper.TX_TYPE +" = 'DM'", null,

因此,从以下方面修复您的查询:

Cursor c = db.query(VivzHelper.TX_TABLE, columns, helper.TX_ID + "='" + name + "' AND " + helper.TX_DATE + " BETWEEN '"+ datefrom.from_date + "' AND '" + dateto.to_date + "' AND '"+ helper.TX_TYPE +" = '"+"DM", null, helper.TX_NAME, null, null);
为此:

Cursor c = db.query(VivzHelper.TX_TABLE, columns, helper.TX_ID + "='" + name + "' AND " + helper.TX_DATE + " BETWEEN '"+ datefrom.from_date + "' AND '" + dateto.to_date + "' AND "+ helper.TX_TYPE +" = 'DM'", null, helper.TX_NAME, null, null);
[编辑]

使用绑定参数(又名selectionArgs)可以帮助您摆脱字符串分隔符:

Cursor c = db.query(VivzHelper.TX_TABLE, columns, helper.TX_ID + " = ? AND " + helper.TX_DATE + " BETWEEN ? AND ? AND "+ helper.TX_TYPE + " = ?", new String[]{name, datefrom.from_date, dateto.to_date, "DM"}, helper.TX_NAME, null, null);

为什么不使用
selectionArgs
参数呢?你能告诉我在查询中该怎么做吗?你建议不要使用
selectionArgs
,这不太好,但为时已晚,因为OP很可能会使用他原来的代码复制坏模式