我刚刚开始学习android并进入数据库部分,我在其中插入了相同的记录,但现在我只想通过名称从数据库中获取数据并将其显示在textview中。 帮我 提前谢谢
答案 0 :(得分:0)
请关注开发者文档。 https://developer.android.com/training/basics/data-storage/databases.html
SQLiteDatabase db = mDbHelper.getReadableDatabase();
// Define a projection that specifies which columns from the database
// you will actually use after this query.
String[] projection = {
FeedEntry._ID,
FeedEntry.COLUMN_NAME_TITLE,
FeedEntry.COLUMN_NAME_SUBTITLE
};
// Filter results WHERE "title" = 'My Title'
String selection = FeedEntry.COLUMN_NAME_TITLE + " = ?";
String[] selectionArgs = { "My Title" };
// How you want the results sorted in the resulting Cursor
String sortOrder =
FeedEntry.COLUMN_NAME_SUBTITLE + " DESC";
Cursor cursor = db.query(
FeedEntry.TABLE_NAME, // The table to query
projection, // The columns to return
selection, // The columns for the WHERE clause
selectionArgs, // The values for the WHERE clause
null, // don't group the rows
null, // don't filter by row groups
sortOrder // The sort order
);
答案 1 :(得分:0)
您可以使用查询访问数据,该查询会返回 Cursor
。
Cursor
就像一个电子表格表,其中包含列和行。
您告诉查询您想要哪些列,并暗示将通过可选的 WHERE
语句返回的行。
最简单的查询基于SQL SELECT * FROM <table>;
。这将从*
指定的表中选择所有列(即 <table>
表示所有列)(其中将替换为有效表)名称)。
如果你想要特定的列,那么** *`` should be replaced with a comma delimited list e.g.
SELECT name,address FROM would return a **
Cursor ** containing all the rows from the table with only the **name** and **address** columns from the table specified by
`。
如果要过滤返回的行,则可以添加 WHERE 子句。例如SELECT name,address FROM <table> WHERE name = 'Fred'
会返回 Cursor
,其中只包含 Fred 作为名称列且仅包含名称的行和地址列。
如果需要返回游标,则不能只键入使用SQLiteDatabase rawQuery
或query
方法所需的SQL语句。
rawQuery
rawQuery
有两个参数,第一个是SQL作为字符串,第二个是可选参数(此处未涉及,因此将使用 null )
要获取包含列名称和地址的 Cursor
,并且只使用可以使用Fred的行,假设该表名为 mytable : - < / p>
`Cursor mycursor = db.rawQuery("SELECT name,address FROM mytable WHERE name = 'Fred'";);`
其中 db 是SQLiteDatabase对象的实例。
但是,建议不要使用 rawQuery
,因为它是开放的SQL注入。相反,建议仅限于必须使用它的情况。
query
query
有一些过载变化,可以在SQLiteDatabase找到。
对于此示例,将使用query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
。
String table
,是要查询的表的名称。String[] columns
,是一个列名称数组。String selection
是where子句(null for no where子句)。String[] selectionArgs
是一组参数,用于替换?占位符。因此代码可能是: -
String tablename = "mytable";
String[] columns = {"name", "address"};
String whereclause = "name=?"; //note use of placeholder ?
String[] whereargs = {"Fred"};
Cursor mycursor = db.query(tablename,
columns,
whereclause,
whereargs,
null,null,null
);
其中 db 是SQLiteDatabase对象的实例。
mycursor
包含数据,如果没有名称为Fred的列,则可能不包含数据。
使用以下方法可以获得游标中的行数: - int rowsincursor = mycursor.getCount();
注意!返回的Cursor
不会为空。 (一个非常常见的错误)
要通过 Cursor
访问移动所需的数据。最初 Cursor
在第一行之前是 。如果您只想要或想要唯一/第一行,那么您可以使用 Cursor
moveToFirst
方法。
请参阅Cursor了解更多动作......方法等
Cursor
位置适当后,您可以使用 Cursor
获取方法来获取数据。例如 getString(int columnindex)
会将数据作为字符串返回。 columnindex是要访问的列的基于0的偏移量。使用 Cursor
getColumnIndex(String columnname)
可以消除错误计算偏移量所造成的错误。
因此,以下内容可用于设置 TextView
(注意故意过于谨慎)
if (mycursor.getCCount() > 0) {
if (mycursor.moveToFirst()) {
mytextview.setText(mycursor.getString(mycursor.getColumnIndex("name")));
}
}
mycursor.close() // You should always close a cursor when done with it.