SQLite和SQLiteOpenHelper


SQLite


一、介绍


SQLite是一个关系型轻量级数据库,它对移动端相对极端的资源进行了专门的优化处理,它遵守大概70%的SQL语法,这使得它和MySQL大多语法相近,它的优点显而易见,轻量、较快速、安全、独立、隔离。SQLite百科介绍


数据库文件存放位置:data/data/主包名(AndroidManifest.XML中声明的主包名)/database/xx.db


使用到的类:1、SQLiteDatabase(相当于Connection、PreparedStatement)     2、SQLiteOpenHelper


二、SQL命令

掌握很多DML命令没大有用,因为SQLiteDatabase为我们提供了对应的方法。主要是DDL命令,后面给出一些列的函数。

(一)DDL语句

CREATE 创建一个新的表,一个表的视图,或者数据库中的其他对象。
ALTER 修改数据库中的某个已有的数据库对象,比如一个表。
DROP 删除整个表,或者表的视图,或者数据库中的其他对象。

(二)DML语句

INSERT 创建一条记录。
UPDATE 修改记录。
DELETE 删除记录。


查询语句:和MySQL、Oracle一致

SQLite中的自增:autoincrement


三、数据类型

INT、NTEGER、TINYINT、SMALLINT、MEDIUMINT、BIGINT、UNSIGNED BIG INT、INT2、INT8 INTEGER
CHARACTER(20)、VARCHAR(255)、VARYING CHARACTER(255)、NCHAR(55)、NATIVE CHARACTER(70)、NVARCHAR(100)、TEXT、CLOB TEXT
BLOB、no datatype specified NONE
REAL、DOUBLE、DOUBLE PRECISION、FLOAT REAL
NUMERIC、DECIMAL(10,5)、BOOLEAN、DATE、DATETIME NUMERIC


SQLite没有boolean值


DATE数据类型

存储类 日期格式
TEXT 格式为”YYYY-MM-DD HH:MM:SS.SSS”的日期。
REAL 从公元前4714年11月24日格林尼治时间的正午开始算起的天数。
INTEGER 从1970-01-01 00:00:00 UTC算起的秒数。

注意:1.SQLite没有boolean值

  2.查询语句:和MySQL、Oracle一致

  3.SQLite中的自增:autoincrement

  4.使用id作为字段名会出现错误,应替换为_id.


------------------------------分割线-----------------------------------

下面开始具体的使用SQLiteDatabase来管理SQLite

四、使用SQLiteDatabase管理SQLite

首先要分三步走:这和把大象装进冰箱一致。1.创建数据库链接,2.放入数据或查询,3.关闭数据库

(一).创建数据库连接

创建一个SQLiteDatabase对象,第二个参数是打开方式(权限),第三个参数是工厂模式

SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase("数据库名.db",MODE_PRIVATE,null);
 

(二).执行SQL语句

1.直接执行SQL语句,适用于无返回值得SQL语句(增、删、改、建表、删表、改表)

String sql="create table stu(_id Integer primary key autoincrement,name varchar(20),pic integer)";
db.execSQL(sql);

2.占位模式,对比jdbc中的PreparedStatement

	String sql="update emp set name=? where _id=?";
	db.execSQL(sql, new Object[]{"王五",1});

3.直接执行函数

增加---insert();

删除---delete();

修改---update();

增加

	//一个类似于Map的键值对存储结构
	ContentValues  values=new ContentValues();
	//把数据加入到存储列表
	values.put("name", "张三丰");
	values.put("pic", 5);
	//执行插入,第二个参数是当values列表出现空值时候的替补数据
	db.insert("stu", null, values);

删除

db.delete(表名, "name=? and tel=?", new String[]{"张三丰","123456789"});

修改

//一个类似于Map的键值对存储结构
	ContentValues  values=new ContentValues();
	//把数据加入到存储列表
	values.put("name", "张三丰");
	values.put("pic", 5);
	db.update("表名", values, "_id=?", new String[]{"1"});

4.查询

(1)可扩展性高,且多行插询,推荐使用

//建立多行查询语句
	//参数:表名,投影查询要查询的字段列表名,条件,条件中?的值,group by,having,order
	Cursor cs=db.query("stu", new String[]{"*"}, "_id=?", new String[]{1+""}, null, null, null);
	//循环取数据
	while(cs.moveToNext())
	{
		String name=cs.getString(cs.getColumnIndex("name"));
		int pic=cs.getInt(2);
		//建议使用该方式
		int _id=cs.getInt(cs.getColumnIndex("_id"));
	}
(2)简化版,单行查询

//建立单行查询语句
	//参数:sql语句,替换占位符
	Cursor cs=db.rawQuery("select * from xxx where _id=?",new String[]{"1"});
	//循环取数据
	if(cs.moveToNext())
	{
		String name=cs.getString(cs.getColumnIndex("name"));
		int pic=cs.getInt(2);
		//建议使用该方式
		int _id=cs.getInt(cs.getColumnIndex("_id"));
	}
Cursor-->相当于ResultSet

--------------------华丽的分割线-----------------------

五、使用SQLiteOpenHelper

(一)介绍

这是一个SQLiteDatabase的辅助类,它可以简化打开数据库链接的过程,增加可维护性。

(二)使用

1.创建继承于SQLiteOpenHelper的类,并重写onCreate()和onUpgrade()

oncreate:第一次运行时调用,初始化数据库、建表等操作

onUpgrade:会自动判断传入的版本号,相同不调用,相当于升级。

2.打开连接

(1).创建SQLiteOpenHelper对象

SQLiteOpenHelper dbHelp=new SQLiteOpenHelper();

(2).获得链接

SQLiteDatabase db=dbHelper.getWritableDatabase();

SQLiteDatabase db=dbHelper.getReadableDatabase();

这两种方式,各有优点,getWritableDatabase方式速度较快(翻看源码并没发现优点)。

当数据库磁盘满了,或出现莫种bug,使得数据库只能读不能写,这时候使用getWritableDatabase打开会报错,而

getReadableDatabase会在打开失败的情况下,继续以只读方式打开。

3.关闭连接

使用之后不要忘记db.close();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值