1.回顾
上篇学习了SharedPreference 的 存储和获取;作为补充 说明下 SharedPreference
1)是一种轻型的数据存储方式
2) 本质是基于 xml文件的 key-value键值对数据
3)通常用来存储 简单的配置信息
/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.实现
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()方法