在Android中,我试图从sqlite数据库中选择特定数量的行,其中一行是根据给定的id预先确定的,其余行是随机选择的。查询应该保存在游标中,因为我将在ListView中显示选定的行,这可以通过SimpleCursorAdapter从游标中获取信息。
初始数据库是这样创建的:
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中显示:
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);我得到了五个随机英语单词使用:
Cursor cursor = database.query("DICTIONARY Order By RANDOM() LIMIT 5",
new String[] {"english"}, null, null, null,null, null);我得到一个带有特定id的英语单词,使用:
Cursor cursor = database.query("DICTIONARY",
new String[] {"english"},
"_id = ?",
new String[] {Integer.toString(id)},
null, null, null);现在,我需要在cursor中存储特定行和随机行(特定行最好在随机行之间),以便在CursorAdapter中使用它。
发布于 2018-04-03 13:00:13
您可以使用MergeCursor,例如:-
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 (本例中的合并)视为标准游标。
发布于 2018-04-03 12:35:13
您可以使用MergeCursor将多个Cursor的结果连接到一个。
发布于 2018-04-03 18:03:23
在SQL中,可以将查询与复合查询组合起来。
SELECT english FROM Dictionary WHERE _id = ?
UNION ALL
SELECT * FROM (SELECT english FROM Dictionary ORDER BY random() LIMIT 5);(没有子查询,ORDER /LIMIT也将适用于第一部分。)
若要将第一行置于随机位置,请重新排序:
SELECT english FROM Dictionary WHERE _id = ?
UNION ALL
SELECT * FROM (SELECT english FROM Dictionary ORDER BY random() LIMIT 5)
ORDER BY random();若要执行原始SQL查询,请使用rawQuery()。
Cursor cursor = database.rawQuery("SELECT .....", new String[]{ ... });https://stackoverflow.com/questions/49630018
复制相似问题