Android之数据持久化三(sqllite数据库)二

来源:互联网 发布:2017网络赚钱新项目 编辑:程序博客网 时间:2024/04/29 04:24

Android之数据持久化三(sqllite数据库)二

一,添加数据

其实我们可以对数据进行的操作也就无非四种,即 CRUD。其中 C 代表添加
(Create) ,R 代表查询(Retrieve) ,U 代表更新(Update) ,D代表删除(Delete) 。每一种操
作又各自对应了一种 SQL 命令,如果你比较熟悉 SQL 语言的话,一定会知道添加数据时使
用 insert,查询数据时使用 select,更新数据时使用 update,删除数据时使用 delete。但是开
发者的水平总会是参差不齐的,未必每一个人都能非常熟悉地使用 SQL 语言,因此 Android
也是提供了一系列的辅助性方法, 使得在 Android 中即使不去编写 SQL 语句, 也能轻松完成
所有的 CRUD 操作。
前面我们已经知道, 调用 SQLiteOpenHelper的 getReadableDatabase()或 getWritableDatabase()
方法是可以用于创建和升级数据库的, 不仅如此, 这两个方法还都会返回一个SQLiteDatabase
对象,借助这个对象就可以对数据进行 CRUD 操作了。
那么我们一个一个功能地看,首先学习一下如何向数据库的表中添加数据吧。
SQLiteDatabase中提供了一个 insert()方法,这个方法就是专门用于添加数据的。它接收三个
参数,第一个参数是表名,我们希望向哪张表里添加数据,这里就传入该表的名字。第二个
参数用于在未指定添加数据的情况下给某些可为空的列自动赋值 NULL, 一般我们用不到这
个功能, 直接传入 null 即可。 第三个参数是一个 ContentValues 对象, 它提供了一系列的 put()
方法重载,用于向 ContentValues 中添加数据,只需要将表中的每个列名以及相应的待添加
数据传入即可。
介绍完了基本用法,接下来还是让我们通过例子的方式来亲身体验一下如何添加数据
吧。修改 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" >……<Buttonandroid:id="@+id/add_data"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Add data"/></LinearLayout>

可以看到,我们在布局文件中又新增了一个按钮,稍后就会在这个按钮的点击事件里编
写添加数据的逻辑。接着修改 MainActivity 中的代码,如下所示:

public class MainActivity extends Activity {private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2);……Button addData = (Button) findViewById(R.id.add_data);addData.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();ContentValues values = new ContentValues();//  开始组装第一条数据values.put("name", "The Da Vinci Code");values.put("author", "Dan Brown");values.put("pages", 454);values.put("price", 16.96);db.insert("Book", null, values); //  插入第一条数据values.clear();//  开始组装第二条数据values.put("name", "The Lost Symbol");values.put("author", "Dan Brown");values.put("pages", 510);values.put("price", 19.95);db.insert("Book", null, values); //  插入第二条数据}});}}

在添加数据按钮的点击事件里面,我们先获取到了 SQLiteDatabase 对象,然后使用
ContentValues来对要添加的数据进行组装。 如果你比较细心的话应该会发现, 这里只对 Book
表里其中四列的数据进行了组装,id 那一列没并没给它赋值。这是因为在前面创建表的时候
我们就将 id 列设置为自增长了,它的值会在入库的时候自动生成,所以不需要手动给它赋
值了。 接下来调用了 insert()方法将数据添加到表当中, 注意这里我们实际上添加了两条数据,
上述代码中使用 ContentValues分别组装了两次不同的内容,并调用了两次 insert()方法。

二,更新数据

接下来我们看看怎样才能修改表中已有的数据。
SQLiteDatabase 中也是提供了一个非常好用的 update()方法用于对数据进行更新,这个方法
接收四个参数,第一个参数和 insert()方法一样,也是表名,在这里指定去更新哪张表里的数
据。第二个参数是 ContentValues 对象,要把更新数据在这里组装进去。第三、第四个参数
用于去约束更新某一行或某几行中的数据,不指定的话默认就是更新所有行。
那么接下来我们仍然是在 DatabaseTest项目的基础上修改, 看一下更新数据的具体用法。
比如说刚才添加到数据库里的第一本书,由于过了畅销季,卖得不是很火了,现在需要通过
降低价格的方式来吸引更多的顾客,我们应该怎么操作呢?首先修改 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" >……<Buttonandroid:id="@+id/update_data"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Update data"/></LinearLayout>

布局文件中的代码就已经非常简单了,就是添加了一个用于更新数据的按钮。然后修改
MainActivity 中的代码,如下所示:

public class MainActivity extends Activity {private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2);……Button updateData = (Button) findViewById(R.id.update_data);updateData.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();ContentValues values = new ContentValues();values.put("price", 10.99);db.update("Book", values, "name = ?", new String[] { "The DaVinci Code" });}});}}

这里在更新数据按钮的点击事件里面构建了一个 ContentValues 对象,并且只给它指定
了一组数据, 说明我们只是想把价格这一列的数据更新成 10.99。 然后调用了 SQLiteDatabase
的 update()方法去执行具体的更新操作,可以看到,这里使用了第三、第四个参数来指定具
体更新哪几行。第三个参数对应的是 SQL 语句的 where 部分,表示去更新所有 name 等于?
的行,而?是一个占位符,可以通过第四个参数提供的一个字符串数组为第三个参数中的每
个占位符指定相应的内容。因此上述代码想表达的意图就是,将名字是 The Da Vinci Code
的这本书的价格改成 10.99。

三,删除数据

删除数据对你来说应该就更简单了,因为它所需要用到的知识点你全部已经学过了。
SQLiteDatabase 中提供了一个 delete()方法专门用于删除数据,这个方法接收三个参数,第一
个参数仍然是表名,这个已经没什么好说的了,第二、第三个参数又是用于去约束删除某一
行或某几行的数据,不指定的话默认就是删除所有行。
是不是理解起来很轻松了?那我们就继续动手实践吧, 修改 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" >……<Buttonandroid:id="@+id/delete_data"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Delete data"/></LinearLayout>

仍然是在布局文件中添加了一个按钮, 用于删除数据。 然后修改 MainActivity 中的代码,
如下所示:

public class MainActivity extends Activity {private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2);……Button deleteButton = (Button) findViewById(R.id.delete_data);deleteButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();db.delete("Book", "pages > ?", new String[] { "500" });}});}}

可以看到, 我们在删除按钮的点击事件里指明去删除 Book 表中的数据, 并且通过第二、
第三个参数来指定仅删除那些页数超过 500 页的书籍。当然这个需求很奇怪,这里也仅仅是
为了做个测试。你可以先查看一下当前 Book 表里的数据,其中 The Lost Symbol 这本书的页
数超过了 500 页,也就是说当我们点击删除按钮时,这条记录应该会被删除掉。






1 0
原创粉丝点击