Android SQLite数据库操作实例

Android的自带数据库SQLite小巧且功能强大,Android提供了两种方式去操作数据库,第一种是用SQL语句去操作数据,SQLite支持标准的SQL,其分页等操作与Mysql一样,以下是利用SQL操作SQLite:

Java代码   收藏代码
  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3.   
  4. import android.content.Context;  
  5. import android.database.Cursor;  
  6. import android.database.sqlite.SQLiteDatabase;  
  7.   
  8. public class PersonDaoClassic {  
  9.     private DBOpenHelper helper;  
  10.   
  11.     public PersonDaoClassic(Context context) {  
  12.         helper = new DBOpenHelper(context);  
  13.     }  
  14.   
  15.     public void insert(Person p) {  
  16.         // 打开可写数据库  
  17.         SQLiteDatabase db = helper.getWritableDatabase();         
  18.           
  19.         // 执行SQL语句, 替换占位符  
  20.         db.execSQL("INSERT INTO person(name, balance) VALUES(?, ?)"new Object[] { p.getName(), p.getBalance() });  
  21.           
  22.         // 释放资源  
  23.         db.close();  
  24.     }  
  25.   
  26.     public void delete(int id) {  
  27.         SQLiteDatabase db = helper.getWritableDatabase();  
  28.         db.execSQL("DELETE FROM person WHERE id=?"new Object[] { id });  
  29.         db.close();  
  30.     }  
  31.   
  32.     public void update(Person p) {  
  33.         SQLiteDatabase db = helper.getWritableDatabase();  
  34.         db.execSQL("UPDATE person SET name=?, balance=? WHERE id=?"new Object[] { p.getName(), p.getBalance(), p.getId() });  
  35.         db.close();  
  36.     }  
  37.   
  38.     public Person query(int id) {  
  39.         SQLiteDatabase db = helper.getReadableDatabase();  
  40.           
  41.         // 执行原始查询, 得到一个Cursor(类似ResultSet)  
  42.         Cursor c = db.rawQuery("SELECT name, balance FROM person WHERE id=?"new String[] { String.valueOf(id) });  
  43.         Person p = null;  
  44.           
  45.         // 判断Cursor是否有下一条记录  
  46.         if (c.moveToNext())  
  47.             // 从Cursor中获取数据, 创建Person对象  
  48.             p = new Person(id, c.getString(0), c.getInt(1));  
  49.           
  50.         // 释放资源  
  51.         c.close();  
  52.         db.close();  
  53.         return p;  
  54.     }  
  55.   
  56.     public List<Person> queryAll() {  
  57.         SQLiteDatabase db = helper.getReadableDatabase();  
  58.         Cursor c = db.rawQuery("SELECT id, name, balance FROM person"null);  
  59.         List<Person> persons = new ArrayList<Person>();  
  60.         while (c.moveToNext())  
  61.             persons.add(new Person(c.getInt(0), c.getString(1), c.getInt(2)));  
  62.         c.close();  
  63.         db.close();  
  64.         return persons;  
  65.     }  
  66.       
  67.     public List<Person> queryPage(int pageNum, int capacity) {          
  68.         // 开始索引  
  69.         String start = String.valueOf((pageNum - 1) * capacity);  
  70.         // 查询的个数  
  71.         String length = String.valueOf(capacity);  
  72.           
  73.         SQLiteDatabase db = helper.getReadableDatabase();  
  74.           
  75.         // 翻页查询语句, 和MySQL中相同  
  76.         Cursor c = db.rawQuery("SELECT id, name, balance FROM person LIMIT ?,?"new String[]{start, length});  
  77.         List<Person> persons = new ArrayList<Person>();  
  78.         while (c.moveToNext())  
  79.             persons.add(new Person(c.getInt(0), c.getString(1), c.getInt(2)));  
  80.         c.close();  
  81.         db.close();  
  82.         return persons;  
  83.     }  
  84.       
  85.     public int queryCount() {  
  86.         SQLiteDatabase db = helper.getReadableDatabase();  
  87.           
  88.         // 查询记录条数  
  89.         Cursor c = db.rawQuery("SELECT COUNT(*) FROM person"null);  
  90.         c.moveToNext();  
  91.         int count =c.getInt(0);   
  92.         c.close();  
  93.         db.close();  
  94.         return count;  
  95.     }  
  96.   
  97. }  

      除上述方法以外,android还给我们带来了另外一种更加简单,也是android推荐使用的一种方式,此种方式把数据封装在ContentValues中,因为android编程过程中经常会使用到已经封装好了数据的ContentValues,所以使用第二种方式在有些时候更加便捷,以下是代码:

