Android第二十六天SQLite数据库

常用数据库
1.SQL Servier   Microsoft  系统 iis
2. Oracle Oracle
3.MySQL Oracle    php+MySql+Linux 被oracle购买
4.DB2           IBM   小众  价格超高  数据库必须与机器配套  保证机器若干年不关机 并保证访问   用于 银行等
5.SQLite Oracle   本质是个文件  .db

数据库存储  SQLite:


一, 特点
轻量级  ,  绿色的  , 零配置 , 跨平台  ,  嵌入式
在程序的内部, 可以在任何位置通过数据库的名称访问数据库,但是程序以外的其他APP是无法通过数据库名称对其进行访问.
        路径:   data/data/应用程序包名/database/**

二, 数据类型
NULL 空值
INTEGER 整型
TEXT 文本字符串
FLOAT 单精度浮点型
DOUBLE 双精度浮点型
VARCHAR 可变长度的字符数据
BOOLEAN 布尔

DATETIME         日期时间

三, SQL语句
1, 创建表
   create table 表名(字段名 类型  primary key autoincrement, 字段名  类型....)
   create table users(_id integer primary key autoincrement,name varchar(50),age integer)
2, 插入数据
  insert into 表名(字段S)  values(值S)
  insert into users(name,age) values('小明',18)
3, 修改数据
  update 表名  set  字段名=值  where 字段 = 条件值
  update  users set age = 50 where _id=2
4, 查询数据
  select (字段S) from 表名  where  字段 = 条件值
  select (name,age) from users where _id=2
  //模糊查询
  select * from users where name like '%h%'
5, 删除数据
           delete from 表名 where 字段 = 条件值
  delete from users where _id=2

四, 操作数据库的核心类
1, SQLiteDatabase
管理和操作数据库
Context.optenOrCreateDatabase("qf.db",MODE_PRIVATE,null)
SQL 语句:
Void execSQL(String sql)    执行sql语句
Void execSql(String sql,Object[] bindArgs) 执行sql语句(占位符)
Cursor rawQuery(String sql, String[] selectionArgs) 查询数据库中符合要求的数据
Android 封装好的操作数据库的方法:
insert()   插入数据到指定的表中
update()   更改表中指定的数据
delete()   删除表中指定的数据
query()   查询表中指定的内容

2, SQLiteOperHelper
         用于数据库的创建和版本的更新
         2.1 作用:  初始化数据库
  升级数据库   打开数据库连接
       2.2 用法
step1:  定义一个类,继承SQLiteOpenHelpter
step2:  重写父类的两个方法
onCreate(SQLiterDatabase  db)   第一次创建数据库时调用, 只会被调用一次
onUpgrade(SQLiterDatabase  db,int oldVersion, int newVersion)  数据库的版本号发生变化后,执行此方法(可能会被执行多次)
step3:  提供构造方法

3, Cursor  作用类似于java中resultSet, 把查询的结果封装到Cursor对象中.
  cursor就像是一个结果级上的游标, 可以向上或向下移动
  默认游标位置在数据的上方
  coursor.getCount()   得到游标中的数据数量
  coursor.moveToNext() 游标移动到下一条数据, 并且判断下一条数据是否存在
  coursor.moveToPrevious() 游标移动到上一条数据, 并且判断上一条数据是否存在
  coursor.moveToFirst() 游标移动到第一条数据, 并且判断第一条数据是否存在
  coursor.moveToLast()   游标移动到最后一条数据, 并且判断最后一条数据是否存在
  coursor.moveToPosition(int position) 游标移动到某一条数据, 并且判断某一条数据是否存在
  coursor.move(int offset)   游标向上或者向下移动指定的行数, 正数代表向上,负数代表向下, 并且判断数据是否存在
取值:  corsor.getString(列的编号);   //编号是从0开始
       列的编号: corsor.getColumnIndex("name")


课堂案例:

创建数据库:

//1.创建一个数据库
/**
 * 参数一:name 表示 打开或创建的 数据库的名称
 * 参数二: 数据库的模式
 * 参数三:游标工厂  null Cursor
 */
SQLiteDatabase db = openOrCreateDatabase("yx1602a.db", MODE_PRIVATE, null);
//2.在数据库中创建一个表
//sql语句
String sql = "create table if not exists person(_id integer primary key autoincrement,name varchar(10),age integer(10),sex varchar(2))";
//执行sql语句
db.execSQL(sql);

获取操作数据库表的类:

//获取SQLiteOpenHelper 对象
SQLiteHelper sqLiteHelper = new SQLiteHelper(this);
//获取数据库表的操作类
//getReadableDatabase 先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库 
//getWritableDatabase 以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase() 方法就会出错。
db = sqLiteHelper.getReadableDatabase();

使用SimpleCursorAdapter:

/**
 *适配器: 专门用于查询数据库数据显示的 适配器
 *参数一:上下文对象
 *参数二:显示条目布局的id
 *参数三:游标对象
 *参数四: 游标对象的 colume的数组
 *参数五:显示对应列的key的值的 视图的id 集合
 *参数六:flag标记   自动更新 观察者模式
 *
 */
SimpleCursorAdapter adapter =  new SimpleCursorAdapter(this,R.layout.item_layout,cursor,new String[]{"name","age","sex"},new int[]{R.id.name_tv,R.id.age_tv,R.id.sex_tv},SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
//设置适配器
listView.setAdapter(adapter);
//更换数据源游标,相当于刷新数据
adapter.changeCursor(cursor);

添加数据,增:

//添加数据
//这个对象表示插入数据库数据的载体
ContentValues cv = new ContentValues();
//将值添加到对应的key  key 必须和 表中的colum字段匹配
cv.put("name", name);
cv.put("age", age);
cv.put("sex", sex);
long l = db.insert("student", null, cv);
//判断 当返回值大于0 的时候表示插入成功
if (l > 0) {
    //再次查询数据库表中的 全部数据
    Cursor cursor = db.query("student", null, null, null, null, null, null);
    //刷新适配器中的数据
    adapter.changeCursor(cursor);
    Toast.makeText(this, "插入数据成功", Toast.LENGTH_SHORT).show();
}

删除数据,删:

//删除数据
/**
 * 参数1 表名
 * 参数2 问句 条件语句
 * 参数3 条件语句的值
 * 返回值 结果
 */
int i = db.delete("student", "name = ?", new String[]{name});
//大于0 表示删除成功
if (i > 0) {
    //再次查询数据库表中的 全部数据
    Cursor cursor = db.query("student", null, null, null, null, null, null);
    //刷新适配器中的数据
    adapter.changeCursor(cursor);
    Toast.makeText(this, "删除数据成功", Toast.LENGTH_SHORT).show();
}

查询数据,查:

//查询数据
Cursor cursor = db.query("student", null, null, null, null, null, null);
//刷新适配器中的数据
adapter.changeCursor(cursor);

修改数据,改:

//修改数据
ContentValues values = new ContentValues();
values.put("age", age);
values.put("sex", sex);
//根据名字去更新其他的值
int upData = db.update("student", values, "name=?", new String[]{name});
//表示更新成功
if (upData > 0) {
    //查询数据
    Cursor cursor = db.query("student", null, null, null, null, null, null);
    //刷新适配器中的数据
    adapter.changeCursor(cursor);
    Toast.makeText(this, "更新成功了", Toast.LENGTH_SHORT).show();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值