在android中的SELECT语句中传递值数组
我有一个select语句,它根据用户动态生成的症状选择sqlite数据库中的疾病。。。以下是查询:在android中的SELECT语句中传递值数组,android,sqlite,Android,Sqlite,我有一个select语句,它根据用户动态生成的症状选择sqlite数据库中的疾病。。。以下是查询: 选择D.“+列名称+”,组concat(symp,,”)作为conca,从“+表链接DS+”DS连接“+表症状+”DS连接“+列症状+”S.“+列症状ID+”=S.“+列症状ID+”连接“+表疾病+”DS上的D.+列疾病ID+”=D.“+列疾病ID+”=D.“+列症状ID+”,其中S.“+列症状ID+”在(“+arrayOfSymptoms+”)中按D.名称分组按症状顺序匹配描述,D.名称ASC”
选择D.“+列名称+”,组concat(symp,,”)作为conca,从“+表链接DS+”DS连接“+表症状+”DS连接“+列症状+”S.“+列症状ID+”=S.“+列症状ID+”连接“+表疾病+”DS上的D.+列疾病ID+”=D.“+列疾病ID+”=D.“+列症状ID+”,其中S.“+列症状ID+”在(“+arrayOfSymptoms+”)中按D.名称分组按症状顺序匹配描述,D.名称ASC”
现在我想在查询中传递数组:String[]arrayOfSymptoms={“头痛”、“恶心”、“寒战”}
,这样查询看起来像这样:
"SELECT D."+COLUMN_NAME+",group_concat( symp,',' ) AS conca,count(*) as SymptomsMatching FROM "+TABLE_LINKDS+
" DS JOIN "+TABLE_SYMPTOMS+" S ON DS."+COLUMN_SYMPTOMS_ID+"= S."+COLUMN_SYM_ID+
" JOIN "+TABLE_DISEASE+" D ON DS."+COLUMN_DISEASE_ID+"= D."+COLUMN_DS_ID+
" WHERE S."+COLUMN_SYMP+" IN ('headache','nausea','chills') GROUP BY D.name ORDER BY SymptomsMatching DESC, D.name ASC";
我尝试使用TextUtils.join()方法和另一个自定义方法,但所有的方法都有效。您可以在数组上使用一个简单的toString()方法,并删除前面和后面的部分 检查此SO链接(我认为类似的问题已得到回答)——
您可以使用此功能:
public static String toArrayRep(String[] in) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < in.length; i++) {
if (i != 0) {
result.append(",");
}
result.append("'" + in[i] + "'");
}
return result.toString();
}
公共静态字符串到arrayrep(字符串[]in){
StringBuilder结果=新建StringBuilder();
for(int i=0;i
然后在SQL字符串中调用它。类似这样的内容
public static String fromArray(String[] in) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < in.length - 1; i++) {
if (i != 0) {
result.append(",");
}
result.append("'" + in[i] + "'");
}
return result.toString();
}
数组中的公共静态字符串(字符串[]in){
StringBuilder结果=新建StringBuilder();
对于(int i=0;i
这会给你一个错误,而且逻辑上看起来像“头痛、恶心、发冷”“但我想以‘头痛’、‘恶心’、‘寒战’的形式提出质疑work@mcprilla79单引号是必需的,这样SQLIte就不会与输入混淆。这也可以通过以下方式实现:虽然它会在每个字符串周围加上一个引号,但它会将整个输入作为一个整体-'DatabaseUtils.sqlEscapeString(TextUtils.join(“,”,array))'出现以下错误:android.database.sqlite.SQLiteException:near“,”:语法错误(代码1):,编译时:选择D.name,组_concat(symp,,')作为conca,计数(*)作为症状匹配从linkds到DS加入症状S在DS上症状id=S.id加入疾病D在DS上疾病id=D.id其中S.symp(头痛,恶心)组按D.name按症状顺序匹配DESC,D.name ASC…似乎我们接近了。。有没有一种方法可以修改代码,在任何症状周围加上单引号,比如:“头痛”、“恶心”。。这就足够了,特里奇已经对这个答案进行了编辑,使之生效。只要把它放到length-1
上,如果你改为length-1它不包括最后一个元素,就可以执行append(“+in[i]+””)
@NiteshVerma。。太多了