Android中数据的存储方式(二)—SQLite数据库
2015-10-17 11:32
423 查看
程序中很重要的一部分是数据的交换,而交换中很重要一点是如何实现数据的存储。根据数据的作用,选择不同的保存方式和使用权限。Android数据的存储有如下6种:
保存数据到应用 程序私有的文件夹下
保存到公共的sd卡上
sharedpreferences保存
使用xml文件去保存
使用数据库保存
内容提供者(Content provider)
支持标准的SQL语法
创建表
增加一条记录
删除一条记录
修改一条记录
查询数据
修改表结构
google提供的api(CRUD)
google提供的CRUD的API很重要的一个特点是:每一个操作都有返回值(返回对应的行号),就此可以判断数据操作是否成功。注意,每次使用了数据库后都要close()。
增加一条记录
删除一条记录
修改一条记录
查询数据
query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)方法各参数的含义:
table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。
columns:要查询出来的列名。相当于select语句select关键字后面的部分。
selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”
selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。
groupBy:相当于select语句group by关键字后面的部分
having:相当于select语句having关键字后面的部分
orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc;
limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。
onCreate只在创建时调用一次,而之后每一次的版本更新,都调用onUpgrade方法
数据库的使用步骤是:
1.新建工程后,创建一个类继承SQLiteOpenHelper类,并重写一个构造函数和两个方法
2.在DAO层中创建SQLiteOpenHelper类,并调用sqlite.getWritableDatabase()方法,获取SQLiteDatabase
3.当版本需要变更时,需要修改程序中的构造方法,调整版本参数(最后一位参数)
4.为sqlite加入增删改查方法
5.关闭SQLiteDatabase
6.进行Test测试
由版本1跳到版本3的处理方法,根据 onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法参数的oldVersion和newVersion,写switch语句让不同的版本可以操作跳跃版本情况
保存数据到应用 程序私有的文件夹下
保存到公共的sd卡上
sharedpreferences保存
使用xml文件去保存
使用数据库保存
内容提供者(Content provider)
一、概述
sqlite较其它android数据保存方式,sqlite能保存大量的结构相同的数据支持标准的SQL语法
创建表
create table person( _id integer primary key autoincrement, name varchar(20), age integer);
增加一条记录
insert into person(name) values(‘tom‘, 25);
删除一条记录
delete from person where name = 'tom';
修改一条记录
update person set name = 'lisi' where name = 'tom';
查询数据
select * from person;
修改表结构
alter table person add balance integer;
google提供的api(CRUD)
google提供的CRUD的API很重要的一个特点是:每一个操作都有返回值(返回对应的行号),就此可以判断数据操作是否成功。注意,每次使用了数据库后都要close()。
增加一条记录
SQLiteDatabase db = databaseHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", "zhangsan"); values.put("age", 4); long rowid = db.insert(“person”, null, values);
删除一条记录
SQLiteDatabase db = databaseHelper.getWritableDatabase(); db.delete("person", "personid<?", new String[]{"2"}); db.close();
修改一条记录
SQLiteDatabase db = databaseHelper.getWritableDatabase(); ContentValues values = new ContentValues(); //key为字段名,value为值 values.put(“name”, “zhangsan”); //下面把id为1的人删除掉 db.update("person", values, "personid=?", new String[]{"1"}); db.close();
查询数据
query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)方法各参数的含义:
table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。
columns:要查询出来的列名。相当于select语句select关键字后面的部分。
selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”
selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。
groupBy:相当于select语句group by关键字后面的部分
having:相当于select语句having关键字后面的部分
orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc;
limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。
SQLiteDatabase db = databaseHelper.getWritableDatabase(); //下面的参数依次是:表、选择的行、条件、条件替代符内容、groupBy、having、排序方式、limit Cursor cursor = db.query("person", new String[]{"personid,name,age"}, "name like ?", new String[]{"%zhang%"}, null, null, "personid desc", "1,2"); while (cursor.moveToNext()) { int personid = cursor.getInt(0); //获取第一列的值,第一列的索引从0开始 String name = cursor.getString(1);//获取第二列的值 int age = cursor.getInt(2);//获取第三列的值 } cursor.close(); db.close();
二、使用步骤
sqlite是内置的,通过继承SQLiteOpenHelper,就可以操作数据库,必须重写两个函数onCreate和onUpgradeonCreate只在创建时调用一次,而之后每一次的版本更新,都调用onUpgrade方法
数据库的使用步骤是:
1.新建工程后,创建一个类继承SQLiteOpenHelper类,并重写一个构造函数和两个方法
2.在DAO层中创建SQLiteOpenHelper类,并调用sqlite.getWritableDatabase()方法,获取SQLiteDatabase
3.当版本需要变更时,需要修改程序中的构造方法,调整版本参数(最后一位参数)
public MySqliteOpenHelper(Context context) { super(context, "sky.db", null,1); }
4.为sqlite加入增删改查方法
5.关闭SQLiteDatabase
6.进行Test测试
三、版本问题
版本跳跃问题由版本1跳到版本3的处理方法,根据 onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法参数的oldVersion和newVersion,写switch语句让不同的版本可以操作跳跃版本情况
四、数据库事务
数据库事务,一个事务的流程是:1.明确事务,2.开始这个事务,3.结束事务。事务如果只开始不结束,就回滚(即不执行事务中对数据的操作)。//开始事务 db.beginTransaction(); try { Update account set money=money-100 where name=’aaa’; Update account set money=money+100 where name=’bbb’; db.execSQL("update account set money=money-100 where name='aaa'"); int i = 1/0; db.execSQL("update account set money=money+100 where name='bbb'"); db.setTransactionSuccessful(); } finally { //只有下面的方法执行,事务才会完成,否则回滚 db.endTransaction(); }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件