码迷,mamicode.com
首页 > 移动开发 > 详细

Android-数据存储( SQLite )

时间:2015-08-27 18:57:59      阅读:278      评论:0      收藏:0      [点我收藏+]

标签:sqlite   sqliteopenhelper   sqliterdatabase   contentvalues   cursor   

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




版权声明:本文为博主原创文章,未经博主允许不得转载。

Android-数据存储( SQLite )

标签:sqlite   sqliteopenhelper   sqliterdatabase   contentvalues   cursor   

原文地址:http://blog.csdn.net/lablenet/article/details/48029143

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!