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数据库:
SQLiteOpenHelper:
SQLiteDatabase的帮助类,用于管理数据库的创建和版本更新
一般是建立一个类继承并重写onCreate()和onUpgrade()方法
方法说明:
onCreate(SQLiteDatabase db);//创建数据库调用
onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion);//版本更新时调用
getReadableDatabase();//创建或打开一个只读数据库
getWritableDatabase();//创建或打开一个读写数据库
使用方法:
继承SQLiteOpenHelper,重写:
-支持高大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();
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件