Android中内置的是SQLite小型数据库,类似access一样是以文件方式存在的,操作起来十分方便。android操作SQLite需要继承自SQLiteOpenHelper 来得到连接。实现了2个方法:onCreate和onUpgrade。第一次获得对数据库的读或写操作的时候调用onCreate,所以这里面写创建数据表的语句;在数据库版本变化的时候会调用onUpgrade,所以如果表结构变化了就在这里修改。

下面的代码继承了SQLiteOpenHelper ,并且自己写了几个增删改查方法,将对数据库操作的DAO模块继承到一起,以后操作数据库用这一个java文件基本就OK啦。

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 android.database.sqlite.SQLiteOpenHelper;public class DBOpenHelper extends SQLiteOpenHelper {private static final String DATABASENAME = "test.db"; //数据库名称private static final int DATABASEVERSION = 1;//数据库版本,大于0public DBOpenHelper(Context context) {super(context, DATABASENAME, null, DATABASEVERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("CREATE TABLE person (personid integer primary key autoincrement, name varchar(20), amount integer)");//执行有更改的sql语句}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("DROP TABLE IF EXISTS person");onCreate(db);}public void payment(){SQLiteDatabase db = getWritableDatabase();db.beginTransaction();//事启事务try{db.execSQL("update person set amount=amount-10 where personid=?", new Object[]{1});db.execSQL("update person set amount=amount+10 where personid=?", new Object[]{2});db.setTransactionSuccessful();//设置事务标志为成功,当结束事务时就会提交事务}finally{db.endTransaction();}}public void save(Person person){//如果要对数据进行更改,就调用此方法得到用于操作数据库的实例,该方法以读和写方式打开数据库SQLiteDatabase db = getWritableDatabase();db.execSQL("insert into person (name,amount) values(?,?)",new Object[]{person.getName(),person.getAmount()});}public void update(Person person){SQLiteDatabase db = getWritableDatabase();db.execSQL("update person set name=? where personid=?", new Object[]{person.getName(),person.getId()});}public void delete(Integer id){SQLiteDatabase db = getWritableDatabase();db.execSQL("delete from person where personid=?", new Object[]{id.toString()});}public Person find(Integer id){//如果只对数据进行读取,建议使用此方法SQLiteDatabase db = getReadableDatabase();Cursor cursor = db.rawQuery("select * from person where personid=?", new String[]{id.toString()});//得到游标if(cursor.moveToFirst()){int personid = cursor.getInt(cursor.getColumnIndex("personid"));String name = cursor.getString(cursor.getColumnIndex("name"));int amount = cursor.getInt(cursor.getColumnIndex("amount"));Person person = new Person(personid, name);person.setAmount(amount);return person;}return null;}public List<Person> getScrollData(Integer offset, Integer maxResult){List<Person> persons = new ArrayList<Person>();SQLiteDatabase db = getReadableDatabase();Cursor cursor = db.rawQuery("select * from person limit ?,?",new String[]{offset.toString(), maxResult.toString()});while(cursor.moveToNext()){int personid = cursor.getInt(cursor.getColumnIndex("personid"));String name = cursor.getString(cursor.getColumnIndex("name"));int amount = cursor.getInt(cursor.getColumnIndex("amount"));Person person = new Person(personid, name);person.setAmount(amount);persons.add(person);}cursor.close();return persons;}public Cursor getCursorScrollData(Integer offset, Integer maxResult){SQLiteDatabase db = getReadableDatabase();return db.rawQuery("select personid as _id, name, amount from person limit ?,?",new String[]{offset.toString(), maxResult.toString()});}public long getCount() {SQLiteDatabase db = getReadableDatabase();Cursor cursor = db.rawQuery("select count(*) from person", null);cursor.moveToFirst();return cursor.getLong(0);}}

涉及到的bean

class Person {private Integer id;private String name;private Integer amount;public Integer getAmount() {return amount;}public void setAmount(Integer amount) {this.amount = amount;}public Person(){}public Person(Integer id, String name) {this.id = id;this.name = name;}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;}@Overridepublic String toString() {return "Person [amount=" + amount + ", id=" + id + ", name=" + name+ "]";}}



更多相关文章

  1. Android事件分发机制完全解析,带你从源码的角度彻底理解
  2. Android(安卓)studio 分配内存设置方法
  3. Android(安卓)Binder 全解析(3) -- AIDL原理剖析
  4. Android(安卓)-- AppWidget 高级篇
  5. TX Android电面问题
  6. 页面调用ADB操作Android设备
  7. Android(安卓)反编译apk 到java源码的方法
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. 这38款超级炫酷的时间轴特效代码案例,总有
  2. 冒泡排序函数
  3. 前端性能优化之图片优化
  4. 奇技淫巧不可取,切记切记
  5. 数据机构之排序算法 ————快排
  6. 爬了世纪佳缘后发现了一个秘密
  7. js 引入方式,常量,变量,函数的声明和使用---
  8. 0401作业
  9. grid栅格布局与grid实战
  10. 210331 JavaScript引入方式 变量与常量