简单数据库操作
- 查询
- 查询全部:
select * from 表名
- 查询一个条件:
select * from 表名 where 条件
- 查询多个条件:
select * from 表名 where 条件 and 条件……
- 查询指定字段:
select 字段,字段…… from 表名
- 查询指定字段并以别名显示:
select 字段 as 别名 from 表名
- 查询并且某个字段倒叙:
select * from 表名 order by 字段 排序方式
- 注:排序方式为DESC是倒序,ASC是正序
- 查询并且只取前N个:
select 字段 from 表名 limit N
- 查询指定区间数据:
select 字段 from 表名 limit M,N
,其中M是偏移量,N是查询数目
- 实现分页查询:第几页数据=limit (页数-1)*页面数据个数,页面数据个数
- 查询后N个数据:
select * from 表名 order by 字段 排序方式 limit N
- 条件为或者:
select * from 表名 where 条件 or 条件
- 查询全部:
- 增加
- 插入数据:
insert into 表名 (字段,字段……) values (数据,数据)
- 插入数据:
- 修改
- 修改数据:
update 表名 set 字段=数据,字段=数据…… where 条件
- 修改数据:
- 删除
- 删除数据:
delete from 表名 where 条件
- 删除数据:
Android中数据库操作方法
- SQLiteDatabase,它是在Android中唯一一个操作数据库的类!
- 如何打开一个已经存在的数据库
SQLiteDatabase openDatabase (String path,SQLiteDatabase.CursorFactory factory,int flags)
- SQLiteDatabase具体的CRUD语句
- 少参,CRUD语句(使用Sqlite语句操作)
- 查询方法(有返回值)
db.rawQuery();
- 返回值为Cursor对象
- 删填改方法(没有返回值)
db.execSQL(String SQL ,new Object []{});
- db.execSQL和db.rawQuery相同点和不同点:
- 相同点:
- 都是SQLiteDataBase的方法
- 他们是少参的的方法
- 都执行的是SQLite语句
- 不同点:
- rawQuery有返回值,而execSQL没有返回值
- 占位符不同,rawQuery是
new String []
,而execSQL是new Object []
- 作用范围不同,rawQuery只作用于查询语句,而execSQL作用于增删改语句
- 相同点:
- 查询方法(有返回值)
- 多参,CRUD语句(集成方法拼接条件,可以防止注入攻击)
- 查询
db.query(参数1,参数2,参数3,参数4,参数5,参数6,参数7)
/*
*参数1: 表名
*参数2: 要查询的列名 new String []{} 如果填null 代表全查
*参数3: 查询条件 不需要写关键字 如果是两个条件或者更多需要自己用 and拼接
*参数4: 条件的占位符 new String []{}
*参数5:分组 null代表不分
*参数6: null
*参数7: 排序 order by [xxxx]
*/
- 添加
insert(参数1,参数2,参数3);
/*
*参数1: 表名 要添加数据的表名
*参数2:是否添加空字段 null
*参数3:要添加的值 列名
*/
- 删除
int rowCount = db.delete(参数1,参数2,参数3);
/*
*参数1: 表名
*参数2: 条件
*参数3: 占位符 new String []{}
*返回值 int 删除了多少行
*/
- 修改
int rowCount = db.update(参数1,参数2,参数3,参数4);
/*
*参数1: 表名
*参数2: 更新的值 ContentValues key更新的字段 values更新的值
*参数3: 条件
*参数4: 占位符
*返回值: 修改的行数
*/
- 查询
- 少参,CRUD语句(使用Sqlite语句操作)
- 新创建一个数据库(SQLiteOpenHelper)
- 创建一个类继承 SQLiteOpenHelper
- 重写三个方法
- 构造方法(创建数据库)
- onCreate(创建表)
- onUpgrade(版本更新,如果修改字段,要第一时间修改版本号)
- 在要创建数据库的类中调用帮助类
- 调用帮助类的方法会返回SQLiteDataBase,在调用这两个方法的时候 才会进行数据库创建工作!
- SQLiteOpenHelper.getReadableDatabase()
- SQLiteOpenHelper.getWritableDatabase()
- 两个方法的相同点:
- 两个方法都得到SQLiteDataBase对象,都可以对数据库进行读写操作
- 两个方法的不同点:
- 当磁盘(手机内置存储)满了,getReadableDatabase()得到的db就不会再往数据库中写内容
- getWritableDatabase()得到的db不管磁盘满不满,都会尝试去写,直到报错为止
- 通常使用getReadableDatabase()
- 利用返回SQliteDataBase进行操作数据库
Cursor,一种数据的类型
- 类似于数据库的表结构。内部包含一个游标指向,第一次默认是不指向数据!
- 游标移动
- moveToFirst():移动到第一条
- moveToNext():移动到下一条
- moveToPosition(int positon):移动到指定的条目
- moveToLast():移动到最后一条
- moveToPrevious():向上移动
- Cursor取值
- get类型(int ColumnIndex):根据列位置取值
- getColumnIndex(String ColumnIndex):根据列名取第几列
- getColumnName(int index):根据列位置取列名
- getColumnCount():获取有多少列!
Cursor结合SimpleCursorAdapter显示数据
//Cursor数据显示到ListView
/**
* ListView
* 1.AdapterView:ListView
* 2.Data:Cursor
* 3.Adapter:SimpleCursorAdapter
* 参数1:上下文对象
* 参数2:单条布局
* 参数3:Data Cursor
* 注意:Cursor数据中,必须包含_id字段,不管是否显示
* 参数4:列的名字
* 参数5:列名对应值对应的,item内部控件的id一一对应
* 参数6:自动刷新,当数据改变以后,它会自动刷新 配合装载器使用
*/
SimpleCursorAdapter adapter = new SimpleCursorAdapter(参数1,参数2,参数3,参数4,参数5,参数6);
//当前在ListActivity
//调用setListAdapter就可以给ListActivity内部ListView设置Adapter
setListAdapter(adapter);
数据事务的使用
- 事务:一系列动作的集合!
- 特点:如果一系列动作全部成功,那么事务就成功!如果有一个失败,事务就失败!内的所有动作就失败!
- 写法:
db.beginTransaction();
try {
1. 动作
2. 动作
3. 动作
4. 动作
db.setTransactionSuccessful();
} finally {
db.endTransaction();
} - 事务包含三个方法:开启、成功、结束
- 开启和结束是肯定会执行的!
- 但是成功不一定会执行!