简介:
-支持高大2TB的数据
-以单个文件形式存在
-以B-Tree的数据结构形式存储在硬盘上
特点:
1、轻量级,一个动态库、单文件
2、独立性,没有依赖、无需安装
3、隔离性 全部在一个文件夹中
4、跨平台,支持众多操作系统
5、多语言接口 支持众多编程语言
6、安全性 事物:通过数据库上的独占性和共享锁来实现独立事物处理,多个进程可以同时读,但是只能有一个可以写
SQLite的数据类型:
支持NULL,INTEGER, REAL, TEXT, BLOB
分别代表:空值,整型值,浮点值,字符串值,二进制对象
动态数据类型(弱引用):当某个值插入到数据库中,SQLite将会检查它的数据类型,如果该类型与关联的列不匹配,SQLite则会尝试将该值转换成该列的类型,如果不能转换,则该值将作为本身的类型存储。
使用须知:
-没有可用的SQLite的网络服务器,只能通过网络共享可能存在文件锁定或者性能问题。
-只提供数据库级的锁定
-没有用户概念,而是根据文件系统确定所有数据库的权限
SQLiteDatabase:
-提供管理SQLite数据库的类
-提供创建,删除,执行SQL命令,并执行其他常见的数据库管理任务方法
-每个数据库名字唯一
常用方法:
db.execSQL(sql)//执行任何sql语句
db.insert(table表名,nullColumnHack默认值,value要插入的值HashMap);
db.delete(String table,String whereColumn,String[] whereArgs);//第二第三两个参数构成条件
db.update(String table,ContentValues values,String whereClause,String[] whereArgs);
db,query(table,columns,selection,selectionArgs,groupBy,having,orderBy);
db.rawQuery(sql,selectionArgs);
实战使用SQLite数据库:
//每个程序都有一个自己的数据库 默认情况下是各自互相不干扰
//创建一个数据库,并且打开
//第一个参数为数据库名,可以没有后缀,在android中该文件不存在文件格式
//第二个参数时选择模式,私有的
//实例化的查询工厂,不常用,可为空
SQLiteDatabase db = openOrCreateDatabase("myDB.db", MODE_PRIVATE, null);
//可以利用以上的函数,格式如下
db.execSQL("create table if not exists usertb(_id integer primary key autoincrement,name text not null,age integer not null)");
//执行插入操作
db.execSQL("insert into usertb(name,age) values('张三',18)");
/**
查询语句执行,返回Cursor,Cursor是android查询数据后得到的一个管理数据集合的类,如果查询数据小,不会有问题,JVM最后会把内存释放掉,但如果数据量大,特别是有Blob信息,应当由开发人员手动及时释放内存,而不是去等待GC进行回收,如果等GC回收,那么会报错
*/
Cursor c = db.rawQuery("select * from usertb", null);
//遍历c,通过以下方法
if(c!=null){
while (c.moveToNext()) {
Log.i("info", c.getString(c.getColumnIndex("name")));
Log.i("info", "age:"+c.getInt(c.getColumnIndex("age")));
}
//记住遍历完之后一定要释放内存
c.close();
}
//全部完成之后还要释放数据库
db.close();
SQLiteOpenHelper:
SQLiteDatabase的帮助类,用于管理数据库的创建和版本更新
一般是建立一个类继承并重写onCreate()和onUpgrade()方法
方法说明:
onCreate(SQLiteDatabase db);//创建数据库调用
onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion);//版本更新时调用
getReadableDatabase();//创建或打开一个只读数据库
getWritableDatabase();//创建或打开一个读写数据库
使用方法:
继承SQLiteOpenHelper,重写:
public class SQLiteHelper extends SQLiteOpenHelper{
public SQLiteHelper(Context context, String name) {
super(context, name, null, 1);
}
public SQLiteHelper(Context context, String name, CursorFactory factory,
int version, DatabaseErrorHandler errorHandler) {
super(context, name, factory, version, errorHandler);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table if not exists stutb(_id integer primary key autoincrement,name text not null,age integer not null)");
db.execSQL("insert into stutb(name,age) values('张三',18)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
/**
调用方式如下:
*/
SQLiteHelper sqLiteHelper = new SQLiteHelper(MainActivity.this, "stutb");
SQLiteDatabase db =sqLiteHelper.getWritableDatabase();
Cursor c = db.rawQuery("select * from stutb", null);
if(c!=null){
while (c.moveToNext()) {
Log.i("info", c.getString(c.getColumnIndex("name")));
Log.i("info", "age:"+c.getInt(c.getColumnIndex("age")));
}
c.close();
}
db.close();