SQLite常见操作(增删改查)

 

 1 package com.itheima.mysqlite;
 2 
 3 import android.content.Context;
 4 import android.database.sqlite.SQLiteDatabase;
 5 import android.database.sqlite.SQLiteOpenHelper;
 6 
 7 public class DBOpenHelper extends SQLiteOpenHelper {
 8 
 9     /**
10      * 用来打开数据库的一个工具,其中有创建和升级的方法
11      * @param context
12      * @param name
13      * @param factory
14      * @param version
15      */
16     public DBOpenHelper(Context context) {
17         super(context, "itheima", null, 3);    
18         /*
19          * 参数1:上下文环境的对象,用来确定数据库存储位置
20          * 参数2:数据库文件的名字
21          * 参数3:用来创建结果集的工厂,null为使用默认的工厂
22          * 参数4:数据库的版本,从1开始
23          */
24     }
25 
26     @Override
27     public void onCreate(SQLiteDatabase db) {
28         System.out.println("onCreate");
29         db.execSQL("CREATE TABLE person(id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(20))");
30     }
31 
32     @Override
33     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
34         System.out.println("onUpgrade");
35         db.execSQL("ALTER TABLE person ADD balance INTEGER");
36     }
37 }

 

 1 package com.itheima.mysqlite;
 2 
 3 public class Person {
 4     private Integer id;
 5     private String name;
 6     private Integer balance;
 7 
 8     public Person() {
 9         super();
10     }
11 
12     public Person(String name, Integer balance) {
13         super();
14         this.name = name;
15         this.balance = balance;
16     }
17 
18     public Person(Integer id, String name, Integer balance) {
19         super();
20         this.id = id;
21         this.name = name;
22         this.balance = balance;
23     }
24 
25     public Integer getId() {
26         return id;
27     }
28 
29     public void setId(Integer id) {
30         this.id = id;
31     }
32 
33     public String getName() {
34         return name;
35     }
36 
37     public void setName(String name) {
38         this.name = name;
39     }
40 
41     public Integer getBalance() {
42         return balance;
43     }
44 
45     public void setBalance(Integer balance) {
46         this.balance = balance;
47     }
48 
49     @Override
50     public String toString() {
51         return "Person [id=" + id + ", name=" + name + ", balance=" + balance + "]";
52     }
53 
54 }
  1 //SQL语句操作方法
  2 
  3 package com.itheima.mysqlite;
  4 
  5 import java.util.ArrayList;
  6 import java.util.List;
  7 
  8 import android.content.Context;
  9 import android.database.Cursor;
 10 import android.database.SQLException;
 11 import android.database.sqlite.SQLiteDatabase;
 12 
 13 public class ClassicPersonDao {
 14     private Context context;
 15     
 16     public ClassicPersonDao(Context context) {
 17         this.context = context;
 18     }
 19 
 20     public void insert(Person p){
 21         DBOpenHelper helper = new DBOpenHelper(context);
 22         SQLiteDatabase db = helper.getWritableDatabase();
 23         db.execSQL("INSERT INTO person(name, balance) VALUES(?, ?)", new Object[] { p.getName(), p.getBalance() });
 24         db.close();
 25     }
 26     public void delete(int id){
 27         DBOpenHelper helper = new DBOpenHelper(context);
 28         SQLiteDatabase db = helper.getWritableDatabase();
 29         db.execSQL("DELETE FROM person WHERE id=?", new Object[]{id});
 30         db.close();
 31     }
 32     public void update(Person p){
 33         DBOpenHelper helper = new DBOpenHelper(context);
 34         SQLiteDatabase db = helper.getWritableDatabase();
 35         db.execSQL("UPDATE person SET name=?, balance=? WHERE id=?", new Object[] {p.getName(), p.getBalance(), p.getId()});
 36         db.close();
 37     } 
 38     public Person query(int id){
 39         DBOpenHelper helper = new DBOpenHelper(context);
 40         SQLiteDatabase db = helper.getReadableDatabase();//如果数据库不可写,getReadableDatabase()方法可以执行
 41         Cursor c = db.rawQuery("SELECT * FROM person WHERE id=? ", new String[]{ id + ""});
 42         
 43         Person p = null;
 44         if(c.moveToNext()){    //将结果集向后移动,并且返回是否成功
 45             String name = c.getString(c.getColumnIndex("name"));
 46             int balance = c.getInt(c.getColumnIndex("balance"));
 47             p = new Person(name, balance);
 48         }
 49         return p;
 50     }
 51     
 52     public List<Person> queryAll(){
 53         DBOpenHelper helper = new DBOpenHelper(context);
 54         SQLiteDatabase db = helper.getReadableDatabase();//如果数据库不可写,getReadableDatabase()方法可以执行
 55         Cursor c = db.rawQuery("SELECT id, name, balance FROM person",null);
 56         List<Person> persons = new ArrayList<Person>();
 57         while (c.moveToNext()){
 58             persons.add(new Person(c.getInt(0), c.getString(1), c.getInt(2)));
 59         }
 60         c.close();
 61         db.close();
 62         return persons;
 63     }
 64     
 65     /**
 66      * 分页查询  指定页数和每页容量
 67      * @param pageNum 页码
 68      * @param capacity 每页大小
 69      * @return 指定页上的Person 集合
 70      */
 71     public List<Person> queryPage(int pageNum, int capacity){
 72         DBOpenHelper helper = new DBOpenHelper(context);
 73         SQLiteDatabase db = helper.getReadableDatabase();
 74         String offset = (pageNum - 1) * capacity + "";
 75         String limit = capacity + "";
 76         Cursor c = db.rawQuery("SELECT id, name, balance FROM person LIMIT ?,?",new String[]{offset , limit});
 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         }
 81         c.close();
 82         db.close();
 83         return persons;
 84     }
 85     /**
 86      * 查询数据库中有多少条记录
 87      * @return
 88      */
 89     public int queryCount(){
 90         DBOpenHelper helper = new DBOpenHelper(context);
 91         SQLiteDatabase db = helper.getReadableDatabase();//如果数据库不可写,getReadableDatabase()方法可以执行
 92         Cursor c = db.rawQuery("SELECT COUNT(*) FROM person",null);
 93         c.moveToNext();
 94         int count = c.getInt(0);
 95         c.close();
 96         db.close();
 97         return count;
 98     }
 99     //事务操作
