罗敬威的博客

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
 
  
 Sqlite 是一款轻型的数据库,是遵守ACID(原子性、一致性、隔离性、持久性)的关联式数据库管理系统,多用于嵌入式开发中。
 
    Sqlite的数据类型:Typelessness(物类型),可以保存任何类型的数据到你所想要保存的任何表的任何列中,但它又支持常见的类型如:NULL,VARCHAR,TEXT,INTEGER,BLOG,CLOB....等等,唯一例外的是:integer primary key 此字段只能存储64为整数
 
    在Android系统中,提供了SQLiteOpenHelper抽象类,该类用于对数据库版本进行管理,该类中常用的方法:
 
    onCreate    数据库创建时调用此方法(第一次连接获取数据库对象时执行)
 
    onUpgrade    数据库更新时调用此方法(版本号改变时执行)
 
    onOpen    数据库每次打开时执行(每次打开数据库时调用哦,在onCreate、onUpgrade方法之后
 
    1.使用SQLiteDatabase操作SQLite数据库
 
    Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据的添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete),这些操作简称为(CRUD)
 
    execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句; rawQuery()方法用于执行select语句(查询query)。
 
 首先创建数据库类:
 
 1 public class MySqliteOpenHelper extends SQLiteOpenHelper {
 2 
 3     /**
 4      * 数据库名称
 5      */
 6     private static final String name = "database.db";
 7     
 8     /**
 9      * 数据库版本号
10      */
11     private static final int version = 1;
12     
13     public MySqliteOpenHelper(Context context) {
14         super(context, name, null, version);
15     }
16 
17     /**
18      * 数据库创建时调用
19      */
20     @Override
21     public void onCreate(SQLiteDatabase db) {
22         // 创建表database
23         String sql = "create table database (_id integer primary key autoincrement,name varchar(20),age varchar(20))";
24         db.execSQL(sql);
25     }
26 
27     /**
28      * 数据库更新时调用
29      */
30     @Override
31     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
32         // TODO Auto-generated method stub
33 
34     }
35 
36 }

  SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本的更新。一般是建立一个类继承它,并实现它的onCreate和onUpgrade方法

方法名 方法描述

public MySqliteOpenHelper(Context context, String name,
CursorFactory factory, int version) 

构造方法,一般传递一些参数
onCreate(SQLiteDatabase db) 创建数据库时调用
onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion) 版本更新时调用
getReadableDatabase() 获取可读的SqliteDatabase
getWritableDatabase() 获取可写的SqliteDatabase

创建数据库:

1 /**
2      * 数据库帮助类
3      */
4     private MySqliteOpenHelper helper;
5 
6     public DatabaseUtils(Context context){
7         helper = new MySqliteOpenHelper(context);
8     }

  数据库的增删改查:

 1 /**
 2      * 将数据插入数据库
 3      */
 4     public void insert(){
 5         SQLiteDatabase db = null;
 6         try {
 7             db = helper.getWritableDatabase(); // 获得可写的SQliteDatabase
 8             db.beginTransaction(); // 开启事务
 9             String sql = "insert into database values(null,'zhangsan','20')"; 
10             db.execSQL(sql); // 执行语句
11             db.setTransactionSuccessful(); // 调用此方法会在执行到endTransaction()方法时提交当前事务,如果不调用此方法会回滚事务
12         }finally{
13             if(db != null){
14                 db.endTransaction(); // 事务的结束的标志,决定是提交事务还是回滚事务
15             }
16         }
17         db.close();
18     }
19     
20     /**
21      * 更新数据库中的数据
22      */
23     public void update(){
24         SQLiteDatabase db = helper.getWritableDatabase(); // 获得可写的SQliteDatabase
25         ContentValues values = new ContentValues();
26         values.put("name", "lisi");
27         db.update("database", values, "name = ?", new String []{"zhangsan"});
28         db.close();
29     }
30     
31     /**
32      * 查询数据库
33      */
34     public void query(){
35         SQLiteDatabase db = helper.getReadableDatabase(); // 获得可读的SQliteDatabase
36         String sql = "select name,age from database";
37         
38         Cursor cursor = db.rawQuery(sql, null);
39         while(cursor != null && cursor.moveToNext()){ // cursor 不为null 防止出现空指针异常 moveToNext ()移动到下一行
40             String name = cursor.getString(0); // 获得第一列的值,第一列的索引从0开始
41             int age = cursor.getInt(1); // 获得第二列的值
42             System.out.println("name : " + name + "," + "age :" + age);
43         }
44         
45         cursor.close();
46         db.close();
47         
48     }
49     
50     /**
51      * 删除数据库中的数据
52      */
53     public void delete(){
54         SQLiteDatabase db = helper.getWritableDatabase(); // 获得可写的SQliteDatabase
55         db.delete("database", null, null);
56         db.close();
57     }

 

  Cursor是结果集游标,用于对结果集进行随机访问,与jdbc中的ResultSet作用很相似。使用moveToNext()方法可以将游标从当前行移动到下一行,如果已经移到了最后吧一行,返回结果为false,否则为true。另外Cursor还用常用的moveToPrevious()方法(用于将游标从当前行移动到上一行,如果已经移动到了结果集的第一行,返回值为false,否则为true)、moveToFirst()方法(用于将游标移动到结果集的第一行,如果结果集为空,返回值为false,否则为true)和moveToLast()方法(用于将游标移动到结果集的最后一行,如果结果集为空,返回值为false,否则为true);

 

使用事务操作Sqlite数据库
 
    SQLiteDatabase db = null;
          try {
           db = helper.getWritableDatabase();
           db.beginTransaction(); // 开启事务
           String sql = "insert into database values(null,'zhangsan','20')";
           db.execSQL(sql);
           db.execSQL("update database set name=? where age=?", new Object[]{"wangwu", 20});
           db.setTransactionSuccessful(); // 调用此方法会在执行到endTransaction()方法时提交当前事务,如果不调用此方法会回滚事务
          }finally{
               if(db != null){
               db.endTransaction(); // 事务的结束的标志,决定是提交事务还是回滚事务
           }
      }
          db.close();
 
    使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction()方法时会检查事务的标志是否成功,如果程序执行到endTransaction()方法之前调用了setTransactionSuccessful()方法设置事务的标志为成功,则提交事务,如果没有调用setTransactionSuccessful()方法则回滚事务

 

posted on 2015-05-18 16:05  luojinwei  阅读(218)  评论(0编辑  收藏  举报