您的位置:首页 > 数据库

SQLite数据存储

2015-09-12 18:16 225 查看
简介:

-支持高大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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息