使用 Edittext 值查询 SQLite,然后在 ListView 中显示结果

Query SQLite with Editext value then display results in a ListView

所以我目前能够在 ListView 中查看 SQLite 数据,但由于我的数据库控制器中的 set 语句,它会带回所有记录。但我希望用户能够将一个值添加到 EditText 中并使用该值查询数据库,然后将结果显示到 ListView 中。以下是我目前使用的两段代码,以防万一。如有任何帮助,我们将不胜感激!

在我的 MainActivity 中,我在 oncreate 中调用它来显示列表视图:

public void listRecs(){

        ArrayList<HashMap<String, String>> scanList = this.controller.getAllRecsExpDESC();

        myAdapter = new SimpleAdapter(this, scanList, R.layout.list_view_layout, new String[]{"regNo","streetName","recExpDate","tvPosition"},
               new int[]{R.id.reg_No,R.id.street_Name,R.id.date_Time,R.id.tv_Position});

        Recs.setAdapter(myAdapter);
    }

这是来自我的数据库控制器的代码:

public ArrayList<HashMap<String, String>> getAllRecsExpDESC() {
        ArrayList<HashMap<String, String>> wordList;
        wordList = new ArrayList<HashMap<String, String>>();
        String selectQuery = "SELECT  * FROM recs ORDER BY recExpDate DESC";
        SQLiteDatabase database = this.getWritableDatabase();
        Cursor cursor = database.rawQuery(selectQuery, null);
        if (cursor.moveToFirst()) {
            do {
                HashMap<String, String> map = new HashMap<String, String>();
                map.put("regNo", cursor.getString(0));
                map.put("tvPosition", cursor.getString(1));
                map.put("streetName", cursor.getString(2));
                map.put("recExpDate", cursor.getString(3));
                wordList.add(map);
            } while (cursor.moveToNext());
        }
        database.close();
        return wordList;
    }

从事物的声音来看,您会采用与上述函数类似的函数,但它采用字符串参数并将其用作原始查询的一部分。

public ArrayList<HashMap<String, String>> getRecsFromParameter(String PARAMETER)

不确定你到底想做什么,但查询应该是这样的:

String selectQuery = "SELECT  * FROM recs WHERE Column = " + PARAMETER + "ORDER BY recExpDate DESC";

否则这将以相同的方式工作,您将获得一个列表结果集并使用该列表创建一个适配器。

但需要注意的重要一点是,根据用户输入执行代码确实会使您的应用程序容易受到 SQL injection 的攻击。您可能还想采取其他措施来防止用户输入他们想要的任何内容,以防止损坏内部数据库。

编辑:哦!要从编辑文本中获取字符串,您可以按照以下方式执行操作:

(EditText) findViewById(R.id.edit_text_id).getEditableText().toString();