android: SQLite查询数据

掌握了查询数据的方法以后,你也就将数据库的 CRUD 操 做所有学完了。不过千万不要所以而放松,由于查询数据也是在 CRUD 中最复杂的一种 操做。android

咱们都知道 SQL 的全称是 Structured Query Language,翻译成中文就是结构化查询语言。 它的大部功能都是体如今“查”这个字上的,而“增删改”只是其中的一小部分功能。因为 SQL 查询涉及的内容实在是太多了,所以在这里我不许备对它展开来说解,而是只会介绍 Android 上的查询功能。若是你对 SQL 语言很是感兴趣,能够找一本专门介绍 SQL 的书进 行学习。数据库

相信你已经猜到了,SQLiteDatabase 中还提供了一个 query()方法用于对数据进行查询。 这个方法的参数很是复杂,最短的一个方法重载也须要传入七个参数。那咱们就先来看一下 这七个参数各自的含义吧,第一个参数不用说,固然仍是表名,表示咱们但愿从哪张表中查 询数据。第二个参数用于指定去查询哪几列,若是不指定则默认查询全部列。第3、第四个 参数用于去约束查询某一行或某几行的数据,不指定则默认是查询全部行的数据。第五个参 数用于指定须要去 group by 的列,不指定则表示不对查询结果进行 group by 操做。第六个参 数用于对 group by 以后的数据进行进一步的过滤,不指定则表示不进行过滤。第七个参数用 于指定查询结果的排序方式,不指定则表示使用默认的排序方式。更多详细的内容能够参考 下表。其余几个 query()方法的重载其实也大同小异,你能够本身去研究一下,这里就再也不 进行介绍了。ide

 

 

 

query()方法参数学习

对应 SQL 部分this

描述spa

table翻译

from table_name指针

指定查询的表名xml

columns对象

select column1, column2

指定查询的列名

selection

where column = value

指定 where 的约束条件

selectionArgs

-

为 where 中的占位符提供具体的值

groupBy

group by column

指定须要 group by 的列

having

having column = value

对 group by 后的结果进一步约束

orderBy

order by column1, column2

指定查询结果的排序方式

 

 

虽然 query()方法的参数很是多,可是不要对它产生畏惧,由于咱们没必要为每条查询语

句都指定上全部的参数,多数状况下只须要传入少数几个参数就能够完成查询操做了。调用

query()方法后会返回一个 Cursor 对象,查询到的全部数据都将从这个对象中取出。 下面仍是让咱们经过例子的方式来体验一下查询数据的具体用法,修改 activity_main.xml

中的代码,以下所示:

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"

android:orientation="vertical" >

 

……

 

 

<Button android:id="@+id/query_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Query data"/>

</LinearLayout>

这个已经没什么好说的了,添加了一个按钮用于查询数据。而后修改 MainActivity 中的 代码,以下所示:

 

public class MainActivity extends Activity {

 

private MyDatabaseHelper dbHelper;

 

@Override

 

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2);

……

Button queryButton = (Button) findViewById(R.id.query_data);

queryButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

SQLiteDatabase db = dbHelper.getWritableDatabase();

// 查询Book表中全部的数据

Cursor cursor = db.query("Book", null, null, null, null, null, null);

if (cursor.moveToFirst()) {

do {

// 遍历Cursor对象,取出数据并打印

String name = cursor.getString(cursor. getColumnIndex("name"));

String author = cursor.getString(cursor.

getColumnIndex("author"));

int pages = cursor.getInt(cursor.getColumnIndex("pages"));

 

double price = cursor.getDouble(cursor.

 

getColumnIndex("price"));

Log.d("MainActivity", "book name is " + name); Log.d("MainActivity", "book author is " + author); Log.d("MainActivity", "book pages is " + pages); Log.d("MainActivity", "book price is " + price);

}

while (cursor.moveToNext());

 

 }});}


}

cursor.close();

 

 

}

能够看到,咱们首先在查询按钮的点击事件里面调用了 SQLiteDatabase 的 query()方法 去查询数据。这里的 query()方法很是简单,只是使用了第一个参数指明去查询 Book 表,后 面的参数所有为 null。这就表示但愿查询这张表中的全部数据,虽然这张表中目前只剩下一 条数据了。查询完以后就获得了一个 Cursor 对象,接着咱们调用它的 moveToFirst()方法将数据的指针移动到第一行的位置,而后进入了一个循环当中,去遍历查询到的每一行数据。在这个循环中能够经过 Cursor 的 getColumnIndex()方法获取到某一列在表中对应的位置索引, 而后将这个索引传入到相应的取值方法中,就能够获得从数据库中读取到的数据了。接着我 们使用 Log 的方式将取出的数据打印出来,借此来检查一下读取工做有没有成功完成。最后 别忘了调用 close()方法来关闭 Cursor。

好了,如今再次从新运行程序,界面如图 6.27 所示。

图   6.27

 

点击一下 Query data 按钮后,查看 LogCat 的打印内容,结果如图 6.28 所示。

 

图   6.28

 

能够看到,这里已经将 Book 表中惟一的一条数据成功地读取出来了。

相关文章
相关标签/搜索