搜索并返回数据库中的结果

时间:2017-06-08 01:15:20

标签: java android database sqlite search

我不熟悉数据库我有一个名为words_library.db的数据库文件,其中包含一个名为dictionary_lib的表,其中有两列,一列是English_lib,第二列是{{1}我想要实现的是: 当用户在搜索框中输入一个单词并验证时会出现一个对话框,显示如下图所示的结果(查看图1),这是我到目前为止的代码:

爪哇

German_lib

期望的结果(图1)

enter image description here

1 个答案:

答案 0 :(得分:0)

  

我有一个名为words_library.db的数据库文件

你不清楚如何拥有该文件,或者正在加载它,但继续前进。

  

当用户在搜索框中键入单词并验证

这是按下按钮吗?我会假设它是。

您似乎遇到的问题是breaking the problem into smaller steps

你需要

  1. 从英文单词
  2. 中查找数据库中的所有德语单词
  3. 以某种形式的List加载这些单词。 (只需保留光标,您不需要提取列)。
  4. 在对话框中显示此列表(请参阅AlertDialog.Builder#setCursor
  5. 理想情况下,每一个都应该写成单独的方法

    以下代码未经测试,但我认为应该接近您正在寻找的内容。

    // 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将需要数据库表中名为_id的列