Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中的SELECT语句中传递值数组_Android_Sqlite - Fatal编程技术网

在android中的SELECT语句中传递值数组

在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”

我有一个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”

现在我想在查询中传递数组:
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。。太多了