Java 从数据库中搜索和返回结果
我不熟悉数据库我有一个名为Java 从数据库中搜索和返回结果,java,android,database,sqlite,search,Java,Android,Database,Sqlite,Search,我不熟悉数据库我有一个名为words\u library.db的数据库文件,其中包含一个名为dictionary\u lib的表,其中有两列,一列是English\u lib,第二列是German\u lib,我想要实现的是: 当用户在搜索框中键入一个单词并进行验证时,将出现一个对话框,显示如下图所示的结果(请参见图1),这是我迄今为止的代码: 爪哇 db=newdatabasehelper(getContext()); 试一试{ db.createDataBase(); openDataBas
words\u library.db
的数据库文件,其中包含一个名为dictionary\u lib
的表,其中有两列,一列是English\u lib
,第二列是German\u lib
,我想要实现的是:
当用户在搜索框中键入一个单词并进行验证时,将出现一个对话框,显示如下图所示的结果(请参见图1),这是我迄今为止的代码:
爪哇
db=newdatabasehelper(getContext());
试一试{
db.createDataBase();
openDataBase();
}
捕获(例外e)
{
e、 printStackTrace();
}
名称列表=新建LinkedHashMap();
int ii;
SQLiteDatabase sd=db.getReadableDatabase();
Cursor Cursor=sd.query(“dictionary_lib”,null,null,null,null,null,null);
ii=cursor.getColumnIndex(“英语库”);
eng_list=new ArrayList();
german_list=新的ArrayList();
while(cursor.moveToNext()){
namelist.put(cursor.getString(ii),cursor.getString(cursor.getColumnIndex(“德语库”));
}
迭代器条目=namelist.entrySet().Iterator();
while(entries.hasNext()){
Map.Entry thisEntry=(Map.Entry)entries.next();
eng_list.add(String.valueOf(thisEntry.getKey());
german_list.add(String.valueOf(thisEntry.getValue());
}
对于(int i=0;i
期望结果(图1)
我有一个名为words_library.db的数据库文件
现在还不清楚您是如何拥有该文件的,或者正在加载该文件的,但请继续
当用户在搜索框中键入一个单词并进行验证时
这是按一下按钮吗?我想是的
你似乎遇到的问题是 你需要
// Get your database reference
final DataBaseHelper db = new DataBaseHelper(getContext());
// Setup the search button
findViewById(R.id.start_search).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String searchQuery = searchBox.getText().toString();
Cursor germanWordCursor = getGermanWords(db, searchQuery);
showDialog(String.format("'%s' in German", searchQuery), germanWordCursor);
}
});
// Query the database for the german words from a given english word
private Cursor getGermanWords(DataBaseHelper dbHelper, String englishQuery) {
final SQLiteDatabase db = dbHelper.getReadableDatabase();
return db.query("dictionary_lib",
null,
"English_Lib = ?",
new String[] { englishQuery },
null, null, null);
}
// Display a list dialog from a database cursor
private void showDialog(String title, Cursor cursor) {
final int theme = R.style.AppCompatAlertDialogStyle;
final Drawable blueOutLine = getResources().getDrawable(R.drawable.blue_out_line, theme);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), theme)
.setTitle(title)
.setCursor(cursor, null, "German_lib")
.setNegativeButton("CLOSE", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int id){
Stxt.setBackground(blueOutLine);
}
}).show();
}
注意
setCursor
将需要数据库表中名为\u id
的列@cricket\u 007这不是在另一个活动中使用代码填充回收器视图的问题。我现在想要的是对该代码进行一些更改,以便提供上面提到的所需结果(顺便说一句,我对该代码的唯一问题是,他删除了相同的项目,只显示了一个项目-例如:我有“高于”3次代码忽略前两个,只显示最后一个)对不起,我不明白。如果你想在对话框中显示数据库结果,你需要在那里查询数据库…@cricket_007请再次检查我编辑了我的问题,我希望你能理解我现在要做的事情。你确定要在for循环中创建新的AlertDialog.Builder
?还是只想获取字符串into一个单独的对话框?@cricket_007只是试图将字符串放入一个单独的对话框中,但没有达到预期的效果,我尝试了下面的方法:它显示整个列,而不是只显示(int I=0;I(德语:list.get(i));}}}}AlertDialog.Builder=new AlertDialog.Builder(getActivity(),R.style.AppCompatAlertDialogStyle);Builder.setTitle(text);Builder.setMessage(“德语:+temp\u列表);AlertDialog=Builder.create();dialog.show();
我不知道如何定义“想要的项目”。告诉我SQL查询想要的项目是搜索结果,这是查询(上面提到的完整代码)Cursor Cursor=sd.query(“dictionary_lib”,null,null,null,null,null)
即从dictionary_lib中选择*
…您需要在那里设置一个条件,就像我在回答中所做的那样。看起来我们已经到了那里,现在我得到了java.lang.IllegalArgumentException:列“\u id”不存在
,我的数据库中也没有该列
// Get your database reference
final DataBaseHelper db = new DataBaseHelper(getContext());
// Setup the search button
findViewById(R.id.start_search).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String searchQuery = searchBox.getText().toString();
Cursor germanWordCursor = getGermanWords(db, searchQuery);
showDialog(String.format("'%s' in German", searchQuery), germanWordCursor);
}
});
// Query the database for the german words from a given english word
private Cursor getGermanWords(DataBaseHelper dbHelper, String englishQuery) {
final SQLiteDatabase db = dbHelper.getReadableDatabase();
return db.query("dictionary_lib",
null,
"English_Lib = ?",
new String[] { englishQuery },
null, null, null);
}
// Display a list dialog from a database cursor
private void showDialog(String title, Cursor cursor) {
final int theme = R.style.AppCompatAlertDialogStyle;
final Drawable blueOutLine = getResources().getDrawable(R.drawable.blue_out_line, theme);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), theme)
.setTitle(title)
.setCursor(cursor, null, "German_lib")
.setNegativeButton("CLOSE", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int id){
Stxt.setBackground(blueOutLine);
}
}).show();
}