SQLite简介:
开源关系型数据库,运算速度快,占用资源少,在内存上只有几百k的存储空间,非常适用于移动端。
SQLite特点
占用空间小
运行高效
可移植性好
支持标准SQL语法
支持ACID事务
零配置:无需安装和网络管理配置
支持多种开发语言,C, PHP, Perl, Java, C#,Python
SQLite没有服务器进程,它通过文件保存数据,该文件是跨平台的,可以放在其他平台中使用。
SQLite能解析大部分标准SQL语句如:
1、查询语句:
select * from 表名 where 条件子句 group by 分组子句 having … order by 排序子句
如:select * from person order by id desc
2、插入语句:
insert into 表名(字段列表) values(值列表)。
如: insert into person(name, age) values(‘张三’,3)
3、更新语句:
update 表名 set 字段名=值 where 条件子句。
如:update person set name=‘李四‘ where id=10
4、删除语句:delete from 表名 where 条件子句。
如:delete from person where id=10
SQLite相关类
SQLiteOpenHelper(管理数据库的创建和版本更新):
抽象类,我们通过继承该类,然后重写数据库及表创建以及更新的方法, 我们还可以通过该类的对象获得数据库实例,或者关闭数据库。
SQLiteDatabase(完成数据库中的增删改查的操作):
数据库访问类,我们可以通过该类的对象来对数据库中的表进行增删改查的操作,类似jdbc的Connection和Preparement的结合体
Cursor:
游标,有点类似于JDBC里的resultset结果集,可以简单理解为指向数据库中某 一个记录的指针。
SQLite相关类的使用:
SQLiteOpenHelper类:
使用方法:通过一个子类继承该类,再通过其中的方法来对数据库进行操作
具体流程:
Step 1:自定义一个类继承SQLiteOpenHelper类
Step 2:在该类的构造方法中设置好要创建的数据库名,版本号
Step 3:重写onCreate( )方法创建表结构
Step 4:重写onUpgrade( )方法定义版本号发生改变后执行的操作
常用方法
1、public SQLiteOpenHelper(Context context,String name,CursorFactory factory,int version):
构造方法,一般需要传递一个创建的数据库名称即name参数,版本号version最小为1.
参数:
context 用来打开或创建数据库
name 数据库文件名
factory 用来创建对象游标,或者默认为null
version 数据库的序号(从1开始)
2、abstract void onCreate(SQLiteDatabase db):
当第一次创建数据库时回调的方法,可以完成创建数据库表结构及添加一些应用使用到的初始化数据等功能。创建的数据库放在/data/data//database目录下。
3.abstract void onUpgrade(SQLiteDatabase db,int OldVersion,int new Version)
当数据库版本更新时回调该方法。
4. Synchronized SQLiteDatabase getReadableDatabase():
以可读的方式打开数据库,返回对应的SQLiteDatabase对象。
5. Synchronized SQLiteDatabase getWritableDatabase():
以可读写的方式打开数据库,返回对应的SQLiteDatabase对象。
6.Synchronized void close():
关闭所有打开的SQLiteDatabase。
实例:
public class PersonSQLiteOpenHelper extends SQLiteOpenHelper{
//数据库的构造方法,用来定义数据库的名称,数据库查询的结果集,数据库的版本
public PersonSQLiteOpenHelper(Context context){
super(context,”person.db”,null,5);
}
//数据库第一次被创建时调用该方法
public void onCreate(SQLiteDatabase db){
//初始化数据库的表结构,执行一条建表的SQL语句
db.execSQL(“create table person(id integer primary key autoincrement,)”+”name varchar(20),”+”number varchar(20))”);
}
//当数据库的版本号增加时调用
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
db.execSQL(“alter table person add account varchar(20)”);
}
}
SQLiteDatabase
SQLiteDatabase常用方法:
public static SQLiteDatabase openDatabase (String path, SQLiteDatabase.CursorFactory factory, int flags)
打开path路径文件所代表的数据库,返回值是数据库SQLiteDatabase 对象。如果数据库不存在则抛出FileNotFoundException 异常。
参数解释:
path:指定路径的数据库文件,如”/data/data/com.ssh.sql/databases/game.db”
factory:构造查询时的游标对象,当查询(query)被提交时,该对象会被调用来实例化一个游标,如果指定该参数为null,则使用默认游标
flags:参数控制数据库的访问模式有4种,多个模式组合用|隔离:
OPEN_READWRITE:以可读写方式打开数据库
OPEN_READONLY :以只读方式打开数据库
CREATE_IF_NECESSARY:检查数据库是否存在,若不存在,则创建数据库
NO_LOCALIZED_COLLATORS:打开数据库时,不按照本地化语言对数据进行排序
示例:
SQLiteDatabase db= SQLiteDatabase.openDatabase ("databases/myDBase.db", null, SQLiteDatabase. OPEN_READWRITE| SQLiteDatabase. CREATE_IF_NECESSARY);
public static SQLiteDatabase openOrCreateDatabase (String path, SQLiteDatabase.CursorFactory factory)
打开或创建path文件所代表的SQLite数据库,返回值是SQLiteDatabase对象。
public static SQLiteDatabase openOrCreateDatabase (File file, SQLiteDatabase.CursorFactory factory)
打开或创建file文件所代表的SQLite数据库,返回值是SQLiteDatabase对象。
示例:
SQLiteDatabase db=SQLiteDatabase.openOrCreateDatabase("/sdcard/mydatabase.db", null);
在程序中获取SQLiteDatabase对象后,接下来就可以调用对象的方法操作数据库。
1、创建表
SQLite没有提供专门的方法创建表,可通过execSQL()方法指定SQL语句来创建表。
示例:
//创建表的SQL语句
String SQL_CT=“CREATE TABLE student (ID INTEGER PRIMARY KEY,age INTEGER,name TEXT)”;
//执行该SQL语句创建表
db.execSQL(SQL_CT);
2、删除表
通过execSQL()方法指定SQL语句来删除表。
示例:
//创建表的SQL语句
String SQL_DROP=“DROP TABLE student”;
//删除表
db.execSQL(SQL_DROP);
3、插入一条记录
向表中插入记录有两种实现方式:insert()方法和execSQL()方法
①、insert()方法:
long insert(String table,String nullColumnHack, ContentValues values): 向表中插入数据,返回新插入行号。
table:想插入数据的表名
nullColumnHack:强行插入null值的数据列的列名。
values:代表一行记录的数据。ContentValues是存取数据的类。put(String key,XXX val)方法来进行插入值的设置,其中key为列名,val的值可以为SQLite支持的数据类型。
示例:
//创建ContentValues 对象
ContentValues values = new ContentValues();
//往该对象里放键值对
values.put(“ID”, 1);
values.put(“name”, “张三丰");
values.put("age", 26);
//插入数据
long rowid = db.insert(“student”, null, values);//返回新添记录的行号,与主键id无关
②、execSQL()方法
首先要编写插入数据的SQL语句;
然后执行execSQL()方法
public void execSQL(String sql) throws SQLException
public void execSQL(String sql, Object[] bindArgs) throws SQLException
示例:
//第一种方法是写入固定数据
//定义插入SQL语句
String SQL_INSERT=“INSERT INTO student (ID,age,name) values (1,26,’张三丰’)”;
//调用execSQL()方法执行SQL语句,将数据插入到student表
db.execSQL(SQL_INSERT);
//第二种方法数据写入是灵活的,可以拼从页面上获取的数据String SQL_INSERT=“INSERT INTO student (ID,age,name) values (?,?,?)”;
db.execSQL(SQL_INSERT,new String[]{“1”, “26”, “张三丰”});
4、更新一条记录:
实现方式:update()方法和execSQL()方法。
①、update()方法
public int update(String table,ContentValues values,String whereClause,String[] whereArgs): 更新表中指定的数据。该方法返回受此update语句影响的记录的条数。
参数解释:
table:想要更新数据的表名
values:想要更新的数据
whereClause:更新的条件,满足该where子句的记录将会被更新。如果为null,则所有行都将更新。
whereArgs:为where子句传入的参数。
示例:修改张三丰的姓名和年龄。
ContentValues values=new ContentValues();
values.put(“name”, “张丰");
values.put("age", 20);
db.update(“student”, values, “name=?”, new String[]{“张三丰”});
②、execSQL()方法
首先要编写插入数据的SQL语句;
然后执行execSQL()方法
public void execSQL(String sql) throws SQLException
public void execSQL(String sql, Object[] bindArgs) throws SQLException
//定义更新SQL语句
String SQL_UPDATE=“UPDATE student SET age=20 where name=‘张三丰’”;
//调用execSQL()方法执行SQL语句,更新student表里的数据
db.execSQL(SQL_UPDATE);
//定义更新SQL语句
String SQL_UPDATE=“UPDATE student SET age=? where name=?”;
//调用execSQL()方法执行SQL语句,更新student表里的数据
db.execSQL(SQL_UPDATE,new Object[]{20,”张三丰”});
5、删除记录:
实现方式:delete()方法和execSQL()方法。
①、delete()
int delete(String table,String whereClause,String[] whereArgs): 删除表中指定的数据。返回值为删除的行数,0时代表失败。
参数解释:
table:要对其进行删除操作的表名
whereClause:删除条件
whereArgs:删除条件参数数组
示例:
db.delete(“student”, “name=?”, new String[]{“张三丰”});
②、execSQL()方法
//定义删除语句
String SQL_Del=“delete from student where id=10”;
//调用execSQL()方法执行SQL语句,删除student表里对应的数据
db.execSQL(SQL_Del);