Android开发:SQLite数据库操作


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

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

  1. package cn.itcast.service;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import android.content.Context;  
  7. import android.database.Cursor;  
  8. import android.database.sqlite.SQLiteDatabase;  
  9. import android.database.sqlite.SQLiteOpenHelper;  
  10.   
  11. public class DBOpenHelper extends SQLiteOpenHelper {  
  12.     private static final String DATABASENAME = "test.db"//数据库名称   
  13.     private static final int DATABASEVERSION = 1;//数据库版本,大于0   
  14.   
  15.     public DBOpenHelper(Context context) {  
  16.         super(context, DATABASENAME, null, DATABASEVERSION);  
  17.     }  
  18.   
  19.     @Override  
  20.     public void onCreate(SQLiteDatabase db) {  
  21.         db.execSQL("CREATE TABLE person (personid integer primary key autoincrement, name varchar(20), amount integer)");//执行有更改的sql语句   
  22.     }  
  23.   
  24.     @Override  
  25.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  26.         db.execSQL("DROP TABLE IF EXISTS person");  
  27.         onCreate(db);  
  28.     }  
  29.   
  30.     public void payment(){  
  31.         SQLiteDatabase db = getWritableDatabase();  
  32.         db.beginTransaction();//事启事务   
  33.         try{  
  34.             db.execSQL("update person set amount=amount-10 where personid=?"new Object[]{1});  
  35.             db.execSQL("update person set amount=amount+10 where personid=?"new Object[]{2});  
  36.             db.setTransactionSuccessful();//设置事务标志为成功,当结束事务时就会提交事务   
  37.         }finally{  
  38.             db.endTransaction();  
  39.         }  
  40.     }  
  41.   
  42.     public void save(Person person){  
  43.         //如果要对数据进行更改,就调用此方法得到用于操作数据库的实例,该方法以读和写方式打开数据库   
  44.         SQLiteDatabase db = getWritableDatabase();  
  45.         db.execSQL("insert into person (name,amount) values(?,?)",  
  46.                 new Object[]{person.getName(),person.getAmount()});  
  47.     }  
  48.       
  49.     public void update(Person person){  
  50.         SQLiteDatabase db = getWritableDatabase();  
  51.         db.execSQL("update person set name=? where personid=?",   
  52.                 new Object[]{person.getName(),person.getId()});  
  53.     }  
  54.       
  55.     public void delete(Integer id){  
  56.         SQLiteDatabase db = getWritableDatabase();  
  57.         db.execSQL("delete from person where personid=?"new Object[]{id.toString()});  
  58.     }  
  59.       
  60.     public Person find(Integer id){  
  61.         //如果只对数据进行读取,建议使用此方法   
  62.         SQLiteDatabase db = getReadableDatabase();  
  63.         Cursor cursor = db.rawQuery("select * from person where personid=?"new String[]{id.toString()});//得到游标   
  64.         if(cursor.moveToFirst()){  
  65.             int personid = cursor.getInt(cursor.getColumnIndex("personid"));  
  66.             String name = cursor.getString(cursor.getColumnIndex("name"));  
  67.             int amount = cursor.getInt(cursor.getColumnIndex("amount"));  
  68.             Person person = new Person(personid, name);  
  69.             person.setAmount(amount);  
  70.             return person;  
  71.         }  
  72.         return null;  
  73.     }  
  74.       
  75.     public List<Person> getScrollData(Integer offset, Integer maxResult){  
  76.         List<Person> persons = new ArrayList<Person>();  
  77.         SQLiteDatabase db = getReadableDatabase();  
  78.         Cursor cursor = db.rawQuery("select * from person limit ?,?",  
  79.                 new String[]{offset.toString(), maxResult.toString()});  
  80.         while(cursor.moveToNext()){  
  81.             int personid = cursor.getInt(cursor.getColumnIndex("personid"));  
  82.             String name = cursor.getString(cursor.getColumnIndex("name"));  
  83.             int amount = cursor.getInt(cursor.getColumnIndex("amount"));  
  84.             Person person = new Person(personid, name);  
  85.             person.setAmount(amount);  
  86.             persons.add(person);  
  87.         }  
  88.         cursor.close();  
  89.         return persons;  
  90.     }  
  91.       
  92.     public Cursor getCursorScrollData(Integer offset, Integer maxResult){  
  93.         SQLiteDatabase db = getReadableDatabase();  
  94.         return db.rawQuery("select personid as _id, name, amount from person limit ?,?",  
  95.                 new String[]{offset.toString(), maxResult.toString()});  
  96.     }  
  97.       
  98.     public long getCount() {  
  99.         SQLiteDatabase db = getReadableDatabase();  
  100.         Cursor cursor = db.rawQuery("select count(*) from person"null);  
  101.         cursor.moveToFirst();  
  102.         return cursor.getLong(0);  
  103.     }  
  104. }  

涉及到的bean

  1. class Person {  
  2.     private Integer id;  
  3.     private String name;  
  4.     private Integer amount;  
  5.       
  6.     public Integer getAmount() {  
  7.         return amount;  
  8.     }  
  9.   
  10.     public void setAmount(Integer amount) {  
  11.         this.amount = amount;  
  12.     }  
  13.   
  14.     public Person(){}  
  15.       
  16.     public Person(Integer id, String name) {  
  17.         this.id = id;  
  18.         this.name = name;  
  19.     }  
  20.     public Integer getId() {  
  21.         return id;  
  22.     }  
  23.     public void setId(Integer id) {  
  24.         this.id = id;  
  25.     }  
  26.     public String getName() {  
  27.         return name;  
  28.     }  
  29.     public void setName(String name) {  
  30.         this.name = name;  
  31.     }  
  32.   
  33.     @Override  
  34.     public String toString() {  
  35.         return "Person [amount=" + amount + ", id=" + id + ", name=" + name  
  36.                 + "]";  
  37.     }  
  38.   
  39.   
  40. }  

相关内容