Androi基础 第三天

数据存储

文件存储
sharedPerference
数据库
数据库需求

有很多结构类似的数据,增删改查.
Sqlite

开源项目,c,嵌入式轻量级数据库.
数据库的创建

1,创建一个类继承 SQLiteOpenHelper
2,在oncreate方法里面创建一张表 db.execSQL去创建一张表
3, 生成数据库文件
public class MyDataBaseOpenHelper extends SQLiteOpenHelper {

/**
 * @param context  上下文
 * @param test.db 数据库文件的名称
 * @param null 默认游标工厂 从数据库文件的头部开始的
 * @param 1 version 数据库的版本号 最小是1
 */
public MyDataBaseOpenHelper(Context context) {
    super(context, "test.db", null,1);
    // TODO Auto-generated constructor stub
}

  当数据库第一次被创建的时候调用的方法.这个方法只会执行一次, 
  一般在这个方法里面初始化数据的表结构.

@Override
public void onCreate(SQLiteDatabase db) {


    System.out.println("数据库 oncreate");

    db.execSQL("create table student (_id integer primary key autoincrement, name varchar(20), sex varchar(30) )");
}
/**
 * 当数据库需要被更新的时候调用的方法
 * 数据库只能升级不能降级
 * @param oldVersion 旧的数据库的版本
 * @param newVersion 新的数据库的版本
 */
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {


}
}


然后在activity里面创建数据库文件
MyDataBaseOpenHelper helper = new MyDataBaseOpenHelper(this);
//下面这一行代码执行了 数据库才会被创建
SQLiteDatabase db = helper.getReadableDatabase();

数据库的创建 oncreate方法调用几次 (一次)

onUpgrade方法什么时候调用? (版本号发生变化的时候)

在new SqliteOpenHelper的时候数据库文件会被生成吗? (不会)

那么什么时候生成? (helper.getWritableDatabase(),或者hepler.getReadableDatabase())

数据库文件在哪里? /data/data/databases

数据库的增删改查

sql语句的方式,对数据库进行增删改查

insert into student (name,phone) values (‘张三’,’110’)

delete from student where name=’张三’

update student set phone =’119’ where name=’张三’

select * from student where name=?
用android API的方式增删改查(推荐)
用最普通的sql语句和用android提供的api查询修改数据有什么区别? (一个是有返回值的,一个没有!!)

ContentValues values =new ContentValues();
values.put(“name”, name); //key “name” 代表着数据库表中的列明,value 就是对应的插入进去的值
values.put(“sex”, sex);
//student 参数1,是要插入数据的表名 ,参数2 null 表示着当数据为空的时候,在列里面显示大写的NULL,表示一个空数据
long result = db.insert(“student”, null, values); //组拼sql语句实现的.带返回值

扩展一下:
1,数据库事务的使用,可以试验一下开启事务和不开启事务插入1000条数据的时间差异。
2,可以试试在用另一个类继承SqliteOpenHelper,去使用一下,看能不能创建多个数据库?
3,怎么用命令查看自己的数据库信息?首先用adb shell进入模拟器,然后用 cd /data/data/包名/databases/ 最后sqlite3 ** (数据库文件名字)

SQLiteDatabase db = helper.getWritableDatabase();
//参数1,表明 参数2,条件语句 参数3,条件参数的值
int result = db.delete(“student”, “name=?”, new String[]{name});

ContentValues values = new ContentValues();
values.put(“sex”, newsex);
//参数1,表名 参数2,更改的数据 参数3,条件参数的值 参数4 ,条件值
int result = db.update(“student”, values, “name=?”, new String[]{name});

//参1 表名,参2 要查询的列名,参3 条件语句,参4 条件的值 ,参5 groupBy 分组, having 分组之后在过滤, orderBy 排序
Cursor cursor = db.query(“student”, new String[]{“sex”}, “name=?”, new String[]{name}, null, null, null);
boolean result = cursor.moveToNext();
if(result){
sex = cursor.getString(0);
}
数据库事务:保证一组操作要么同时成功,要么同时失败.

SQLiteDatabase db = helper.getWritableDatabase();
db.beginTransaction(); // 开启事务
try {
// 模拟转账的操作
db.execSQL(“update account set money=money-100 where name=’zhangsan’”);
db.execSQL(“update account set money=money+100 where name=’lisi’”);
db.setTransactionSuccessful();// 设置事务执行成功

} finally {
    //在finally代码块里面执行,保证这段代码一定会执行
    db.endTransaction();
}

然后用android提供的api对数据库的数据进行增删改查

用最普通的sql语句和用android提供的api查询修改数据有什么区别? (一个是有返回值的,一个没有!!)
ContentValues values =new ContentValues();
values.put(“name”, name); //key “name” 代表着数据库表中的列明,value 就是对应的插入进去的值
values.put(“sex”, sex);
//null 表示着当数据为空的时候,在列里面显示大写的NULL,表示一个空数据
long result = db.insert(“student”, null, values); //组拼sql语句实现的.带返回值

扩展一下:
1,数据库事务的使用,可以试验一下开启事务和不开启事务插入1000条数据的时间差异。
2,可以试试在用另一个类继承SqliteOpenHelper,去使用一下,看能不能创建多个数据库?
3,怎么用命令查看自己的数据库信息?首先用adb shell进入模拟器,然后用 cd /data/data/包名/databases/ 最后sqlite3 ** (数据库文件名字)
doc窗口 cmd窗口修改编码

(utf-8)

chcp 65001
(gbk)

chcp 936
用线性布局,或者其他布局直接addView会有什么缺点?

占用太多的内存,导致程序内存溢出(OOM)异常
ListView

是系统给我们提供的一个可以显示很多个item的控件. 这个控件合理的控制了界面的显示,即使有1000000万个item要显示他也能扛得住
listview设计的思想是MVC

M: model 数据模型 对应的是activity下的List集合或者数组等。。
V: View 界面展现 对用的就是ListView本身
C: controller 控制器 对应的是各种Adapter
使用步骤

1,在布局xml文件声明listview控件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值