3.1Android中,Sqlite轻量级数据库的使用
2015-08-18 08:27
513 查看
SQLite是轻量级的数据库,是遵循ACID(原子性、一致性、隔离性、持久性)的关联式数据库管理系统,多用于嵌入式开发,值得注意的是 integer primary key只能存储64位整数。
在Android中,提供了一个SQLiteOpenHelper的抽象类(此类已经加载驱动,实现了 连接数据库.),该类用于数据库版本进行管理,常用方法有:
onCreate 数据库创建时执行(第一次连接获取数据库对象时执行)
onUpgrade 数据库更新时执行(版本号改变时执行)
onOpen 数据库每次打开时执行(打开数据库时调用,在前两个方法之后)
第1步:创建一个PersonSQLiteOpenHelper继承SQLiteOpenHelper,数据库帮助类,用于创建和管理数据库的
第2步:创建一个person实体类,便于操作数据库的增删改查
第3步:对“人”的表的数据库进行增删改查的操作
获得数据库的读写对象,判断数据库是否打开,执行增删改查操作,最后一定要关闭数据库
用SQLite自带的API进行增删改查:
最后就是在main函数中,要进行哪个操作就调用哪个的方法。
总结的语句为:
在Android中,提供了一个SQLiteOpenHelper的抽象类(此类已经加载驱动,实现了 连接数据库.),该类用于数据库版本进行管理,常用方法有:
onCreate 数据库创建时执行(第一次连接获取数据库对象时执行)
onUpgrade 数据库更新时执行(版本号改变时执行)
onOpen 数据库每次打开时执行(打开数据库时调用,在前两个方法之后)
第1步:创建一个PersonSQLiteOpenHelper继承SQLiteOpenHelper,数据库帮助类,用于创建和管理数据库的
package com.example.zhansy.myapplication.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Created by ZHANSY on 2015/8/18. * 数据库帮助类,用于创建和管理数据库的 */ public class PersonSQLiteOpenHelper extends SQLiteOpenHelper{ /** * 数据库的构造函数 * @param context * name 数据库名称 * factory 游标工程 * version 数据库的版本号 不可以小于1 */ public PersonSQLiteOpenHelper(Context context) { super(context, "zhansy.db", null, 1); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { //操作数据库 String sql = "create table person(_id integer primary key, name varchar(20),age integer)"; sqLiteDatabase.execSQL(sql);//创建person表 } /** * 数据库的版本号更新时回调此方法, * 更新数据库的内容(删除表, 添加表, 修改表) * @param sqLiteDatabase * @param i 旧版本号 * @param i1 新版本号 */ @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { if(i == 1 && i1 == 2) { //数据库更新啦,在person表中添加一个余额列balance sqLiteDatabase.execSQL("alter table person add balance integer;"); } } }
第2步:创建一个person实体类,便于操作数据库的增删改查
package com.example.zhansy.myapplication.bean; /** * Created by ZHANSY on 2015/8/18. * 实体类Person */ public class Person { private int id; private String name; private int age; public Person(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public Person() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }
第3步:对“人”的表的数据库进行增删改查的操作
获得数据库的读写对象,判断数据库是否打开,执行增删改查操作,最后一定要关闭数据库
package com.example.zhansy.myapplication.dao; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.example.zhansy.myapplication.bean.Person; import com.example.zhansy.myapplication.db.PersonSQLiteOpenHelper; import java.util.ArrayList; import java.util.List; /** * Created by ZHANSY on 2015/8/18. */ public class PersonDao { private PersonSQLiteOpenHelper mOpenHelper;//数据库帮助类 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();//关闭数据库 } } /** * 取数据库中的所有人 * @return 全部人的信息person */ public List<Person> queryAll() { SQLiteDatabase db = mOpenHelper.getReadableDatabase(); if (db.isOpen()) { //默认cursor值为-1 Cursor cursor = db.rawQuery("select _id,name,age from person;", null);//等价于select * from person if (cursor !=null && cursor.getCount()>0) { List<Person> personsList = 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);//取年龄 personsList.add(new Person(id, name, age)); } db.close(); return personsList; } db.close(); } return null; } /** * 根据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(); } return null; } }
用SQLite自带的API进行增删改查:
/** * 添加到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(); // 数据库关闭 } } /** * 根据id找到记录, 并且修改姓名 * @param id * @param name */ public void update(int id, String name) { SQLiteDatabase db = mOpenHelper.getWritableDatabase(); if(db.isOpen()) { // 如果数据库打开, 执行添加的操作 ContentValues values = new ContentValues(); values.put("name", name); int count = db.update("person", values, "_id = ?", new String[]{id + ""}); Log.i(TAG, "修改了: " + count + "行"); db.close(); // 数据库关闭 } } public List<Person> queryAll() { SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 获得一个只读的数据库对象 if(db.isOpen()) { String[] columns = {"_id", "name", "age"}; // 需要的列 String selection = null; // 选择条件, 给null查询所有 String[] selectionArgs = null; // 选择条件的参数, 会把选择条件中的? 替换成数据中的值 String groupBy = null; // 分组语句 group by name String having = null; // 过滤语句 String orderBy = null; // 排序 Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy); int id; String name; int age; if(cursor != null && cursor.getCount() > 0) { List<Person> personList = new ArrayList<Person>(); while(cursor.moveToNext()) { // 向下移一位, 知道最后一位, 不可以往下移动了, 停止. id = cursor.getInt(0); name = cursor.getString(1); age = cursor.getInt(2); personList.add(new Person(id, name, age)); } db.close(); return personList; } db.close(); } return null; } /** * 根据id查询人 * @param id * @return */ public Person queryItem(int id) { SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 获得一个只读的数据库对象 if(db.isOpen()) { String[] columns = {"_id", "name", "age"}; // 需要的列 String selection = "_id = ?"; // 选择条件, 给null查询所有 String[] selectionArgs = {id + ""}; // 选择条件的参数, 会把选择条件中的? 替换成数据中的值 String groupBy = null; // 分组语句 group by name String having = null; // 过滤语句 String orderBy = null; // 排序 Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy); if(cursor != null && cursor.moveToFirst()) { // cursor对象不为null, 并且可以移动到第一行 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(); } return null; }
最后就是在main函数中,要进行哪个操作就调用哪个的方法。
总结的语句为:
创建表: create table person( _id integer primary key autoincrement, name varchar(20), age integer ); 添加: insert into person(name, age) values('lisi', 19); 删除: delete from person where _id = 1; 修改: update person set name = '李四' where name = '王五'; 查询所有: select * from person; 查询单条: select * from person where name = 'zhangsan'; 事务的作用是:标记需要运行的操作代码,全部成功执行才算成功,否则回滚到开启事务之前。 事务: update person set balance = balance - 100 where name = 'lisi'; update person set balance = balance + 100 where name = 'zhangsan'; // 开启事务 db.beginTransaction(); // 标记事务成功 db.setTransactionSuccessful(); // 停止事务 db.endTransaction();
相关文章推荐
- android 屏幕适配小结
- 【干货】避免Android中Context引起的内存泄露
- [开发工具] Android下适应各种分辨率——dimens转换工具
- Android:设计之屏幕适配
- android 自适应 多屏幕支持 --Android多分辨率适配
- Android应用程序基础(一)
- Android 平台下的Vuforia 5环境搭建以及Image Target生成
- 透彻理解android转场动画
- Android开发中那些相见恨晚的方法、类、接口、工具
- android tabhost Intent实现
- Android事件分发机制学习笔记
- Android中使用AIDL调用远程服务
- 替代getDrawingCache方法进行截图
- 单选按钮(RadioButton)——Mars Android开发视频教程之第一季第十集(重)
- 图片视图(ImageView)——Mars Android开发视频教程之第一季第十一集(重)
- Android 双进程Service常驻后台,无惧“一键清理
- Android开发笔记--hello world 和目录结构
- Android SDK下载和更新失败的解决方法
- 完全掌握 Android Data Binding
- Android(客户端)通过socket与QT(服务端)通信