如何通过名称从sqlite获取数据

时间:2017-08-03 13:05:27

标签: android android-sqlite

我刚刚开始学习android并进入数据库部分,我在其中插入了相同的记录,但现在我只想通过名称从数据库中获取数据并将其显示在textview中。 帮我 提前谢谢

2 个答案:

答案 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 rawQueryquery方法所需的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是一组参数,用于替换占位符。
  • 其余参数将为null,因为这些是未使用的功能。

因此代码可能是: -

        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.