安卓基础3:数据库和ListView
数据库
常用数据库:
Mysql
sqlserver
SQLite(轻量级 嵌入内置)
android中数据库的适用范围:
有大量结构相同的数据存储时,查询速度非常快;
数据库的创建:
1、 创建一个类继承SQLiteopenHelpr
2、 实现oncreate方法
数据库第一次创建的时候调用,特别适合做表结构的初始化
db.execSQL(create table info(id integer,name varchar(20)));
3、 实现onupergrade方法
数据库升级的时候
Db.execSQL(alerttable info add phone varchar(20));
4、 添加一个构造方法
Super(context,”user.db”,null,1);// 上下文,存储的database名字,,版本号
5、 创建一个帮助类的对象,调用getReaableDatabale即可创建一个数据库
MyOpnHelper myOpenhelper= new MyOpnHelper();
SQLiteDatabasedb = myOpenhelper.getReadableDatabase();
代码:
getReadableDatabase vs getWriteableDatabase
getReadableDatabase:首先会调用getWriteableDatabase方法以读写方式打开数据,如果存放数据库的磁盘空间满了,就会以读写方式打开失败;那么就会以只读方式打开数据库
getWriteableDatabase:直接以读写方式打开数据库,如果磁盘空间满了就直接报错了;
数据库操作:增删改查:
方法一:
2、 通过帮助类对象创建一个获取操作库操作对象SQLiteDatabases
3、 通过SQLiteDatabases中的excesql()可以执行增删改操作‘
4、 通过sqliteDatabases中的rawQuery()可以查询结果集
通过结果集可以遍历获取表中的内容
缺点:直接写SQL语句容易写错
增删改没有返回值,无法确定是否执行成功。
注意:数据库版本2.33可升可降。4.1只能升。
代码:
界面
事物处理:
点击方法
数据库对象:
方法二:
1、 创建一个帮助类的对象
2、 通过帮助类对象创建一个获取操作库操作对象sqliteDatabases
3、 通过sqliteDataBases中的insertdelete update query方法可以直接窒执行
优点:写sql语句不容易出错,增删改有返回值
缺点:查询不灵活,尤其是多表查询
数据库中的事物:
要么多条sql语句同时成功执行,要么失败;
代码
增删改查:方法一 vs 方法二vs “JDBC”
增:
法一:db.execSQL(“insertinto info values(name,phone) values(?,?)”,new object[]{user.name,user.phone})
法二:
JDBC:
Sql=”insertinto info values(?,?)”
pstmt=conn. prepareStatement(Sql);
pstmt.setString(user.name);
pstmt.setString(user,phone)
pstmt.executeQuerry();
删:
法一:db.execSQL(“deletefrom info where name = ?“ new Object[](user.name));
法二:db.delete(“info”,”name= ?”,new String[]{user.name})
JDBC:
Sql=”deletefrom info where name= ?”
pstmt=conn. prepareStatement(Sql);
pstmt.setString(user.name);
pstmt.UpdateQuerry();
改:
法一:
法二:
JDBC:
Sql=”updateinfo set name= ?,phone = ?”
pstmt=conn. prepareStatement(Sql);
pstmt.setString(user.name);
pstmt.setString(user.phone);
pstmt.UpdateQuerry();
查:
法一:
法二:
JDBC:
Sql=”select*from info where name = ?”
pstmt=conn. prepareStatement(Sql);
pstmt.setString(user.name);
resultSetrs= pstmt.executeQuerry();
通过adb去操作数据库
数据库的事务:
这里通过在按钮上布置了transaction()方法调用该方法。
listView
listView是安卓中的一个特殊的控件;
五大布局:Button,TextView,EditText,CheckBox,ImageView
LisetView创建
1、 在布局文件中写一个ListView控件
2、 创建一个类继承BaseAdapter实现4个方法,getcount,getview是必须实现的,
a) getcount:告诉listview要展示多少条目
b) getview:告诉listview每个条目要显示的内容,屏幕每显示一条数据就会调用一次
3、 创建一个Adapter对象,设置给listview做数据显示
代码:
1、 设置界面
2、 事务处理
*练习
代码:
界面:
事物处理:
Listview优化
在getView方法中会传递过来一个convertView对象,我们可以服用该对象getView的返回对象,但是在使用前需要判断对象是否为null,如果不为空则直接使用,如果为空则手动返回对象
Lisetview显示原理
1、 首先知道listview显示的条数,getcount
2、 Listview中显示的内容,getview
3、 要知道listview中每个条目的高度,要知道一屏显示多少条
4、 要监听listview的滑动,一出一个旧的条目,显示一个新的条目
注意:ListView如果布局不是充满屏幕,则它会自动去尝试占满整个屏幕,后果是多开辟好多个listView;
网易新闻练习:
1、 在不居中写ListView
2、 写一些新闻的模拟数据,以list集合bean
3、 把数据设置给adapter适配器,适配器去给listview做展示
4、 定义一个显示新闻的布局作为适配器getview方法做返回内容
5、 找到listView设置adapter适配器
6、 设置listview每个条目的点击事件,点击后跳转到新闻
界面:
代码
界面
Listview界面:
Listview内部内容:
事物处理:
数据层:
注意:
1、getItem的理解:我去获取position位置所对应的bean对象里面的内容