android开发之SQLite数据库存储方式

简介:SQLite 是一款非常流行的嵌入式数据库,它支持 SQL 查询,并且只用很少的内存。Android 在运行时集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。对数熟悉 SQL 的开发人员来时,使用 SQLite 相当简单。可以,由于 JDBC 不适合手机这种内存受限设备,所以 Android 开发人员需要学习新的 API 来使用 SQLite。本文主要讲解 SQLite 在 Android 环境中的基本使用。

SQLite 介绍

SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite.

SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。

SQLite 基本上符合 SQL-92 标准,和其他的主要 SQL 数据库没什么区别。它的优点就是高效,Android 运行时环境包含了完整的 SQLite。

SQLite 和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在 CREATE TABLE 语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLite 将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。比如可以把一个字符串(String)放入 INTEGER 列。SQLite 称这为“弱类型”(manifest typing.)。

此外,SQLite 不支持一些标准的 SQL 功能,特别是外键约束(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FULL OUTER JOIN, 还有一些 ALTER TABLE 功能。

除了上述功能外,SQLite 是一个完整的 SQL 系统,拥有完整的触发器,交易等等。

Android 集成了 SQLite 数据库

Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。对于熟悉 SQL 的开发人员来时,在 Android 开发中使用 SQLite 相当简单。但是,由于 JDBC 会消耗太多的系统资源,所以 JDBC 对于手机这种内存受限设备来说并不合适。因此,Android 提供了一些新的 API 来使用 SQLite 数据库,Android 开发中,程序员需要学使用这些 API。

数据库存储在 data/< 项目文件夹 >/databases/ 下。

以上内容摘自网络

下面我们来学习在Android 开发中如何使用SQLite

我们先来创建一个数据库:

private static class DatabaseHelper extends SQLiteOpenHelper {private static int version = 1;public DatabaseHelper(Context context, String name,CursorFactory factory, int version) {super(context, name, factory, version);}public DatabaseHelper(Context context, String name) {this(context, name, version);}public DatabaseHelper(Context context, String name, int version) {this(context, name, null, version);}//在数据库第一次生成的时候会调用这个方法,一般我们在这个方法里生成数据表@Overridepublic void onCreate(SQLiteDatabase db) {// 创建数据库的SQLString sql = "CREATE TABLE dbk(title TEXT NO NULL,body TEXT NO NULL)";Log.i("dbk:createDB", sql);db.execSQL(sql);db.close();}//当数据库需要升级时,Android系统会自动调用这个方法,一般我们在这里写删除表并创建新表的操作@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}


DatabaseHelper是一个辅助类,这个类主要是生成一个数据库,并对数据库进行版本管理,

当在程序中调用这个类的方法getWritableDatabase()和getReadableDatabase()进行写读操作的时候,如果当时没有数据库,那么Android系统会自动创建一个数据库。

我写了个对数据库进行增、删、改、查基本操作的小东西,以此为例,我们来看一下具体的过程:

界面如下:

Android开发之数据存储之二:SQLite数据库存储方式【免费提供源码下载】_第1张图片

插入

插入数据的代码如下:

private void insertItem() {DatabaseHelper databaseHelper = new DatabaseHelper(SQLiteActivity.this,"dbk");SQLiteDatabase db = databaseHelper.getWritableDatabase();String sql1 = "INSERT INTO dbk(title,body) VALUES('第一条数据','Android很有钱途')";String sql2 = "INSERT INTO dbk(title,body) VALUES('第二条数据','Android开发很有趣')";try {Log.i("dbk:sql1", sql1);Log.i("dbk:sql2", sql2);db.execSQL(sql1);db.execSQL(sql2);setTitle("数据插入成功");} catch (Exception e) {setTitle("数据插入失败");}db.close();}


db.close();是对数据库执行关闭操作,如过你用完数据库后,不在很短的时间内进行下次使用,那么建议关掉数据库,以节省资源。

查询

我在查询里面加了对话框来方便理解,

Android开发之数据存储之二:SQLite数据库存储方式【免费提供源码下载】_第2张图片

代码如下:

btn2 = (Button) findViewById(R.id.btn2);btn2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {DatabaseHelper helper = new DatabaseHelper(SQLiteActivity.this,"dbk");// 定义读数据库操作SQLiteDatabase db = helper.getReadableDatabase();String col[] = { "title", "body" };/* * 执行数据库查询功能 第一个参数:表名 第二个参数:要查询的列的信息 * 第三个参数:条件,相当于SQL中的where部分,如果想查询所以则为null * 第四个参数:如果在第三个参数中有“?”符号,那么第四个参数的字串符会代替第三个的“?”部分 * 第五个参数:定义查询出来的数据是否分组,相当于SQL的GROUP BY,null为不分组 * 第六个参数:相当于SQL的having部分 第七个参数:相当于SQL的ORDEY BY来描述是否排序,为null则不排序 */Cursor cusor = db.query("dbk", col, null, null, null, null,null);if (cusor.moveToNext()) {String title = cusor.getString(cusor.getColumnIndex("title"));String body = cusor.getString(cusor.getColumnIndex("body"));final Integer num = cusor.getCount();setTitle(title);// 弹出一个对话框,来显示第一条数据dialog(SQLiteActivity.this, title, body, num).show();} else {// 如果数据库中没有数据则提示new AlertDialog.Builder(SQLiteActivity.this).setTitle("数据库中没有数据").setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {}}).create().show();}db.close();}});


我写了详细注释,这里就不用解释什么了吧?查询成功的提示框代码这里就不贴出来了,我会在源码中为大家打包。

修改

修改代码如下,注释已经给大家写的很详细了:

btn3 = (Button) findViewById(R.id.btn3);btn3.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {ContentValues args = new ContentValues();args.put("body", "修改后啦!");String[] title = new String[] { "第二条数据" };DatabaseHelper helper = new DatabaseHelper(SQLiteActivity.this,"dbk");// 定义写数据库操作SQLiteDatabase db = helper.getWritableDatabase();/* * 修改数据库 第一个参数是:数据库表名 第二个参数是:要修改的字段和要更新的内容 * 第三个参数是:条件,相当于SQL中的where部分 * 第四个参数是:如果在第三个参数中有“?”符号,那么第四个参数的字串符会代替第三个的“?”部分 */db.update("dbk", args, "title=?", title);db.close();}});


删除

删除操作的代码如下:

btn4 = (Button) findViewById(R.id.btn4);btn4.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {try {DatabaseHelper helper = new DatabaseHelper(SQLiteActivity.this, "dbk");// 定义写数据库操作SQLiteDatabase db = helper.getWritableDatabase();/* * 删除操作 第一个参数是:数据库表名 第二个参数是:条件,相当于SQL中的where部分 * 第三个参数是:如果在第三个参数中有“?”符号,那么第四个参数的字串符会代替第三个的“?”部分 */db.delete("dbk", "title='第二条数据'", null);setTitle("删除title为第二条数据的记录");db.close();} catch (Exception e) {}}});


如果你想做Android开发,就一定会在Android上存储数据,SQLite是一个不错的选择。本文主要介绍了如和操作SQLite数据库,同过本文你可以学会在对Android上SQLite数据库的基本操作,从而更进一步学习Android开发。

大家可以下去试试给修改也加个提示信息?测试一下是不是每次对数据库进行操作都会执行DatabaseHelper里面的onCreate方法?我们可不可以在onCreate里面加上db.execSQL(“DROP TABLE IF EXISTS dbk”);呢?把你的测试结果给大家分享一下?

【下载源码请点这里】

更多相关文章

  1. Android入门篇四:使用全局变量在Activity之间传递数据
  2. (超详细)android中SqLite数据库的使用(一文包懂包会)
  3. Study on Android【二】--ContentProvider数据模型概述
  4. 命令数据库在Android中查看和管理sqlite数据库
  5. Android入门篇四:使用剪切板在Activity之间传递对象数据
  6. .Net程序员玩转Android开发---(12)ListView显示数据
  7. Android中的数据持久化技术
  8. Hello Android - SQLite数据库操作

随机推荐

  1. Android(安卓)两种方式优雅实现按钮防重
  2. Android(安卓)STB ROM体积精简
  3. Android(安卓)数据和文件存储
  4. Android(安卓)数据和文件存储
  5. Android(安卓)编译流程解析01-AppPlugin
  6. 三方分享,登录
  7. Android(微信收藏)公号文章分类
  8. 64位Ubuntu 16.04下安装Android(安卓)Stu
  9. android ndk与sdk
  10. Android中PackageManager学习笔记(3)-Pac