Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.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/1/oracle/10.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
Java 从数据库中搜索和返回结果_Java_Android_Database_Sqlite_Search - Fatal编程技术网

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();
    }