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

 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);
		}
		//在数据库第一次生成的时候会调用这个方法,一般我们在这个方法里生成数据表
		@Override
		public void onCreate(SQLiteDatabase db) {
			// 创建数据库的SQL
			String sql = "CREATE TABLE dbk(title TEXT NO NULL,body TEXT NO NULL)";
			Log.i("dbk:createDB", sql);
			db.execSQL(sql);
			db.close();
		}
		//当数据库需要升级时,Android系统会自动调用这个方法,一般我们在这里写删除表并创建新表的操作
		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		}
	}


 

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

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

 

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

界面如下:

 

插入

插入数据的代码如下:

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

 

查询

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

代码如下:

btn2 = (Button) findViewById(R.id.btn2);
		btn2.setOnClickListener(new OnClickListener() {
			@Override
			public 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() {
										@Override
										public void onClick(
												DialogInterface dialog,
												int which) {
										}
									}).create().show();
				}
				db.close();
			}
		});


 

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

 

修改

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

btn3 = (Button) findViewById(R.id.btn3);
		btn3.setOnClickListener(new OnClickListener() {
			@Override
			public 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() {
			@Override
			public 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”);呢?把你的测试结果给大家分享一下?

【下载源码请点这里】

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值