note_3

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 了解

猜你喜欢

转载自www.cnblogs.com/suzuna/p/11182638.html
今日推荐