Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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 根据字符串数组选择数据库中的特定行_Android_Android Sqlite_Android Cursor - Fatal编程技术网

Android 根据字符串数组选择数据库中的特定行

Android 根据字符串数组选择数据库中的特定行,android,android-sqlite,android-cursor,Android,Android Sqlite,Android Cursor,我的应用程序是一个琐事应用程序,我可以从数据库中获取问题。这个应用程序中也有一些主题,我想通过在数据库中设置一个列来实现这一点,该列专门用于保存一个值,该值对应于问题的类别。我尝试导入一个静态arraylist of arraylist of boolean值。然后我想迭代它们,根据值是否为真来创建数组(我的应用程序允许选择多个类别)。问题是将它(创建的arraylist保存主题)合并到我的查询语句中。我猜目标是这样的-如果第二列包含这些值,然后将它们添加到查询中-我假设这可能是一个直接SQL原

我的应用程序是一个琐事应用程序,我可以从数据库中获取问题。这个应用程序中也有一些主题,我想通过在数据库中设置一个列来实现这一点,该列专门用于保存一个值,该值对应于问题的类别。我尝试导入一个静态arraylist of arraylist of boolean值。然后我想迭代它们,根据值是否为真来创建数组(我的应用程序允许选择多个类别)。问题是将它(创建的arraylist保存主题)合并到我的查询语句中。我猜目标是这样的-如果第二列包含这些值,然后将它们添加到查询中-我假设这可能是一个直接SQL原始查询语句的儿戏,但它看起来令人畏惧,因此我只对android替代方案感到满意

    public Cursor getQuestions() {

    List<String> topicsList = new ArrayList<String>(39);
    for(int i = 0; i < child_check_states.size(); i++) {
        for(int j = 0; j < child_check_states.get(i).size(); j++) {
            if (child_check_states.get(i).get(j) == true) {
                topicsList.add(i+""+j+"");
            }
        }
    }
    Log.d("test", topicsList.toString());

    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor = db.query(DB_NAME, null, null, null, null, null, "random()");
    return cursor;
}
public Cursor getQuestions(){
List topicsList=新的ArrayList(39);
对于(int i=0;i
这是离题的,不需要回答,但这样的随机行是否存在性能问题?我相信我读过一次,实现一个使用两个游标的方法更好。我的应用程序只有4行用于测试,所以我没有注意到任何东西,但最终我希望有数千行。也许数万个。

只需使用“IN”关键字,例如

SELECT * from my_table where category IN (category_1, category_3, category_4)
或者,在你的例子中

public Cursor getQuestions() {

List<String> topicsList = new ArrayList<String>(39);
for(int i = 0; i < child_check_states.size(); i++) {
    for(int j = 0; j < child_check_states.get(i).size(); j++) {
        if (child_check_states.get(i).get(j) == true) {
            topicsList.add(i+""+j+"");
        }
    }
}
Log.d("test", topicsList.toString());

String replacementString = "(?";
for(int i = 1 ; i < topicsList.size(); i++){
    replacementString += ", ?";
}

replacementString += ")";

SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query(DB_NAME, <your_columns>, <category_column> IN + replacementString, topicsList.toArray(new String[topicsList.size()]), null, null, "random()");
return cursor;
public Cursor getQuestions(){
List topicsList=新的ArrayList(39);
对于(int i=0;i
我猜您希望筛选来自数据库的问题,使其仅包含来自用户选择的类别的问题?如果是,如何存储这些类别(标题中的字符串数组资源?)?答案是肯定的。我将这些类别存储在arraylist中:List topicsList。如果不清楚,我很抱歉,我想在需要时使用.toArray方法。我的代码会是什么样子?随机顺序。类别是否引用列名?你是说我应该将arraylist设置为由com分隔的字符串如果你想使用db.query,你应该输入selection参数:in?,然后从列表中输入值。selectionArgs参数中的toArray()与
Cursor Cursor=db.query(db_NAME,null,“topic in”,新字符串[]{“C1”,“P1”,“B1”,“O1”},null,null,“random()”)有问题
我得到
10-21 17:11:55.193:E/AndroidRuntime(545):java.lang.RuntimeException:无法启动活动组件信息{com.mangodeveloper.mcatomie/com.mangodeveloper.mcatomie.McatActivityGame}:android.database.sqlite.SQLiteException:近“?”:语法错误:,编译时:选择*FROM mcatqa WHERE topic IN?ORDER BY random()
与to数组方法相同尝试编辑的答案,我没有运行它,但您可能需要逗号分隔的“?”谢谢,我想我现在看到了。这篇文章也帮助了我: