1 数据库介绍
sqlite
什么情况下使用数据库
有大量相似结构的数据需要存储的时候
2 数据库的创建
定义一个类继承sqliteOpenhelper
OpenHelper用于打开数据库
重写抽象方法
/**
*
* @param context sa
* name:数据库的明字
* factory 目的创建cursor对象
* version 数据库的版本 从1开始
*/
public MyOpenHelper(Context context){
super(context,"suzuna.db",null,1);
}
创建OpenHelper的对象
MyOpenHelper helper = new MyOpenHelper(getApplicationContext());
调用
.getWritableDatabase();
方法打开或者创建数据库,如果是第一次调用就是创建数据库,如:
SQLiteDatabase database = helper.getWritableDatabase();
调用
.getReadableDatabase();
方法打开或者创建数据库,如果是第一次调用就是创建数据库,如果磁盘满了则返回只读的数据库对象,如:
SQLiteDatabase database = helper.getReadableDatabase();
SQLiteDatabase 对象提供管理操作数据库的方法
默认构造器
3 数据库的OnCreate方法和OnUpgrade方法
OnCreate :当数据库第一次创建的时候被调用,这个方法特别适合做表结构的初始化
需要使用sql语句创建表
id 一般以下划线_ 开头
db.execSQL( "create table info (_id integer primary key autoincrement , name varchar(20) )" );
生成的db文件使用SQLite Expert Professional 打开
OnGrade:当数据库的版本被升级时,该方法会被调用
该方法适合用于表结构的更新
例如给数据表增加一列信息,执行以下sql语句
db.execSQL("alter table info add phone varchar(20)");
打开db文件时同目录下必须有wal和shm文件否则读取不到数据库的内容(
4 使用sql语句对数据库进行增删查改
在SQLite Expert Professional的SQL界面中输入执行
插入数据 insert into info(name,phone) values ('www','1377770')
修改数据 update info set phone = '2313123' where name = 'www'
查询数据 select name,phone from info 从info表中查询name和phone列
或者 select * from info 从info表中查询所有的列
还可以限制查询的哪一行的范围
返回一个cursor对象,可以对数据库表进行遍历查询
删除数据 delete from info where name='www' 从info表中删除名为www的信息
SQL参数占位符 -> ? 而后使用数组来按位替换
对数据库内容进行操作可以直接编写sql语句执行,也可以直接使用Google工程师提供的APi的方法来对操作数据库
缺点:1 sql语句容易写错
2 执行sql语句没有返回值,不容易进行判断
优点:容易进行多表查询
补充:
使用命令行工具 Sqlite3 可以打开数据库
输入sql命令进行数据库操作
改变dos的编码方式 chcp 936 改编成GBK编码
改变dos的编码方式chco 65001 改变成utf-8编码
5 使用谷歌封装好的api对数据库进行增删查改
调用SqlitDatabase对象的方法进行操作
增加一条记录
db.insert(table,nullColimnHack,values);
table : 表的名字
nullComlimnHack 可以为null
ContentValues 内部封装了一个map 其中map的key是要插入列的名字,value是插入这一列的值
ContentValues values = new ContentValues();
values.put(name,values);
....
返回值代表插入成功后新一行的id,数据类型是long
删除记录
db.delete(tablename,whereClause,WhereArg);
"name=?"
更新记录
db.update(table,values,whereClause,whereArgs);
返回删除了的 int 行数
查询记录
Cursor c = db.query(...)
方法底层是对传入的参数进行组拼sql
优点:写法简单 不需要复杂的sql语句 不容易出错 有返回值可以进行判断是否操作成功
缺点:如果有多张表使用谷歌封装好的api不容易进行查询
6 2种增删查改的优缺点
7 Android中数据库的事务介绍
事务:执行一段逻辑,要么全成功,要么失败
调用方法
db.beginTransition()
使用谷歌提供的模板进行编写业务逻辑,若逻辑中发生错误则自动回滚到执行之前,否则执行成功。
8 listview的入门
0 在布局中定义listView
1 通过id找到控件
findViewById
2 显示数据 和普通的控件不一样,数据来源于数据适配器ListAdapter
ListViewAdapter 是接口,不能直接使用,因此可以自己实现或者使用他的实现类
例如可以继承自BaseAdapter并实现四个抽象方法
1 定义listView的数据适配器
2 实现baseAdapter的getCount方法和getView方法
getCount方法负责控制要显示的条目的数量
getView方法负责控制每一个条目要以什么控件显示
3 为listView设置适配器
9 listview的优化
listView的getView方法当条目进入屏幕被显示时才会被调用,但是如果条目被大量的快速显示,就会发生内存溢出报错,因为新建的View对象还没有来得及被清理,程序停止运行
这时候需要使用 converVew参数,他代表了之前使用过的View,叫做历史缓存对象,如果为空,也就是第一次显示,则只能创建一个新的View来显示内容,而之后要显示的内容就可以直接使用 ConverView而不用重新创建,从而避免因为创建太多View对象导致的内存溢出
10 listview显示数据的原理
MVC
javaweb:
M:mode 数据
V:View 视图 jsp
C:controller 控制器 servlet
Android:
M:mode 数据(javaBean)
V:View listView
C:adapter 适配器
listView的高最好要匹配父空间
11 listview显示复杂的页面
根据需要显示的界面编写成一个布局文件,然后通过打气筒api将这个布局文件变成View 文 件,然后在getView方法中返回作为listView条目显示
线性布局 相对布局都继承自ViewGroup,说明这些组件都可以有自己的子布局,在里面可以放 其他组件和子布局,而不是继承自ViewGroup的控件如TextView等不能在里面放其他控件
使用View.inflate的方法
12 获取打气筒常用api
获取打气筒服务的方法
1。 View v = View.inflate()
2. View view = LayoutInflater.from().inflate()
3. LayoutInflater inflater = getSystemService(LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate();
13 arrayAdapter使用
1 定义listView
2 声明Adapter
如 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.item,objects)
item是用于显示列表项数据的布局文件
3 设置适配器
14 simpleAdapter使用
1 定义listView
2 准备好需要的数据,List<? extends Map<String,?>> data
2 声明Adapter
如 SimpleAdapter adapter = new SimpleAdapter(context,data,resource,from,to);
context 是listView所在的上下文
data是需要显示的数据,他是一组map对象的集合
resource是列表项item的布局文件
from是String[] 存放map对象中键值对的键
to 是int[] 存放item里面每个组件的id,id对应着键,用于显示该键对应的内容
item是用于显示列表项数据的布局文件
3 设置适配器
15 把数据库的数据查询出来展示到listView上
0 找到lv
1 从数据库中把数据查询出来,封装到javabean中
2 把javabean的数据显示到listview上
3 设置数据适配器
16 总结
数据库如何创建
定义一个类继承SqliteOpenHelper
sqliteDatabase;操作数据库
oncreate方法:当数据库第一次创建时调用,适合做数据库表的初始化
onupgrade方法:当数据库版本进行更新时被调用
第一种方式对数据库进行增删查改
传统的sql语句
谷歌工程师给我们提供操作数据库的api 掌握
命令行工具可以打开数据库 sqlite3 练习
数据库的事务,练习
listview 显示数据 掌握
baseAdapter 掌握
获取打气筒的常见api 掌握
1 View.inflate
2 LayoutInflater.from(...).inflate()
3 LayoutInflater inflater = context.getSystemService(LAYOUT_INFLATE_SERVICE);
view = inflater.inflate(...);
ArrayAdapter 掌握
simpleAdapter 了解