100     public void remit(int from, int to, int amount){
101         DBOpenHelper helper = new DBOpenHelper(context);
102         SQLiteDatabase db = helper.getReadableDatabase();
103         try {
104             db.beginTransaction();    //开启事物
105             db.execSQL("UPDATE person SET balance=balance-? WHERE id=?", new Object[]{amount, from});
106             db.execSQL("UPDATE person SET balance=balance+? WHERE id=?", new Object[]{amount, to});
107             db.setTransactionSuccessful();    //设置事物成功,设置成功之前的操作在事物结束的时候会被提交
108         } finally {        
109         db.endTransaction();    //结束事物,如果不结束其会超时自动结束
110         db.close();
111         }
112     }
113 } 

 

  1 //另一种操作方法
  2 package com.itheima.mysqlite;
  3 
  4 import java.util.ArrayList;
  5 import java.util.List;
  6 
  7 import android.content.ContentValues;
  8 import android.content.Context;
  9 import android.database.Cursor;
 10 import android.database.sqlite.SQLiteDatabase;
 11 
 12 public class PersonDao {
 13     private Context context;
 14     
 15     public PersonDao(Context context) {
 16         this.context = context;
 17     }
 18 
 19     public long insert(Person p){
 20         DBOpenHelper helper = new DBOpenHelper(context);
 21         SQLiteDatabase db = helper.getWritableDatabase();
 22         ContentValues values = new ContentValues();    //创建一个Map集合,用来装载要插入的数据
 23         values.put("name", p.getName());
 24         values.put("balance", p.getBalance());
 25         long id = db.insert("person", "name", values);//第2个参数随便写一个列名就可以,在插入空记录时用来拼装SQL语句
 26         db.close();
 27         return id;
 28     }
 29     public void delete(int id){
 30         DBOpenHelper helper = new DBOpenHelper(context);
 31         SQLiteDatabase db = helper.getWritableDatabase();
 32         int count = db.delete("person", "id=?", new String[]{ id + ""});     //删除,并且返回影响的记录数
 33         db.close();
 34     }
 35     public int update(Person p){
 36         DBOpenHelper helper = new DBOpenHelper(context);
 37         SQLiteDatabase db = helper.getWritableDatabase();
 38         ContentValues values = new ContentValues();
 39         values.put("name", p.getName());
 40         values.put("balance", p.getBalance());
 41         int count = db.update("person", values, "id=?", new String[]{p.getId()+""});
 42         
 43         db.close();
 44         return count;
 45     } 
 46     public Person query(int id){
 47         DBOpenHelper helper = new DBOpenHelper(context);
 48         SQLiteDatabase db = helper.getReadableDatabase();//如果数据库不可写,getReadableDatabase()方法可以执行
 49         Cursor c = db.query("person", new String[]{"name", "balance"}, "id=?", new String[]{id+""}, null, null, null);    
 50         Person p = null;
 51         if(c.moveToNext()){    //将结果集向后移动,并且返回是否成功
 52             String name = c.getString(c.getColumnIndex("name"));
 53             int balance = c.getInt(c.getColumnIndex("balance"));
 54             p = new Person(id, name, balance);
 55         }
 56         return p;
 57     }
 58     
 59     public List<Person> queryAll(){
 60         DBOpenHelper helper = new DBOpenHelper(context);
 61         SQLiteDatabase db = helper.getReadableDatabase();//如果数据库不可写,getReadableDatabase()方法可以执行        
 62         Cursor c = db.query("person", null, null, null, null, null, "balance DESC"); //递减查询所有
 63         List<Person> persons = new ArrayList<Person>();
 64         while (c.moveToNext()){
 65             persons.add(new Person(c.getInt(0), c.getString(1), c.getInt(2)));
 66         }
 67         c.close();
 68         db.close();
 69         return persons;
 70     }
 71     
 72     /**
 73      * 分页查询  指定页数和每页容量
 74      * @param pageNum 页码
 75      * @param capacity 每页大小
 76      * @return 指定页上的Person 集合
 77      */
 78     public List<Person> queryPage(int pageNum, int capacity){
 79         DBOpenHelper helper = new DBOpenHelper(context);
 80         SQLiteDatabase db = helper.getReadableDatabase();
 81         String offset = (pageNum - 1) * capacity + "";
 82         String limit = capacity + "";
 83         Cursor c = db.query("person", null, null, null, null, null, null, offset + "," + limit);
 84         List<Person> persons = new ArrayList<Person>();
 85         while (c.moveToNext()){
 86             persons.add(new Person(c.getInt(0), c.getString(1), c.getInt(2)));
 87         }
 88         c.close();
 89         db.close();
 90         return persons;
 91     }
 92     /**
 93      * 查询数据库中有多少条记录
 94      * @return
 95      */
 96     public int queryCount(){
 97         DBOpenHelper helper = new DBOpenHelper(context);
 98         SQLiteDatabase db = helper.getReadableDatabase();//如果数据库不可写,getReadableDatabase()方法可以执行
 99         Cursor c = db.query("person", new String[]{"COUNT(*)"}, null, null, null, null, null);
100         c.moveToNext();
101         int count = c.getInt(0);
102         c.close();
103         db.close();
104         return count;
105     }
106     //事务操作
107     public void remit(int from, int to, int amount){
108         DBOpenHelper helper = new DBOpenHelper(context);
109         SQLiteDatabase db = helper.getReadableDatabase();
110         try {
111             db.beginTransaction();    //开启事物
112             db.execSQL("UPDATE person SET balance=balance-? WHERE id=?", new Object[]{amount, from});
113             db.execSQL("UPDATE person SET balance=balance+? WHERE id=?", new Object[]{amount, to});
114             db.setTransactionSuccessful();    //设置事物成功,设置成功之前的操作在事物结束的时候会被提交
115         } finally {        
116         db.endTransaction();    //结束事物,如果不结束其会超时自动结束
117         db.close();
118         }
119     }
120 } 

 

 1 package com.itheima.mysqlite;
 2 
 3 import java.util.List;
 4 import java.util.Random;
 5 
 6 import android.test.AndroidTestCase;
 7 
 8 public class DBTest extends AndroidTestCase {
 9     public void testCreateDatabase(){
10     DBOpenHelper helper = new DBOpenHelper(getContext()); 
11     helper.getWritableDatabase(); // 获取数据库连接
12     /*
13      * 数据库不存在:创建数据库,执行onCreate()方法
14      * 数据库存在,版本没变:不执行任何方法
15      * 数据库存在,版本提升:执行onUpgrade()方法
16      */
17     }
18     public void testInsert(){
19         PersonDao dao = new PersonDao(getContext());        
20         dao.insert(new Person("insert", 9999));
21     }
22     
23     public void testUpdate(){
24         PersonDao dao = new PersonDao(getContext());
25         System.out.println(dao.update(new Person(209,"李四",321)));
26     }
27     
28     public void testDelete(){
29         PersonDao dao = new PersonDao(getContext());
30         dao.delete(208);         
31     }
32     
33     public void testQuery(){
34         PersonDao dao = new PersonDao(getContext());
35         System.out.println(dao.query(234));
36         System.out.println(dao.query(2));
37         System.out.println(dao.query(302));
38     }
39     
40     public void testQueryAll(){
41         PersonDao dao = new PersonDao(getContext());
42         List<Person> persons = dao.queryAll();
43         for(Person p: persons){
44         System.out.println(p);
45         }
46     }
47     
48     public void testQueryPage(){
49         PersonDao dao = new PersonDao(getContext());
50         List<Person> persons = dao.queryPage(2,20);
51         for(Person p: persons){
52         System.out.println(p);
53         }
54     }
55     
56     public void testQueryCount(){
57         PersonDao dao = new PersonDao(getContext());    
58         System.out.println(dao.queryCount());        
59     }
60     
61     public void testRemit(){
62         PersonDao dao = new PersonDao(getContext());
63         dao.remit(209,208,100);
64     }
65 }

 

posted @ 2013-03-26 00:26  zhangyuzunhh  阅读(168)  评论(0编辑  收藏  举报