Android存储方式-SQlite

来源:互联网 发布:明星年龄造假知乎 编辑:程序博客网 时间:2024/06/05 00:46

一、简介

     SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎。它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行。

二、特点

1、轻量级:一个动态库、单个文件

2、独立性:没有依赖、无需安装

3、隔离性:全部在一个文件夹中

4、跨平台:支持众多操作系统

5、多语言接口:支持多语言编程接口

6、安全性:通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。

 

三、数据类型支持:

1、NULL : 空值

2、INTEGER : 整数型

3、REAL : 浮点值

4、TEXT : 字符串值

5、BLOB : 二进制对象

 

四、常用方法

1、获取SQLiteDatabase对象:

this.openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory)

参数: name : 数据库名称

             mode:读写模式

             factory:游标工厂类

 

this.openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory,   DatabaseErrorHandler errorHandler)

参数: name : 数据库名称

             mode:读写模式

             factory:游标工厂类

             errorHandler:数据库发生错误时的处理类

 

2、SQLiteDatabase对象的方法

   db.execSQL(String sql)

   参数 sql : sql语句

 

db.insert(String table, String nullColumnHack, ContentValues values)

参数 table : 表名

         nullColumnHack:values参数为空时要创建的列,存放values这个空值

         values : 键值对形式的ContentValues对象

 

db.delete(table, whereClause, whereArgs)

参数 table : 表名

         whereClause : SQL’?’的条件语句

         whereArgs : 填充’?’的字符串值数组

 

db.update(table, values, whereClause, whereArgs)

参数 table : 表名

         whereClause : SQL’?’的条件语句

         whereArgs : 填充’?’的字符串值数组

 

public Cursor rawQuery(String sql, String[] selectionArgs)

参数 sql: sql语句

          selectionArgs: 绑定为字符串数组的值

 

public Cursor rawQuery(String sql, String[] selectionArgs, CancellationSignal cancellationSignal)

参数 sql: sql语句

         selectionArgs: 绑定为字符串数组的值

         cancellationSignal:取消执行信号

 

public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

参数 table:表名称

         colums:列名称数组

         selection:条件子句,相当于where

         selectionArgs:条件语句的参数数组

         groupBy:分组

         having:分组条件

         orderBy:排序类

          limit:分页查询的限制

          Cursor:返回值,相当于结果集ResultSet

 

五、关于游标Cursor对象

1、说明:

        Cursor是Android查询数据后得到的一个管理数据集合的类,正常情况下,如果查询得到的数据量较小时不会有内存问题,而且虚拟机能够保证Cursor最终会释放掉。然而如果Cursor的数据量特别大,特别是如果里面有Blob信息时,应该保证Cursor占用的内存被及时的释放掉,而不是等待GC来处理。并且Android明显是倾向于编程者手动将Cursor close掉,因为在源码中我们发现,如果等到垃圾回收器来回收时,也就是如果不手动关闭,系统会报错,会给用户以错误提示。

2、Cursor的方法

close(): 关闭游标对象

getCount(): 总记录条数

getColumnNames:获取所有列名称

isFirst(): 判断是否第一条记录

isLast(): 判断是否最后一条记录

moveToFirst(): 移动到第一条记录

moveToLast(): 移动到最后一条记录

move(int offset): 移动到指定的记录

moveToNext(): 移动到下一条记录

moveToPrevious(): 移动到上一条记录

getColumnIndex(String columnName): 获得指定列索引的int类型值

getInt(int columnIndex): 获得指定列索引的int类型值

getString(int columnIndex): 获得指定列索引的String类型值

 

六、关于SQLiteOpenHelper

1、说明:

      是SQLiteDatabase的帮助类,用于管理数据库的创建和版本更新;一般是建立一个类继承它,并重新onCreate()和onUpgrade()方法

2、方法

onCreate(SQLiteDatabase db): 创建数据库时调用

onUpgrade(SQLiteDatabase db, int oldVersion, int new Version):版本更新是调用

getReadableDatabase(): 创建或者打开一个只读数据库

getWritableDatabase(): 创建或者打开一个读写数据库


七、示例

1、用法一

        SQLiteDatabase db = openOrCreateDatabase("test1.db", MODE_PRIVATE, null);db.execSQL("create table if not exists mytable ( _id integer primary key autoincrement, name text not null, age int not null)");db.execSQL("insert into mytable(name, age) values('小雨',18)");db.execSQL("insert into mytable(name, age) values('雨阳',20)");Cursor cursor = db.rawQuery("select * from mytable ", null);String txt = "";if(cursor != null){while(cursor.moveToNext()){txt += "姓名:" + cursor.getString(cursor.getColumnIndex("name"))+"; 年龄:" + cursor.getInt(cursor.getColumnIndex("age"))+"\n";}cursor.close();}//清空表数据(这里为了方便测试)//db.execSQL("drop table mytable");db.delete("mytable", "name like ?", new String[]{"小雨","雨阳"});db.delete("mytable", "age like ?", new String[]{"18","20"});db.close();Toast.makeText(this,"执行后,再查询的结果:\n"+txt, 0).show();

2、用法二

        SQLiteDatabase db = openOrCreateDatabase("test2.db", MODE_PRIVATE, null);db.execSQL("create table if not exists mytable(_id integer primary key autoincrement,name text not null,age integer not null)");ContentValues values = new ContentValues();values.put("name", "张三");values.put("age", 19);db.insert("mytable", null, values);values.clear();values.put("name", "张三丰");values.put("age", 99);db.insert("mytable", null, values);values.clear();values.put("name", "张三封");values.put("age", 29);db.insert("mytable", null, values);values.clear();values.put("age", 88);db.update("mytable", values, "_id>?", new String[]{"3"});//将全部id>3的人的年龄改成88db.delete("mytable", "name like ?", new String[]{"%丰%"});//删除所有名字中带有丰的人Cursor c = db.query("mytable", null, "_id>?", new String[]{"0"}, null, null, "name");if (c!=null) {String text = "";String [] columns= c.getColumnNames();while (c.moveToNext()) {for (String columnName : columns) {text += c.getString(c.getColumnIndex(columnName))+"  ";}}c.close();tv.setText(text);}//清空表数据(这里为了方便测试)db.execSQL("drop table mytable");//db.execSQL("delete from mytable");db.close();

3、用法三

<span style="font-size:18px;">DBOpenHelper helper = new DBOpenHelper(Activity2SQLite.this, "test3.db");SQLiteDatabase db = helper.getWritableDatabase();//获取可读可写的对象Cursor c = db.rawQuery("select * from mytable", null);游标操作和上面的一样,这里就不再详细写了。DBOpenHelper 类如下:package com.sqb.demo2;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class DBOpenHelper extends SQLiteOpenHelper{public DBOpenHelper(Context context, String name){/** * 改写super的参数 */super(context, name, null, 1);// TODO Auto-generated constructor stub}public DBOpenHelper(Context context, String name, CursorFactory factory,int version) {super(context, name, factory, version);// TODO Auto-generated constructor stub}/** * 首次创建数据库的时候调用,一般可以把建库、建表的操作放到这个方法来执行 */@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stubdb.execSQL("create table if not exists mytable(_id integer primary key autoincrement,name text not null,sex text not null,age integer not null)");db.execSQL("insert into mytable(name,sex,age)values('张三','女',18)");}/** * 当数据库的版本发生变化的时候会自动执行 */@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stub}}</span>




0 0
原创粉丝点击