android数据存储读取4:Sqlite(CRUD)
来源:互联网 发布:java注释规范 编辑:程序博客网 时间:2024/05/29 16:54
在android中使用数据库,可以使用sql语句,也可以使用android对sql封装的api。
android对sql封装的api的操作添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。
Android对数据库操作可以分为几个主要的部分
(1)数据库帮助类
/**
* 数据库帮助类, 用于创建和管理数据库的.
*/
public class PersonSQLiteOpenHelperextends SQLiteOpenHelper {
privatestatic final String TAG = "PersonSQLiteOpenHelper";
/**
* 数据库的构造函数
* @param context
*
* name 数据库名称
* factory 游标工程
* version 数据库的版本号 不可以小于1
*/
public PersonSQLiteOpenHelper(Context context) {
super(context,"test.db", null, 1);
}
/**
* 数据库第一次创建时回调此方法.
* 初始化一些表
*/
@Override
public void onCreate(SQLiteDatabase db) {
// 操作数据库
String sql = "create table person(_id integer primary key, name varchar(20), age integer);";
db.execSQL(sql);// 创建person表
}
/**
* 数据库的版本号更新时回调此方法,
* 更新数据库的内容(删除表, 添加表, 修改表)
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,int newVersion) {
if(oldVersion == 1 && newVersion == 2) {
Log.i(TAG,"数据库更新啦");
// 在person表中添加一个余额列balance
db.execSQL("alter table person add balance integer;");
}
}
}
第二次调用这个帮助类的构造方法的时候,如果这里的版本号传2,那么这个时候会调用update方法。在表中插入一个新的列。public PersonSQLiteOpenHelper(Context context) {
super(context, "test.db", null, 2);
}
(2)实体类
实体类在使用的时候
2.1 创建get set 方法 2.2 创建构造方法 2.3 创建tostring方法
(3)数据库操作类
public PersonDao(Context context) {
mOpenHelper =new PersonSQLiteOpenHelper(context);
}
/**
* 添加到person表一条数据
* @param person
*/
public void insert(Person person) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
if(db.isOpen()) {// 如果数据库打开, 执行添加的操作
// 执行添加到数据库的操作
db.execSQL("insert into person(name, age) values(?, ?);",new Object[]{person.getName(), person.getAge()});
db.close(); // 数据库关闭
}
}
/**
* 更据id删除记录
* @param id
*/
public void delete(int id) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase(); // 获得可写的数据库对象
if(db.isOpen()) {// 如果数据库打开, 执行添加的操作
db.execSQL("delete from person where _id = ?;",new Integer[]{id});
db.close(); // 数据库关闭
}
}
/**
* 根据id找到记录, 并且修改姓名
* @param id
* @param name
*/
public void update(int id, String name) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
if(db.isOpen()) {// 如果数据库打开, 执行添加的操作
db.execSQL("update person set name = ? where _id = ?;",new Object[]{name, id});
db.close(); // 数据库关闭
}
}
public List<Person> queryAll() {
SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 获得一个只读的数据库对象
if(db.isOpen()) {
Cursor cursor = db.rawQuery("select _id, name, age from person;",null);
if(cursor !=null && cursor.getCount() > 0) {
List<Person> personList = new ArrayList<Person>();
int id;
String name;
int age;
while(cursor.moveToNext()) {
id = cursor.getInt(0);// 取第0列的数据 id
name = cursor.getString(1);// 取姓名
age = cursor.getInt(2);// 取年龄
personList.add(new Person(id, name, age));
}
db.close();
return personList;
}
db.close();
}
returnnull;
}
/**
* 根据id查询人
* @param id
* @return
*/
public Person queryItem(int id) {
SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 获得一个只读的数据库对象
if(db.isOpen()) {
Cursor cursor = db.rawQuery("select _id, name, age from person where _id = ?;",new String[]{id +""});
if(cursor !=null && cursor.moveToFirst()) {
int _id = cursor.getInt(0);
String name = cursor.getString(1);
int age = cursor.getInt(2);
db.close();
return new Person(_id, name, age);
}
db.close();
}
returnnull;
}
数据库的增删改查 方法。注意其中 数据库的select方法使用的是rawQuery(4)测试类
利用Android API实现Sqlite数据库操作
public PersonDao2(Context context) {
mOpenHelper =new PersonSQLiteOpenHelper(context);
}
/**
* 添加到person表一条数据
* @param person
*/
public void insert(Person person) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
if(db.isOpen()) {// 如果数据库打开, 执行添加的操作
ContentValues values = new ContentValues();
values.put("name", person.getName());// key作为要存储的列名, value对象列的值
values.put("age", person.getAge());
long id = db.insert("person","name", values);
Log.i(TAG,"id: " + id);
db.close(); // 数据库关闭
}
}
/**
* 更据id删除记录
* @param id
*/
public void delete(int id) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase(); // 获得可写的数据库对象
if(db.isOpen()) {// 如果数据库打开, 执行添加的操作
String whereClause = "_id = ?";
String[] whereArgs = {id + ""};
int count = db.delete("person", whereClause, whereArgs);
Log.i(TAG,"删除了: " + count + "行");
db.close(); // 数据库关闭
}
}
利用Android提供的API我们可以不用关注sql语句如何书写,只关注我们需要实现的业务逻辑即可。这里有个ContentValue要注意下
ContentValues 和HashTable类似都是一种存储的机制 但是两者最大的区别就在于,contenvalues只能存储基本类型的数据,像string,int之类的,不能存储对象这种东西,而HashTable却可以存储对象。
说明白一些ContentValues 就是一种数据的类型。
- android数据存储读取4:Sqlite(CRUD)
- Android 数据存储与读取:SQLite
- Android 数据存储与读取:SQLite
- Android 数据存储与读取:SQLite
- Android 数据存储与读取:SQLite
- Android 数据存储与读取:SQLite
- android数据存储--SQLite
- Android数据存储---SQLite
- Android数据存储-SQLite
- android-数据存储sqlite
- Android---数据存储SQLite
- Android 数据存储----SQLite
- android SQLite 数据存储
- Android SQLite数据存储
- android SQLite的CRUD
- Android-SQLite的CRUD
- Android入门——数据存储之SQLite存储读取图片
- 【Android】数据存储之SQLite
- EXT 隐藏TBAR
- REST框架简介
- 相关sql
- android启动模式对于体验的影响
- 沙盒机制和文件(二)
- android数据存储读取4:Sqlite(CRUD)
- JS事件:target与currentTarget区别
- swift2.0_语法改动详细说明
- Qt Creator 快捷键
- Bash shell的构成
- oracle学习笔记---用户管理
- 重写isEqual方法和hash方法
- http 状态码
- 调整android模拟器窗口大小