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>
- Android存储方式-SQlite
- Android中SQLite数据库存储方式
- Android 八 数据存储方式之一 SQLite
- [Android]详解Andorid下SQLite存储方式
- Android中SQLite数据库存储方式
- Android学习(二)(初学)SQLite存储方式
- zz Android中SQLite数据库存储方式
- Android数据的存储方式 SQLite
- Android数据存储方式:SharePreference、SQLite、ContentProvider
- Android的数据存储方式-----------sqlite
- Android中SQLite数据库存储方式
- Android数据存储方式之 SQLite
- android存储方式之sqlite数据库
- Android 存储方式之SharedPreference SQLite ContentProvider
- Android数据存储方式—SQLite
- Android中SQLite数据库存储方式
- Android 数据存储方式(SQLite)
- Android数据存储--SQLite 存储方式应用(日记管理系统)
- Saving HDU
- 常用js语法小记
- POJ2992 Divisors 组合数,分解质因数
- javascript 正则匹配url并添加<a>标签
- CABasicAnimation的基本使用方法(移动·旋转·放大·缩小)
- Android存储方式-SQlite
- 从Camera来看Binder IPC机制
- 17.1 Replication Configuration 复制:
- RecyclerView更新数据
- 类型转换问题
- 从NSURLSession下载和断点续传到NSURLSession使用说明及后台工作流程分析
- 无法创建XMLHTTP对象,请检查是否安装了MS XML Parser运行库
- 一台电脑怎么安装32位和64位的jdk,怎么配置环境变量
- 剑指offer 61题 【树】按之字形顺序打印二叉树