android开发轻量级数据库SQLite

Android轻量级数据库SQLite

简介

    android开发app难免要存储一些数据到本地,作为缓存,这就要用到安卓系统的SQLite

    数据库用于存储数据,数据以文档的形式存到本地外部存储空间。

    SQLite与mySQL存储方式差别不大,都是以表格的形式存储。

    存下来的表格可以在手机外存中查看。


把user.db文件导出到电脑,就可以查看其中的内容了,需要下载一个SQLite Expert Professional软件查看,把xxx.db拖拽进入就可以查看了。


    

SQLiteOpenHelper类

SQLite数据库用SQLiteOpenHelper类来应用,创建一个Helper继承它,继承后需要实现两个抽象方法onCreate()与onUpgrade()方法,第一个方法就是在第一次创建xxx.db文件的时候调用,第二个方法是版本更新的时候调用。

    

构造方法需要传递一个上下文,表名,版本号。其中版本号一定要大于等于1。

    

public class Helper extends SQLiteOpenHelper {

	// context上下文 name datebase名 factory游标工厂 version版本
	public Helper(Context context) {
		super(context, "user.db", null, 1);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		// 第一次创建文件时执行
		long deatTime = System.currentTimeMillis() + 1 * 60 * 60 * 1000;
		System.out.println("onCreate执行");

		db.execSQL("create table user(_id integer primary key autoincrement,"
				+ "name varchar(20),tel varcher(20),deadTime varchar(50))");
		db.execSQL("insert into user(name,tel,deadTime) values(?,?,?)",
				new String[] { "张三", "110", deatTime + "" });
		db.execSQL("insert into user(name,tel,deadTime) values(?,?,?)",
				new String[] { "李四", "120", deatTime + "" });
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// 更新版本时执行
	}

}

创建一个Dao包,写一个接口Dao,两个实现子类Dao1与Dao2用于测试两种调用数据库的方法。

Dao接口

public interface Dao {
	public abstract void insert();

	public abstract void delete();

	public abstract void update();

	public abstract void select();

	public abstract List<User> selectList();

}

Dao1实现子类(sql语言实现)

构造方法获取一个SQLiteOpenHelper类或者其子类,然后就可以实现接口中的增删查改方法了。

	public void insert() {
		SQLiteDatabase db = helper.getWritableDatabase();
		long deadTime = System.currentTimeMillis() + 1 * 60 * 60 * 1000;
		String sql = "insert into user(name,tel,deadTime) values(?,?,?)";
		Object[] bindObjects = new String[] { "王五", "111111", deadTime + "" };
		db.execSQL(sql, bindObjects);
		db.close();
	}

	@Override
	public void delete() {
		SQLiteDatabase db = helper.getWritableDatabase();
		String sql = "delete from user where name=?";
		Object[] bindObjects = new String[] { "王五" };
		db.execSQL(sql, bindObjects);
		db.close();
	}

	@Override
	public void update() {
		SQLiteDatabase db = helper.getWritableDatabase();
		String sql = "update user set tel='999999' where name=? ";
		Object[] objects = new String[] { "王五" };
		db.execSQL(sql, objects);
		db.close();
	}

	@Override
	public void select() {
		SQLiteDatabase db = helper.getWritableDatabase();
		String sql = "select name,tel,deadTime from user where name=?";
		String[] bindStrings = new String[] { "王五" };
		Cursor cursor = db.rawQuery(sql, bindStrings);
		if (cursor != null && cursor.getCount() > 0) {
			while (cursor.moveToNext()) {
				String name = cursor.getString(0);
				String tel = cursor.getString(1);
				String deadTime = cursor.getString(2);
				System.out.println(name + ":" + tel + ":" + deadTime);
			}
			cursor.close();
		}
		db.close();
	}


Dao2实现(ContentValues与SQLiteOpenHelper)

这是一种调用数据库的方式,还有一种方式是直接应用ContentValues类来传递map类型的数值给数据库,实现操控数据库。


写在Dao2实现子类中

	public void insert() {
		long deadTime = System.currentTimeMillis() + 1 * 60 * 1000;
		SQLiteDatabase db = helper.getReadableDatabase();
		ContentValues contentValues = new ContentValues();
		contentValues.put("name", "王五");
		contentValues.put("tel", "222222");
		contentValues.put("deadTime", "" + deadTime);
		long result = db.insert("user", null, contentValues);
		if (result == -1) {
			System.out.println("失败");
		} else {
			System.out.println("成功");
		}
		db.close();
	}

	@Override
	public void delete() {
		SQLiteDatabase db = helper.getWritableDatabase();
		String[] whereArgStrings = { "王五" };
		int delete = db.delete("user", "name=?", whereArgStrings);
		System.out.println(delete);
		db.close();
	}

	@Override
	public void update() {
		SQLiteDatabase db = helper.getWritableDatabase();
		String[] whereArgString = { "王五" };
		ContentValues contentValues = new ContentValues();
		contentValues.put("tel", "888888");
		int update = db.update("user", contentValues, "name=?", whereArgString);
		System.out.println(update);
		db.close();
	}

	@Override
	public void select() {
		SQLiteDatabase db = helper.getWritableDatabase();
		String sql = "selete name,tel,deadTime from user where";
		String[] columnStrings = { "name", "tel", "deadTime" };
		String selection = "name=?";
		String[] whereArg = { "王五" };
		Cursor cursor = db.query("user", columnStrings, selection, whereArg,
				null, null, null);
		if (cursor != null && cursor.getCount() > 0) {
			while (cursor.moveToNext()) {
				String name = cursor.getString(0);
				String tel = cursor.getString(1);
				String deatTime = cursor.getString(2);
				System.out.println(name + ":" + tel + ":" + deatTime);
			}
			cursor.close();
		}
		db.close();
	}

在MainActivity的onCreate()方法中创建一个Helper类的对象、Dao1或者Dao2的对象就可以实现SQLite数据库的增删查改操作了。

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

		Helper helper = new Helper(this);
		dao = new Dao2(helper);

Dao2结果图示


Dao2的图示结果,Dao2应用到ContentValues与SQLiteOpenHelper的结合,效果要比Dao1实现的方式要好,因为它有返回值,会返回受影响的数据行数,出现异常还会返回-1,极大的增强了程序的容错性。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值