我需要在列表中自定义订单项。为了做到这一点,我添加了一个额外的列和ORDER:
public Cursor getAllItems(){
qry = "SELECT id,details,type,
(replace(replace(replace(replace(Type,'Day','1Day'),'MONTHLY','2MONTHLY'),
'EBUDGET','4BUDGET'),'CARD','3CARD')) as list1" +
" from items_TB order by substr(list1,1,4), details";
c2 = db.rawQuery(qry, null);
return c2;
}
这运行良好,编译和安装,但也会产生一个错误:
应为")"、SELECT、VALUES或WITH,但得到了"replace"。
注意,在这个函数之前有80行,我有一个非常相似的查询(不同的表),没有错误警告:
public Cursor getRecordsMonth(String month,String q) {
if(q.equals("partial")){
qry="Select id, DATE, Amount, (replace(replace(replace(replace(Type,'Day-',''),'MONTHLY-
',''),'EBUDGET',''),'CREDIT -','')) || ' • ' || DETAILS,Type "+
" from records_TB where date like '%"+month+"' order by Type desc";
}
c1 = db.rawQuery(qry, null);
return c1;
}
有什么建议吗?
我认为Android Studio对SQL的解析是错误的,因为使用了replace(将所有replace改为replac,语法错误就会被忽略(显然,如果不这样做,SQL就会失败)。
为了避免出现错误,您可以";傻瓜;安卓工作室通过使用:-
public Cursor getAllItems(){
//qry = "SELECT id,details,type, (replace(replace(replace(replace(Type,'Day','1Day'),'MONTHLY','2MONTHLY'),'EBUDGET','4BUDGET'),'CARD','3CARD')) as list1" + " from items_TB order by substr(list1,1,4), details";
String list1Col = "(replace(replace(replace(replace(type,'Day','1Day'),'MONTHLY','2MONTHLY'), 'EBUDGET','4BUDGET'),'CARD','3CARD')) AS list1";
qry = "SELECT id,details,type," + list1Col + " from items_TB order by substr(list1,1,4), details";
return db.rawQuery(qry, null);
}
- 原文已被注释掉
- 您可以直接返回结果,因此不需要
c2 = .... return c2
另一种避免语法错误的方法是使用SQLiteDatabasequery
便利方法,该方法可以是:-
/* Alternative using the query convenience method */
public Cursor getAllItemsAlt1() {
String[] columns = new String[]{
"id","details","type","(replace(replace(replace(replace(type,'Day','1Day'),'MONTHLY','2MONTHLY'),'EBUDGET','4BUDGET'),'CARD','3CARD')) AS list1"
};
return db.query("items_TB",columns,null,null,null,null,"substr(list1,1,4),details");
}