首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Android开发笔记(三十)SQLite数据库基础操作

Android开发笔记(三十)SQLite数据库基础操作

作者头像
aqi00
发布2019-01-18 10:43:04
发布2019-01-18 10:43:04
8690
举报
文章被收录于专栏:老欧说安卓老欧说安卓

SQLite语法

SQLite是一个小巧的嵌入式数据库,使用方便、开发简单,手机上最早由ios运用,后来android兴起同样也采用了sqlite。sqlite的多数sql语法与oracle是一样的,下面只列出不同的地方: 1、建表时为避免重复操作,应加上“IF NOT EXISTS”关键词,例如:CREATE TABLE IF NOT EXISTS table_name 2、同样的,删表时为避免重复操作,应加上“IF EXISTS”关键词,例如:DROP TABLE IF EXISTS table_name 3、变更表结构使用ALTER TABLE table_name ADD COLUMN ... 4、SQLite支持如下字段类型:整型INTEGER、字符串VARCHAR、浮点数FLOAT,但不支持布尔类型 5、SQLite建表时需要一个唯一标识的字段,字段名为_id,所以每建一张新表都要例行公事加上该字段定义,具体属性定义为“_id INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL”

SQLiteDatabase

SQLiteDatabase是SQLite的数据库管理类,我们可在Activity页面代码或者任何能取到Context的地方获取数据库实例,参考代码如下:

代码语言:javascript
复制
		//创建数据库,如果已存在则打开
		SQLiteDatabase db = getApplicationContext().openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);
		//删除数据库
		getApplicationContext().deleteDatabase("test.db");

SQLiteDatabase提供了若干操作数据表的API,常用的列举如下:

管理类

openDatabase : 打开指定路径的数据库 isOpen : 判断数据库是否已打开 close : 关闭数据库 getVersion : 获取数据库的版本号 setVersion : 设置数据库的版本号 事务类 beginTransaction : 开始事务 setTransactionSuccessful : 设置事务的成功标志 endTransaction : 结束事务。执行本方法时,系统会判断是否已执行setTransactionSuccessful,如之前已设置则提交,如没有设置则回滚。 增删改查 delete : 删除指定表名符合条件的记录 update : 更新指定表名符合条件的记录 insert : 对指定表名插入记录 execSQL : 直接执行拼接好的SQL语句 query : 对指定表名执行查询操作,返回结果集的游标 rawQuery : 直接执行拼接好的SQL查询语句,返回结果集的游标 需要注意的是,如果不设置事务,就直接进行增删改的操作,那么SQLite默认会提交成功的操作。

SQLiteOpenHelper

因为SQLiteDatabase存在局限性,例如必须小心不能重复打开数据库,还有app每次升级的同时升级数据库很不方便,所以Android提供了一个帮助工具,用于指导我们进行SQLite的合理使用,这个工具就是SQLiteOpenHelper。 我们新建一个数据库操作类继承自SQLiteOpenHelper,首先提示要重写onCreate和onUpgrade两个方法。其中onCreate只在第一次打开数据库时执行,而onUpgrade在打开数据库发现版本变化时都会执行,在onUpgrade函数内部,我们可以根据不同的新旧版本号进行相应的处理。 另外我们还得对该类运用单例模式,确保每次取出的数据库对象都是唯一的,这样就避免了重复打开数据库。废话少说,直接上该示例类的代码:

代码语言:javascript
复制
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class TestDBHelper extends SQLiteOpenHelper {
	private static final String TAG = "TestDBHelper";
	
	private static final String DB_NAME = "test.mDB";
	private static final int DB_VERSION = 1;
	private static TestDBHelper mHelper = null;
	private SQLiteDatabase mDB = null;

	private TestDBHelper(Context context) {
		super(context, DB_NAME, null, DB_VERSION);
	}

	private TestDBHelper(Context context, int version) {
		super(context, DB_NAME, null, version);
	}

	public static TestDBHelper getInstance(Context context, int version) {
		if (version > 0 && mHelper == null) {
			mHelper = new TestDBHelper(context, version);
		} else if (mHelper == null) {
			mHelper = new TestDBHelper(context);
		}
		return mHelper;
	}

	public SQLiteDatabase openReadLink() {
		Log.d(TAG, "openReadLink");
		if (mDB == null || mDB.isOpen() != true) {
			mDB = mHelper.getReadableDatabase();
		}
		return mDB;
	}

	public SQLiteDatabase openLink() {
		Log.d(TAG, "openLink");
		if (mDB == null || mDB.isOpen() != true) {
			mDB = mHelper.getWritableDatabase();
		}
		return mDB;
	}

	public void closeLink() {
		Log.d(TAG, "closeLink");
		if (mDB != null && mDB.isOpen() == true) {
			mDB.close();
			mDB = null;
		}
	}
	
	public String getDBName() {
		if (mHelper != null) {
			return mHelper.getDatabaseName();
		} else {
			return DB_NAME;
		}
	}
	
	@Override
	public void onCreate(SQLiteDatabase db) {
		Log.d(TAG, "onCreate");
		String create_sql = "CREATE TABLE IF NOT EXISTS person ("
				+ "_id INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL ,"
				+ "name VARCHAR NOT NULL," + "age INTEGER  NOT NULL" + ")";
		Log.d(TAG, "create_sql:" + create_sql);
		db.execSQL(create_sql);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		Log.d(TAG, "onUpgrade");
		if (newVersion == 10) {
			String alter_sql = "ALTER TABLE person ADD COLUMN company VARCHAR";
			Log.d(TAG, "alter_sql:" + alter_sql);
			db.execSQL(alter_sql);
		}
	}

}

点击下载本文用到的SQLite数据库操作的工程代码

点此查看Android开发笔记的完整目录

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年12月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SQLite语法
  • SQLiteDatabase
  • SQLiteOpenHelper
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档