0
点赞
收藏
分享

微信扫一扫

Android-数据存储( SQLite )


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()方法




举报

相关推荐

0 条评论