android之数据存储2

来源:互联网 发布:华东医院数据库 编辑:程序博客网 时间:2024/05/22 10:40
SQLite数据库SQLite数据库
定义:一种轻量级的数据库,支持结构化查询语言
1.SQLiteOpenHelper

* 定义一个MySQLiteHelper类
* 步骤:
* (1)写一个类继承SQLiteOpenHelper
* (2)重写构造方法
* 构造方法里面有4个参数:
* <1>上下文对象
* <2>数据库名字
* <3>数据库游标工厂类---这个不需要指定,给一个null值就好了
* <4>数据库的版本号
* (3)重写两个默认(总共4个)的方法
* onCreate() 在此方法中调用创建表格的sql语句
* db.execute(create语句);
* onUpgrade() 数据库版本升级调用此方法

方法:
①onCreate():当第一次运行时调用此方法,如果数据库已存在则不调用,不存在则调用,一般写一些创建数据库的语句
②onUpgrade():当数据库版本升级后会调用此方法,版本号从1开始,然后2,3...,一般会执行删除表等操作
③onDowngrade():当数据库版本降级后调用此方法
④onOpen():当打开数据库后会调用此方法

数据库已存在在哪里看?
数据库存放的目录: /data/data/包名/databases/数据库名


/**
* 在activity中调用数据库的步骤:
* (1)实例化MySQLiteHelper类
* (2)调用helper.getWritableDatabase()方法
* 或者helper.getReadableDatabase()方法
*/


2. sql 增删改查
要对数据库进行操作要先得到对象SQLiteDatabase db = myDBHelper.getWritableDatabase();
insert into 数据表 values ('001','Tom','1993-09-9','55');
"delete from 数据表 where 条件表达式"
update 数据表 set 字段名=字段值 where 条件表达式
"select * from 数据表 where 字段名=字段值 orderby 字段名 [desc] "
"select 字段名 from 数据表 where 字段名=字段值 orderby 字段名 [desc] "


事务
为什么要使用事务?
应用程序初始化时需要批量的向sqlite中插入大量数据,单独的使用for+insert方法导致应用响应缓慢,因为 sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作。比如:我的应用初始5000条记录也就是要5000次读写磁盘操作。直接for+insert插入不能保证所有数据都能同时插入。(有可能部分插入成功,另外一部分失败。)
db.beginTransaction(); //手动设置开始事务
db.setTransactionSuccessful(); //设置事务处理成功,不设置会自动回滚不提交
db.endTransaction(); //处理完成(在finally里面调用)

代码演示:
try {
//开启事务
db.beginTransaction();
db.execSQL("update dog set age=10 where _id=2");
db.execSQL("update dog set age=20 where _id=3");
//设置事务标志为成功,当结束事务时就会提交事务
db.setTransactionSuccessful();
} catch (SQLException e) {
e.printStackTrace();
}finally{
//结束事务
db.endTransaction();
}



2.SQLiteDatabase
作用:该类封装了一些执行SQL命令的方法,比如insert、query、exeSQL等
(1)insert(String table,String nullColumnHack,ContentValues values)
参数:
table:数据库中的表名
nullColumnHack:指定默认插入字段,为null时能插入数据
values:表示插入字段所对应的值,使用put方法
还原成SQL语句:Sql=INSERT INTO tableName(_id,name) VALUES(1,'TOM');

(2)delete(String table, String whereClause, String[] whereArgs)
参数:
table:数据库的表名
whereClause:where子句,比如:_id=?
whereArgs:where子句中?的值
还原成SQL语句:Sql=DELETE FROM tableName WHERE _id=1

(3)update((String table, ContentValues values, String whereClause, String[] whereArgs))
参数:
table:数据库的表名
values:代表要修改的值,修改方法还是put(key,values)
whereClause:条件子句,比如id=? and name=?
whereArgs:为whereClause中的?赋值,比如:new String[]{"1","张三"}
还原成SQL语句:Sql= UPDATE tableName SET _id=1,name='张三' WHERE _id=2

(4)query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

参数:
distinct:结果集无重复
table:指的是表名
columns:所要查询的字段
selection:查询条件,比如id=? and name=? 可以为null,例如:id=? and name=?
selectionArgs:给出条件子句的值,即?部分,例如:new String[]{1,'张三'}
groupBy:给查询结果分组
having:为组设置having(为分组增加条件筛选)
orderBy:对查询结果进行排序,NULL为默认排序
limit:返回固定结果的条目数,即分页

返回值:
Cursor:返回一个结果集,内置移动游标等方法,获取结果集中的值
使用Cursor步骤:
①取值之前要移动游标,一般为moveToFirst
②获取值getXXX(int columnIndex)
③ columnIndex = curcor.getColumnIndexOrThrow("字段名")
④cursor游标用完后要记得关闭 cursor.close();


3.SimpleCursorAdapter展示查询到的数据
1.找到ListView
ListView lv = (ListView) findViewById(R.id.lv);
2.查询数据放置在Cursor里面
Cursor cursor = db.query("manager", null, null, null, null, null, null);
3.new一个SimpleCursorAdapter
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
MainActivity.this, android.R.layout.simple_list_item_2, cursor,
new String[] { "name", "number" }, new int[] {
android.R.id.text1, android.R.id.text2 });
4.设置adapter
lv.setAdapter(adapter);



扩展:
// 判断是否联网
public static boolean isNetworkConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager
.getActiveNetworkInfo();
if (mNetworkInfo != null) {
return mNetworkInfo.isAvailable();
}
}
return false;
}


//添加缓存
public static void addCache(String id){
Cursor cursor = db.query("cache", null, null, null, null, null, null);
if (cursor.getCount() == 0) { //添加数据进入数据库之前要先判断该数据是否已经在数据库中,如果不在的话,则添加到数据库中,在的话,则不需要添加到数据库中。
flag = true;
} else {
while (cursor.moveToNext()) {
if (cursor.getString(cursor.getColumnIndex("id")).equals(id)) {
flag = false;
break;
} else {
flag = true;
}
}
}
if (flag) {
//把要缓存的数据添加到数据库中
}
}
0 0
原创粉丝点击