首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择并存储在Android的游标中的行数,其中一行具有特定的id,其余行是随机的

选择并存储在Android的游标中的行数,其中一行具有特定的id,其余行是随机的
EN

Stack Overflow用户
提问于 2018-04-03 12:23:37
回答 3查看 159关注 0票数 1

在Android中,我试图从sqlite数据库中选择特定数量的行,其中一行是根据给定的id预先确定的,其余行是随机选择的。查询应该保存在游标中,因为我将在ListView中显示选定的行,这可以通过SimpleCursorAdapter从游标中获取信息。

初始数据库是这样创建的:

代码语言:javascript
运行
复制
public void onCreate(SQLiteDatabase database) {
    database.execSQL("CREATE TABLE DICTIONARY(_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
            "english TEXT, " +
            "estonian TEXT);");
    addWordPair(database, "myriad", "tohutu hulk");
    addWordPair(database, "egregious", "jõletu");
    addWordPair(database, "erroneous", "väär");
    addWordPair(database, "salient", "esile tõusev");
    addWordPair(database, "galvanize", "laengut andma");
    addWordPair(database, "tenuous", "hõre");
    addWordPair(database, "caustic", "söövitav");
}

public void addWordPair(SQLiteDatabase database, String english, String estonian) {
    ContentValues wordPair= new ContentValues();
    wordPair.put("english", english);
    wordPair.put("estonian", estonian);
    database.insert("DICTIONARY", null, wordPair);
}

选择的行将使用游标在ListView中显示:

代码语言:javascript
运行
复制
SimpleCursorAdapter listAdapter = new SimpleCursorAdapter(this,
                android.R.layout.simple_list_item_1,
                cursor,
                selectedLanguage,
                new int[] {android.R.id.text1},
                0);
ListView listofWordsListView = (ListView) findViewById(R.id.wordsListView);
listofWordsListView.setAdapter(listAdapter);

我得到了五个随机英语单词使用:

代码语言:javascript
运行
复制
Cursor cursor = database.query("DICTIONARY Order By RANDOM() LIMIT 5",
                new String[] {"english"}, null, null, null,null, null);

我得到一个带有特定id的英语单词,使用:

代码语言:javascript
运行
复制
Cursor cursor = database.query("DICTIONARY", 
                new String[] {"english"},
                "_id = ?", 
                new String[] {Integer.toString(id)}, 
                null, null, null);

现在,我需要在cursor中存储特定行和随机行(特定行最好在随机行之间),以便在CursorAdapter中使用它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-04-03 13:00:13

您可以使用MergeCursor,例如:-

代码语言:javascript
运行
复制
Cursor cursor1 = database.query("DICTIONARY Order By RANDOM() LIMIT 5",
                new String[] {"english"}, null, null, null,null, null);
Cursor cursor2 = database.query("DICTIONARY", 
                new String[] {"english"},
                "_id = ?", 
                new String[] {Integer.toString(id)}, 
                null, null, null);
MergeCursor merged = new MergeCursor(new Cursor[]{cursor1,cursor2});

然后,将/处理MergeCursor (本例中的合并)视为标准游标。

MergeCursor

票数 1
EN

Stack Overflow用户

发布于 2018-04-03 12:35:13

您可以使用MergeCursor将多个Cursor的结果连接到一个。

票数 1
EN

Stack Overflow用户

发布于 2018-04-03 18:03:23

在SQL中,可以将查询与复合查询组合起来。

代码语言:javascript
运行
复制
SELECT english FROM Dictionary WHERE _id = ?
UNION ALL
SELECT * FROM (SELECT english FROM Dictionary ORDER BY random() LIMIT 5);

(没有子查询,ORDER /LIMIT也将适用于第一部分。)

若要将第一行置于随机位置,请重新排序:

代码语言:javascript
运行
复制
SELECT english FROM Dictionary WHERE _id = ?
UNION ALL
SELECT * FROM (SELECT english FROM Dictionary ORDER BY random() LIMIT 5)
ORDER BY random();

若要执行原始SQL查询,请使用rawQuery()

代码语言:javascript
运行
复制
Cursor cursor = database.rawQuery("SELECT .....", new String[]{ ... });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49630018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档