使用 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();
所以我目前能够在 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();