Java代码   收藏代码
  1. package cn.itcast.sqlite;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import android.content.ContentValues;  
  7. import android.content.Context;  
  8. import android.database.Cursor;  
  9. import android.database.sqlite.SQLiteDatabase;  
  10.   
  11. public class PersonDao {  
  12.     private DBOpenHelper helper;  
  13.   
  14.     public PersonDao(Context context) {  
  15.         helper = new DBOpenHelper(context);  
  16.     }  
  17.       
  18.     public void remit(int from, int to, int amount) {  
  19.         SQLiteDatabase db = helper.getWritableDatabase();     
  20.           
  21.         // 开启事务  
  22.         db.beginTransaction();  
  23.         try {  
  24.             db.execSQL("UPDATE person SET balance=balance-? WHERE id=?"new Object[]{amount, from});  
  25.             db.execSQL("UPDATE person SET balance=balance+? WHERE id=?"new Object[]{amount, to});  
  26.             db.setTransactionSuccessful();  
  27.         } catch (Exception e) {  
  28.             e.printStackTrace();  
  29.         }  
  30.         // 结束事务, 将事务成功点前面的代码提交  
  31.         db.endTransaction();  
  32.           
  33.         db.close();  
  34.     }  
  35.   
  36.     public void insert(Person p) {  
  37.         SQLiteDatabase db = helper.getWritableDatabase();     
  38.           
  39.         // 准备数据  
  40.         ContentValues values = new ContentValues();  
  41.         values.put("name", p.getName());  
  42.         values.put("balance", p.getBalance());  
  43.           
  44.         // 通过ContentValues中的数据拼接SQL语句, 执行插入操作, id为表中的一个列名  
  45.         db.insert("person""id", values);        
  46.           
  47.         db.close();  
  48.     }  
  49.   
  50.     public void delete(int id) {  
  51.         SQLiteDatabase db = helper.getWritableDatabase();  
  52.           
  53.         // 执行删除操作, 在person表中删除id为指定值的记录  
  54.         db.delete("person""id=?"new String[]{String.valueOf(id)});  
  55.           
  56.         db.close();  
  57.     }  
  58.   
  59.     public void update(Person p) {  
  60.         SQLiteDatabase db = helper.getWritableDatabase();  
  61.   
  62.         // 要更新的数据  
  63.         ContentValues values = new ContentValues();  
  64.         values.put("name", p.getName());  
  65.         values.put("balance", p.getBalance());  
  66.   
  67.         // 更新person表中id为指定值的记录  
  68.         db.update("person", values, "id=?"new String[] { String.valueOf(p.getId()) });  
  69.           
  70.         db.close();  
  71.     }  
  72.   
  73.     public Person query(int id) {  
  74.         SQLiteDatabase db = helper.getReadableDatabase();  
  75.           
  76.         // 执行查询: 不去重复, 表是person, 查询name和balance两列, Where条件是"id=?", 占位符是id, 不分组, 没有having, 不排序, 没有分页  
  77.         Cursor c = db.query(false"person"new String[]{"name""balance"}, "id=?"new String[]{String.valueOf(id)}, nullnullnullnull);   
  78.           
  79.         Person p = null;  
  80.         // 判断Cursor是否有下一条记录  
  81.         if (c.moveToNext())  
  82.             // 从Cursor中获取数据, 创建Person对象  
  83.             p = new Person(id, c.getString(0), c.getInt(1));  
  84.           
  85.         // 释放资源  
  86.         c.close();  
  87.         db.close();  
  88.         return p;  
  89.     }  
  90.   
  91.     public List<Person> queryAll() {  
  92.         SQLiteDatabase db = helper.getReadableDatabase();  
  93.   
  94.         // 查询所有记录, 倒序  
  95.         Cursor c = db.query(false"person"new String[]{"id","name""balance"}, nullnullnullnull"id DESC"null);  
  96.           
  97.         List<Person> persons = new ArrayList<Person>();  
  98.         while (c.moveToNext())  
  99.             persons.add(new Person(c.getInt(0), c.getString(1), c.getInt(2)));  
  100.         c.close();  
  101.         db.close();  
  102.         return persons;  
  103.     }  
  104.       
  105.     public List<Person> queryPage(int pageNum, int capacity) {          
  106.         // 开始索引  
  107.         String start = String.valueOf((pageNum - 1) * capacity);  
  108.         // 查询的个数  
  109.         String length = String.valueOf(capacity);  
  110.           
  111.         SQLiteDatabase db = helper.getReadableDatabase();  
  112.           
  113.         // 翻页查询  
  114.         Cursor c = db.query(false"person"new String[]{"id","name""balance"}, nullnullnullnullnull, start + "," + length);  
  115.           
  116.         List<Person> persons = new ArrayList<Person>();  
  117.         while (c.moveToNext())  
  118.             persons.add(new Person(c.getInt(0), c.getString(1), c.getInt(2)));  
  119.         c.close();  
  120.         db.close();  
  121.         return persons;  
  122.     }  
  123.       
  124.     public int queryCount() {  
  125.         SQLiteDatabase db = helper.getReadableDatabase();  
  126.           
  127.         // 查询记录条数  
  128.         Cursor c = db.query(false"person"new String[]{"COUNT(*)"}, nullnullnullnullnullnull);  
  129.           
  130.         c.moveToNext();  
  131.         int count =c.getInt(0);   
  132.         c.close();  
  133.         db.close();  
  134.         return count;  
  135.     }  
  136.   
  137. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值