选择并存储在 Android 的 Cursor n 行中,其中一行具有特定的 id,其余行是随机的
Selecting and storing in Android's Cursor n number of rows where one row has a specific id and the rest are random
在 Android Studio 中,我正在尝试 select 来自 sqlite 数据库的特定行数,其中一行是根据给定的 id 预先确定的,其余行是随机选择的。查询应该保存在 Cursor 中,因为我会在 ListView 中显示 selected 行,它可以简单地通过 SimpleCursorAdapter 从 Cursor 获取信息。
初始数据库是这样创建的:
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);
}
selected 行将使用光标显示在 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 中使用它。
您可以使用 MergeCursor
将多个 Cursor
的结果合并为一个。
您可以使用 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});
您然后 treat/handle MergeCursor
(在本例中 合并 )就像一个标准游标。
在 SQL 中,您可以将查询与 compound query:
SELECT english FROM Dictionary WHERE _id = ?
UNION ALL
SELECT * FROM (SELECT english FROM Dictionary ORDER BY random() LIMIT 5);
(没有子查询,ORDER BY/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[]{ ... });
在 Android Studio 中,我正在尝试 select 来自 sqlite 数据库的特定行数,其中一行是根据给定的 id 预先确定的,其余行是随机选择的。查询应该保存在 Cursor 中,因为我会在 ListView 中显示 selected 行,它可以简单地通过 SimpleCursorAdapter 从 Cursor 获取信息。
初始数据库是这样创建的:
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);
}
selected 行将使用光标显示在 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 中使用它。
您可以使用 MergeCursor
将多个 Cursor
的结果合并为一个。
您可以使用 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});
您然后 treat/handle MergeCursor
(在本例中 合并 )就像一个标准游标。
在 SQL 中,您可以将查询与 compound query:
SELECT english FROM Dictionary WHERE _id = ?
UNION ALL
SELECT * FROM (SELECT english FROM Dictionary ORDER BY random() LIMIT 5);
(没有子查询,ORDER BY/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[]{ ... });