SQLite 是用C语言编写的开源嵌入式数据库引擎。支持太多数的SQL92biaozhun,并且
可以再所有主要的操作系统上运行。
- 支持高达2TB大小的数据库
- 以单个文件的形式存在
- 以B-Tree的数据结构形式存储在磁盘里
特点:
- 轻量级 一个动态库、单文件
- 独立性 没有依赖、无需安装
- 隔离性 全部在一个文件夹中
- 跨平台 支持众多操作系统
- 多语言接口 支持众多编程语言
- 安全性 事务
事务处理的安全性问题:
- 通过数据库上的独占性和共享锁实现独立事务处理
- 多个进程可以再同一时间从同一数据库读取数据,但是只能有一个可以写入数据
SQLite的数据类型:
- NULL 、INTEGR、REAL、TEXT和BLOB数据类型
- 空值、整形值、浮点值、字符串值、二进制值
动态数据类型(弱引用)
当某个值插入到数据库,SQLite将会检查它的类型,如果该类型与关联的列不匹配,
SQLite则会尝试将该值转换成该列的类型,如果不能转换,则该值将作为本身的类型存储。
SQLiteDatabase:
提供一些管理SQLite数据库的类
提供创建,删除,执行SQL命令,并执行其他常见的数据库管理任务的方法
每个程序的数据库名字是惟一的
- execSQL(sql)
- insert(table,nullColumnHack,values)
- delete(table,whereClause,whereArgs)
- update(table,values,whereClause,whereArgs)
- query(table,columns,selection,selectionArgs,groupBy,having,orderBy)
- rawQuery(sql,selectionArgs)
example:--------------------------------------------------------------------------------------------
//每个程序都有自己的数据库,一般情况下互不干扰
//创建一个数据库并且打开
SQLiteDatabase db = openOrCreateDatabase("user.db",MODE_PRIVATE, null);
db.execSQL("create table if not exites usertb(_id integer primary key autoincrement,name text not null,age integer not null,sex text not null)");
db.execSQL("insert into usertb(name,sex,age)values(‘张三‘,‘男‘,‘18‘)");
db.execSQL("insert into usertb(name,sex,age)values(‘李四‘,‘女‘,‘19‘)");
db.execSQL("insert into usertb(name,sex,age)values(‘王五‘,‘男‘,‘20‘)");
Cursor c=db.rawQuery("select * form usertb", null);
if(c!=null)
{
while(c.moveToNext())
{
Log.i("info",""+c.getInt(c.getColumnIndex("_id")));
Log.i("info",""+c.getString(c.getColumnIndex("name")));
Log.i("info",""+c.getInt(c.getColumnIndex("age")));
Log.i("info",""+c.getString(c.getColumnIndex("sex")));
}
c.close();
}
db.close();
---------------------------------------------------------------------------------------------------------------
ContentValues:
- 用来存储一组可以被ContentResolver处理的值。
- ContentValues value = newContentValues();
- //类似 hashMap key value
- values.put (“key”,“values”);
example:
---------------------------------------------------------------------------------------------------------------
SQLiteDatabase db= openOrCreateDatabase("stu.db", MODE_PRIVATE, null);
db.execSQL("create table if not exists stutb(_id integer primary key autoincrement,name text not null,sex text not null,age integet not null)");
ContentValues values = new ContentValues();
values.put("name", "王尼玛");
values.put("sex", "男");
values.put("age", 20);
db.insert("stutb", null, values);
values.clear();
values.put("name", "李尼玛");
values.put("sex", "男");
values.put("age", 22);
db.insert("stutb", null, values);
values.clear();
values.put("sex", "女");
db.update("stutb", values, "_id>?", new String[]{"0"});
db.delete("stutb", "name like ?", new String[]{"%王%"});
Cursor c =db.query("stutb", null, "_id>?", new String[]{"0"}, null, null, "name");
if(c!=null)
{
String []columns= c.getColumnNames();
while(c.moveToNext())
{
for(String columnName :columns)
{
Log.i("info", c.getString(c.getColumnIndex(columnName)));
}
}
}
}
-------------------------------------------------------------------------------------------------------------------------------------------
SQLiteOpenHelper:
- SQLiteDatabase的帮助类,用于管理数据库的创建和版本更新
- 一般用法是建立一个类继承它,并且重写onCreate()和onUpgrade()方法
- onCreate(SQLiteDatabase db) 创建数据库调用,
- inUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) 版本更新时调用
- getReadableDatabase()创建或打开一个只读数据库
- getWriteDatabase()创建或者打开一个读写数据库