SQLite数据库操作

一、SQLiteOpenHelper类

1、基本介绍:

SQLiteOpenHelper类是Android提供的用于操作SQLite数据库的工具类,该工具类能管理数据库(创建、增、修、删) & 版本的控制。使用过程:通过创建子类继承SQLiteOpenHelper类,实现它的一些方法来对数据库进行操作。
在实际开发中,为了能够更好的管理和维护数据库,我们会封装一个继承自SQLiteOpenHelper类的数据库操作类,然后以这个类为基础,再封装我们的业务逻辑方法。

2、SQLiteOpenHelper类的数据库操作方法介绍

方法名作用
onCreate()创建数据库(创建数据库时自动调用)
onUpgrade()升级数据库
close()关闭所有打开的数据库对象
execSQL()可进行增删改操作, 不能进行查询操作
query()、rawQuery()查询数据库
insert()插入数据
delete()删除数据
getWritableDatabase()创建或打开可以读/写的数据库(通过返回的SQLiteDatabase对象对数据库进行操作)
getReadableDatabase()创建或打开可读的数据库(同上)

二、常见数据库使用

数据库操作无外乎:“增删查改”:

1、 对于“增、删、改(更新)”这类对表内容变换的操作,需先调用getWritableDatabase()获得一个可写数据库对象,在执行的时候调用通用的execSQL(String sql)或或对应的操作API方法:insert()、delete()、update()
2、对“查”,需要调用getReadableDatabase()获得一个可读的数据库对象,然后使用query()或rawQuery()方法
查询数据库不能使用execSQL方法

三、数据库操作

1、创建数据库
涉及的方法有onCreate()、getWritableDatabase()、getReadableDatabase()
具体代码如下:
MySQLiteOpenHelper是SQLiteOpenHelper的子类:

MySQLiteOpenHelper.java:

	/**
	 * 第一次创建数据库的时候回调该方法
	 * 当使用getReadableDatabase()方法获取数据库实例的时候, 如果数据库不存在, 就会调用这个方法;
     *作用:创建数据库表:将创建数据库表的 execSQL()方法 和 初始化表数据的一些 insert()方法写在里面;
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {
		//SQLite数据创建支持的数据类型: 整型数据,字符串类型,日期类型,二进制的数据类型  
        //创建了一个名为person的表
		String sql = "create table if not exists person("
				+ "pid integer primary key autoincrement,"
				+ "pname varchar(20)," + "phone varchar(11))";
		//execSQL用于执行SQL语句
        //完成数据库的创建   
		db.execSQL(sql);
		//数据库实际上是没有被创建或者打开的,直到getWritableDatabase() 或者 getReadableDatabase() 方法中的一个被调用时才会进行创建或者打开 
        //见下代码
	}

SQLiteActivity01:

	@Override
	public void onClick(View v) {
		// 创建MySQLiteOpenHelper对象
		// 只执行这句话是不会创建或打开连接的
		MySQLiteOpenHelper helper = new MySQLiteOpenHelper(
						SQLiteActivity01.this);
		// 调用getReadableDatabase()或getWritableDatabase()才算真正创建或打开数据库
		helper.getWritableDatabase();// 获取数据库
			}
		});

2、插入数据
步骤:创建并打开数据库(可读/写)、插入数据
涉及方法:getWritableDatabase()、insert()
insert()也可以使用excelSQL()代替
具体代码如下:

	Button btnAdd = (Button) findViewById(R.id.btnAdd);
	btnAdd.setOnClickListener(this);


	public void onClick(View v) {
	
		//创建MySQLiteOpenHelper对象
		MySQLiteOpenHelper helper = new MySQLiteOpenHelper(
				SQLiteActivity02.this);

		// 获取控件ID
		String sql = null;
		switch (v.getId()) {
		case R.id.btnAdd:
			sql = "insert into person(pname,phone) values(?,?)";
			helper.execUpdate(sql, new Object[] { "张三丰", "13800000000" });
			Toast.makeText(SQLiteActivity02.this, "数据添加成功", Toast.LENGTH_LONG)
					.show();
			break;


3、修改数据(升级数据库)

	/**
	 * 参数:数据库,旧版本数据库,新版本数据库
	 * 作用:更新数据库表结构
	   调用时机:数据库版本发生变化的时候回调(取决于数据库版本)
 	   创建SQLiteOpenHelper子类对象的时候,必须传入一个version参数
	  该参数就是当前数据库版本, 只要这个版本高于之前的版本, 就会触发这个onUpgrade()方法,如下面代码
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// 增加email字段    使用SQL的ALTER语句
		db.execSQL("alter table person add email varchar(30");
	}
case R.id.btnUpdate:
			sql = "update person set pname =?,phone=?where pid=?";
			helper.execUpdate(sql, new Object[] { "张无忌", "13800000000", 1 });
			Toast.makeText(SQLiteActivity02.this, "数据修改成功", Toast.LENGTH_SHORT)
					.show();
			break;
			
//删除等操作需要当此处版本号比旧版本号大些才能进行操作

4、删除数据

	/**
	 * 执行添加、删除、修改的数据操作
	 * @param sql 
	 * @param params   where语句的参数, 逐个替换where语句中的 "?" 占位符
	 */
	public void execUpdate(String sql, Object[] params) {
		 // 调用getWritableDatabase()方法创建或打开一个可以读的数据库
        //通过返回的SQLiteDatabase对象对数据库进行操作
		SQLiteDatabase dataBase = getWritableDatabase();
		dataBase.execSQL(sql, params);
	}
	sql = "delete from person where pid = ?";
	helper.execUpdate(sql, new Object[] { 1 });

5、查询数据

public String execQueryById(String sql, String[] params) {
		SQLiteDatabase dataBase = getWritableDatabase();
		String result = "";// 查询返回的结果串
		// 执行查询语句,返回游标对象
		Cursor cursor = dataBase.rawQuery(sql, params);
		// 获取游标对象中的结果
		if (cursor.moveToFirst()) {
			// 获取列的标号
			String pid = cursor.getString(cursor.getColumnIndex("pid"));
			result += pid;
			String pname = cursor.getString(cursor.getColumnIndex("pname"));
			result += pname;
			String phone = cursor.getString(cursor.getColumnIndex("phone"));
			result += phone;
		}
		return result;
	}
	sql = "select * from person where pid = ?";
	String res = helper.execQueryById(sql, new String[] { "2" });
	Toast.makeText(SQLiteActivity02.this, res, Toast.LENGTH_LONG).show();
	TextView tv = (TextView) findViewById(R.id.tvInfo);
	tv.setText(res);

可参考(非常详细)

a、android.database.sqlite.SQLiteDatabase类的实例都代表了一个SQLite数据库的操作,通过SQLiteDatabase类可以执行SQL语句,以完成对数据表的增加、修改、删除、查询等操作,在此类之中定义了基本的数据库执行SQL语句的操作方法以及一些操作的模式常量。
b、ContentValues类包装了HashMap类,该类用于存取键值对的数据,每个键值对表示一列的列名和该列的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值