Android开发系列(九):创建数据库以及完成简单的CRUD操作
来源:互联网 发布:怎么在手机淘宝交电费 编辑:程序博客网 时间:2024/04/30 12:47
本篇博文主要实现简单的创建数据库以及实现CRUD操作。
首先,我们建立一个Android Project,命名为db
一、完成数据库的创建操作:
用SQLiteOpenHelper类中的getWritableDatabase()和getReadableDatabase()都可以获取一个操作数据库的SQLiteDatabase实例,其中getReadableDatabase()方法中会调用getWritableDatabase()方法。
区别:其中,getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase() 方法就会出错。getReadableDatabase()方法则是先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库;如果此时数据库空间出现了空余,则会成功获取一个操作数据库的SQLiteDatabase对象。
我们首先建立一个类(继承SQLiteOpenHelper)DBOpenHelper.java:
package cn.itcast.service;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class DBOpenHelper extends SQLiteOpenHelper {//构造函数,调用父类的SQLiteOpenHelper的构造函数public DBOpenHelper(Context context) {super(context, "itcast.db", null, 1);//<包>/databases/}@Overridepublic void onCreate(SQLiteDatabase db) {//是在数据库每一次被创建的时候调用的db.execSQL("CREATE TABLE person(personid integer primary key autoincrement, name varchar(20), phone VARCHAR(12) NULL)");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//在数据库的版本发生变化时会被调用db.execSQL("ALTER TABLE person ADD amount integer");}}
onCreate()方法在初次生成数据库时才会被调用,在onCreate()方法里可以生成数据库表结构及添加一些应用使用到的初始化数据。
onUpgrade()方法在数据库的版本发生变化时会被调用,一般在软件升级时才需改变版本号,而数据库的版本是由程序员控制的。
然后,我们建立一个测试类,来实现调用DBOpenHelper中的方法来创建数据库DBTest.java:
package cn.itcast.test;public class DBTest extends AndroidTestCase { public void testCreateDB() throws Exception{DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());dbOpenHelper.getWritableDatabase();}}关于测试需要在AndroidManifest.xml中配置几条语句,这点不要忘了。
运行测试发现在File Explorer视图中的/data/data/cn.itcast.db/databases目录下有个itcast.db的文件,就是我们创建的数据库了。
我们用Person来做例子
首先,用建立一个javabean:Person.java
package cn.itcast.domain;public class Person {private Integer id;private String name;private String phone;private Integer amount;public Person(){}public Person(String name, String phone, Integer amount) {this.name = name;this.phone = phone;this.amount = amount;}public Person(Integer id, String name, String phone, Integer amount) {this.id = id;this.name = name;this.phone = phone;this.amount = amount;}public Integer getAmount() {return amount;}public void setAmount(Integer amount) {this.amount = amount;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", phone=" + phone+ ", amount=" + amount + "]";}}然后,我们需要编写业务层的类,PersonService.java
package cn.itcast.service;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import cn.itcast.domain.Person;public class PersonService {private DBOpenHelper dbOpenHelper;public PersonService(Context context) {this.dbOpenHelper = new DBOpenHelper(context);}/** * 添加记录 * @param person */public void save(Person person){SQLiteDatabase db = dbOpenHelper.getWritableDatabase();db.execSQL("insert into person(name, phone, amount) values(?,?,?)",new Object[]{person.getName(), person.getPhone(), person.getAmount()});}/** * 删除记录 * @param id 记录ID */public void delete(Integer id){SQLiteDatabase db = dbOpenHelper.getWritableDatabase();db.execSQL("delete from person where personid=?", new Object[]{id});}/** * 更新记录 * @param person */public void update(Person person){SQLiteDatabase db = dbOpenHelper.getWritableDatabase();db.execSQL("update person set name=?,phone=?,amount=? where personid=?",new Object[]{person.getName(), person.getPhone(), person.getAmount(), person.getId()});}/** * 查询记录 * @param id 记录ID * @return */public Person find(Integer id){SQLiteDatabase db = dbOpenHelper.getReadableDatabase();Cursor cursor = db.rawQuery("select * from person where personid=?", new String[]{id.toString()});if(cursor.moveToFirst()){int personid = cursor.getInt(cursor.getColumnIndex("personid"));int amount = cursor.getInt(cursor.getColumnIndex("amount"));String name = cursor.getString(cursor.getColumnIndex("name"));String phone = cursor.getString(cursor.getColumnIndex("phone"));return new Person(personid, name, phone, amount);}cursor.close();return null;}/** * 分页获取记录 * @param offset 跳过前面多少条记录 * @param maxResult 每页获取多少条记录 * @return */public List<Person> getScrollData(int offset, int maxResult){List<Person> persons = new ArrayList<Person>();SQLiteDatabase db = dbOpenHelper.getReadableDatabase();Cursor cursor = db.rawQuery("select * from person order by personid asc limit ?,?",new String[]{String.valueOf(offset), String.valueOf(maxResult)});while(cursor.moveToNext()){int personid = cursor.getInt(cursor.getColumnIndex("personid"));int amount = cursor.getInt(cursor.getColumnIndex("amount"));String name = cursor.getString(cursor.getColumnIndex("name"));String phone = cursor.getString(cursor.getColumnIndex("phone"));persons.add(new Person(personid, name, phone, amount));}cursor.close();return persons;}/** * 分页获取记录 * @param offset 跳过前面多少条记录 * @param maxResult 每页获取多少条记录 * @return */public Cursor getCursorScrollData(int offset, int maxResult){SQLiteDatabase db = dbOpenHelper.getReadableDatabase();Cursor cursor = db.rawQuery("select personid as _id,name,phone,amount from person order by personid asc limit ?,?",new String[]{String.valueOf(offset), String.valueOf(maxResult)});return cursor;}/** * 获取记录总数 * @return */public long getCount(){SQLiteDatabase db = dbOpenHelper.getReadableDatabase();Cursor cursor = db.rawQuery("select count(*) from person", null);cursor.moveToFirst();long result = cursor.getLong(0);cursor.close();return result;}}然后,我们就需要执行测试了PersonServiceTest.java:
package cn.itcast.test;import java.util.List;import cn.itcast.domain.Person;import cn.itcast.service.DBOpenHelper;import cn.itcast.service.PersonService;import android.test.AndroidTestCase;import android.util.Log;public class PersonServiceTest extends AndroidTestCase {private static final String TAG = "PersonServiceTest";public void testCreateDB() throws Exception{DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());dbOpenHelper.getWritableDatabase();}public void testSave() throws Exception{PersonService service = new PersonService(this.getContext());for(int i = 0 ; i < 20 ; i++){Person person = new Person("zhangxx"+ i, "136765765"+ i, 100);service.save(person);}}public void testDelete() throws Exception{PersonService service = new PersonService(this.getContext());service.delete(21);}public void testUpdate() throws Exception{PersonService service = new PersonService(this.getContext());Person person = service.find(1);person.setName("zhangxiaoxiao");service.update(person);}public void testFind() throws Exception{PersonService service = new PersonService(this.getContext());Person person = service.find(1);Log.i(TAG, person.toString());}public void testScrollData() throws Exception{PersonService service = new PersonService(this.getContext());List<Person> persons = service.getScrollData(0, 5);for(Person person : persons){Log.i(TAG, person.toString());}}public void testCount() throws Exception{PersonService service = new PersonService(this.getContext());long result = service.getCount();Log.i(TAG, result+"");}public void testUpdateAmount() throws Exception{PersonService service = new PersonService(this.getContext());Person person1 = service.find(1);Person person2 = service.find(2);person1.setAmount(100);person2.setAmount(50);service.update(person1);service.update(person2);}}可以在找到itcast.db之后,通过下载:SQLite Explorer来打开查看
- Android开发系列(九):创建数据库以及完成简单的CRUD操作
- 安卓实训第十二天(补充部分)---Sqlite数据库的创建和改变,以及使用SQLiteDataBase完成CRUD操作
- Jorm实现简单的数据库CRUD操作
- Android SQLite数据库(事务)的使用,多线程CRUD并发操作(可用于实际开发)
- 第六章 完成对数据库的CRUD操作
- Android中SQLite的简单crud操作
- android数据库sqlite的CRUD操作
- javaWeb-使用JDBC完成CRUD的操作
- JAVA-JDBC完成CRUD的操作进阶
- 利用JDBC完成数据库的CRUD
- 安卓开发-数据库dao层的简单CRUD
- 安卓开发-实现数据库的CRUD操作
- Hibernate-简单完成crud
- JDBC简单的CRUD操作
- Android数据库简单操作之创建数据库
- MySQL数据库的CRUD操作
- 模型的数据库CRUD操作
- 【SSH三大框架】Hibernate基础第五篇:利用Hibernate完成简单的CRUD操作
- NYOJ题目744蚂蚁的难题(一)(数学,不大懂)
- 实现:Linux主机做路由,为子网实现共享上网
- 黑马程序员----实例方法跟类方法的区别
- KMP算法
- 推送系统里使用 UPD 还是TCP做心跳包?
- Android开发系列(九):创建数据库以及完成简单的CRUD操作
- 递归算法的时间复杂度分析
- Matlab基础学习---------常用的数学函数实例学习
- 二叉树的建立(非递归建立与定义建立)与基本操作(广度和深度遍历,求叶子树高)实现
- linux C++ 共享库导出类
- 九度_题目1356:孩子们的游戏(圆圈中最后剩下的数)
- 二分插入排序
- Toast详解
- samba的下载安装和使用