1.回顾
上篇学习了SharedPreference 的 存储和获取;作为补充 说明下 SharedPreference
1)是一种轻型的数据存储方式
2) 本质是基于 xml文件的 key-value键值对数据
3)通常用来存储 简单的配置信息
4)默认存储路径:/data/data/<包名>/shared_prefs目录下
2.重点
(1)SQLite 的 介绍
(2) 数据类型
(3)优点
(4)SQLiteDataBase
(5)SQLiteOpenHelper
3.介绍
开源的嵌入式数据库,以单个文件的形式存在
(1)轻量级,一个动态库,单文件
(2)独立性,没有依赖,无须安装
(3)隔离性,全部在文件夹里
(4)跨平台
(5)多语言接口
(6)安全性,事务:
通过数据库上的独占性和共享锁来实现独立事务处理;多个线程读取,一个线程写入;
4.数据存储类型
Null Integer Real Text Blob
空 ,整型,浮点型 ,字符串值,二进制值 ;动态数据类型( 弱引用),可进行相关数据类型自动转换
5.优点
占用资源少 , 性能良好 ,0 管理成本 ;没有可用与 Sqlite 的网络服务器 ;
6.实现
创建的 db 文件存储在 data/<包名>/databases/ 下
(1) SQLiteDatabase : 管理数据库类 创建 删除 执行 sql命令
例如:创建表的操作
SQLiteDatabase db=openOrCreateDatabase("yuan.db",MODE_PRIVATE,null); db.execSQL("create table if not exists labelnet(_id integer primary key autoincrement,name text not null,pass text not null)");
上面你的 SQLiteDatabase 创建的 db对象 ,可以执行通过 execSQL () 方法可以执行所有的 sql 语句实现增删改查 (sql 语句太多,就很恶心);
(2)ContentValues 实现
使用 ContentValues实现封装数据 ,后通过 insert() , update() ,delete() , query() 四个方法实现 增删改查,只需要传的参数不一样就行了;
注意:创建表 还需要的是 sql 语句哦!!!!
例子:
新增:调用上面的db对象 ,新增 20条数据
ContentValues values=new ContentValues(); for(int i=0;i<20;i++){ values.put("name","原"); values.put("pass","123456"); //返回值 为 行的 id db.insert(DBNAME,null, values); values.clear(); }
修改:
ContentValues values=new ContentValues(); values.put("pass","111111"); //修改 db.update(DBNAME, values,"_id>?",new String[]{"10"});
删除:
//删除 db.delete(DBNAME,"pass=?",new String[]{"111111"});
查询:使用 Cursor实现 ,
Cursor cursor= dbs.query(DBNAME,null,"_id>?",new String[]{"0"},null,null,"_id"); String str="数据库读取数据"; if(cursor!=null){ //得到 列明称 String [] curName=cursor.getColumnNames(); while(cursor.moveToNext()){ for(String cn : curName){ Log.i("cursor",cursor.getString(cursor.getColumnIndex(cn))); str+=cursor.getString(cursor.getColumnIndex(cn)); } Log.i("cursor","..........................................."); str+="\n"; } } tv_show.setText(str);
7. SQLiteOpenHelper
7.1 介绍
帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。
新建类需要继承 自 SQLiteOpenHelper 类:需要实现几个方法:onCreate() , onUpgrade() ,和 构造函数
7.2 例子
package com.example.sqlite; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class DB extends SQLiteOpenHelper { public DB(Context context, String name) { super(context, name, null, 1); } /** * 首次创建 数据库的时候调用 * 一般 把建库 和 键表操作 放在这里 */ @Override public void onCreate(SQLiteDatabase db) { // 一般 把建库 和 键表操作 放在这里 db.execSQL("create table if not exists yuantest(_id integer primary key autoincrement,name text not null,pass text not null)"); } /** * 当数据库版本发送改名的时候,自动调用 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //当数据库版本发送改名的时候,自动调用 } }
7.3 使用
(1) getReadableDatabase() 返回 只读数据库
(2)getWritableDatabase() 返回 可读可写
实现:
DB db=new DB(this,"yuan.db"); SQLiteDatabase dbs=db.getWritableDatabase();
这样就返回 db对象了,下面的操作 和 6 一样了
8.Cursor 游标
不管你如何执行查询,都会返回一个 Cursor,这是 Android 的 SQLite 数据库游标,
(1)通过使用 getCount() 方法得到结果集中有多少记录;
(2)通过 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍历所有记录;
(3)通过 getColumnNames() 得到字段名;
(4)通过 getColumnIndex() 转换成字段号;
(5)通过 getString(),getInt() 等方法得到给定字段当前记录的值;
(6)通过 requery() 方法重新执行查询得到游标;
(7)通过 close() 方法释放游标资源;
使用的时候,一定要释放游标资源(占资源);
9. 总结
ContentValues 实际上和 Map , HashMap 一样的,需要清空的时候,就调用 clear()方法
版权声明:本文为博主原创文章,未经博主允许不得转载。