基础学习总结(四)--SQLite

1. SQLiteDatabase
 
操作SQLite数据库的类。可以执行SQL语句,对数据库进行增、删、查、改的操作。也可以进行transaction的控制。很多类对数据库的操作最终都是通过SQLiteDatabase实例来调用执行的。
需要注意的是,数据库对于一个应用来说是私有的,并且在一个应用当中,数据库的名字也是惟一的。
 
 
2. SQLiteOpenHelper
 
创建数据库和数据库版本管理的辅助类。这是一个抽象类,所以我们一般都有一个SQLiteOpenHelper子类,需要继承实现
· void onCreate(SQLiteDatabase db)
在数据库第一次生成的时候会调用这个方法,一般我们在这个方法里边生成数据库表。
 
· void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
当数据库需要升级的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删除数据表,并建立新的数据表,当然是否还需要做其他的操作,完全取决于应用的需求。
 
而void onOpen(SQLiteDatabase db) 则可以选择重写。同时此类还有3个synchronized方法:void close(),SQLiteDatabasegetReadableDatabase(),SQLiteDatabasegetWritableDatabase()。
 
 
3. Cursor
 
游标。要注意这是一个接口。但很多时候我不需要知道它具体是哪个子类,直接按照API Doc里面提供的方法调用就行了。通过Cursor 我们可以对从数据库查询出来的结果集进行随机的读写访问。对于数据库的查询结果,一般是由子类SQLiteCursor返回的。

1. 加载驱动.
2. 连接数据库.
3. 操作数据库.

SQLite:一款轻量级的数据库,除了主键(Primark key)需要设置为Integer类型且填充数据必须是integer类型,其它字段均任意类型填充
字段属性与语法sqlserver类似,但无关键字

在android系统中提供了SQLiteOpenHelper抽象类,用于版本管理与操作:
onCreate:数据库创建时执行
onUpgrade:数据库更新版本时执行
onOpen:数据库打开连接时执行

实现SQLiteOpenHelper抽象类

 1 /*

 2  * 数据库帮助类

 3  * */

 4 public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {

 5 

 6     

 7     public PersonSQLiteOpenHelper(Context context) {

 8         //super(context, name, factory, version);

 9         /*

10          * context 上下文

11          * name    数据库名

12          * factory游标工厂

13          * version 版本,必须大于1*/

14         super(context, "cuiOne.db", null, 1);

15         // TODO Auto-generated constructor stub

16     }

17 

18     //数据库第一次创建时回调此方法

19     //初始化一些表

20     @Override

21     public void onCreate(SQLiteDatabase db) {

22         // TODO Auto-generated method stub

23         String sql="create table Person(_id integer primary key,age integer,name 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 }
View Code

 

使用sql语句实现数据的insert、query

 1 public class Persondao {

 2     PersonSQLiteOpenHelper mOpenHelper;//成员变量

 3     

 4     public Persondao(Context context){

 5         mOpenHelper=new PersonSQLiteOpenHelper(context);

 6     }

 7     

 8     public void insert(Person p){

 9         //赋给db写入权限

10         SQLiteDatabase db= mOpenHelper.getWritableDatabase();

11         //判断数据库状态是否为打开状态

12         if(db.isOpen()){

13             db.execSQL("insert into person(name,age) values(?,?);", new Object[]{p.getName(),p.getAge()});

14             db.close();

15         }

16     }

17     

18     public List<Person> queryAll(){

19         SQLiteDatabase db=mOpenHelper.getReadableDatabase();

20         if(db.isOpen()){

21             Cursor rawCur = db.rawQuery("select _id,age,name from Person", null);

22             if(rawCur!=null&&rawCur.getCount()>0){

23                 List<Person> list=new ArrayList<Person>();

24                 int id;int age;String name;

25                 while(rawCur.moveToNext()){

26                      id=rawCur.getInt(0);

27                      age=rawCur.getInt(1);

28                      name=rawCur.getString(1);

29                      list.add(new Person(id,age,name));

30                 }

31                 db.close();

32                 return list;

33             }

34             db.close();

35         }

36         return null;

37     }

38     

39     public     Person queryItem(int id){

40         SQLiteDatabase db=mOpenHelper.getReadableDatabase();

41         if(db.isOpen()){

42             Cursor cur=db.rawQuery("select _id,age,name from Person where _id=?;", new String[]{String.valueOf(id)});

43             //判断游标在移动到下一个位置时是否有值

44             if(cur!=null&&cur.moveToFirst()){

45                 int _id=cur.getInt(0);

46                 int age=cur.getInt(1);

47                 String name=cur.getString(2);

48                 db.close();

49                 return new Person(_id,age,name);

50             }

51             db.close();

52         }

53         return null;

54         

55     }

56 }
View Code

使用SQLite工具类实现i,d,u,q

public class PersonDao2 {



    private static final String TAG = "PersonDao2";

    private PersonSQLiteOpenHelper mOpenHelper;    // 数据库的帮助类对象



    public PersonDao2(Context context) {

        mOpenHelper = new PersonSQLiteOpenHelper(context);

    }

    

    /**

     * 添加到person表一条数据

     * @param person

     */

    public void insert(Person person) {

        SQLiteDatabase db = mOpenHelper.getWritableDatabase();

        if(db.isOpen()) {    // 如果数据库打开, 执行添加的操作

            

            ContentValues values = new ContentValues();

            values.put("name", person.getName());        // key作为要存储的列名, value对象列的值

            values.put("age", person.getAge());

            long id = db.insert("person", "name", values);

            Log.i(TAG, "id: " + id);

            

            db.close();    // 数据库关闭

        }

    }

    

    /**

     * 更据id删除记录

     * @param id

     */

    public void delete(int id) {

        SQLiteDatabase db = mOpenHelper.getWritableDatabase();    // 获得可写的数据库对象

        if(db.isOpen()) {    // 如果数据库打开, 执行添加的操作

            

            String whereClause = "_id = ?";

            String[] whereArgs = {id + ""};

            int count = db.delete("person", whereClause, whereArgs);

            Log.i(TAG, "删除了: " + count + "行");

            db.close();    // 数据库关闭

        }

    }

    



    /**

     * 根据id找到记录, 并且修改姓名

     * @param id

     * @param name

     */

    public void update(int id, String name) {

        SQLiteDatabase db = mOpenHelper.getWritableDatabase();

        if(db.isOpen()) {    // 如果数据库打开, 执行添加的操作

            ContentValues values = new ContentValues();

            values.put("name", name);

            

            int count  = db.update("person", values, "_id = ?", new String[]{id + ""});



            Log.i(TAG, "修改了: " + count + "行");

            

            db.close();    // 数据库关闭

        }

    }

    

    public List<Person> queryAll() {

        SQLiteDatabase db = mOpenHelper.getReadableDatabase();    // 获得一个只读的数据库对象

        if(db.isOpen()) {

            String[] columns = {"_id", "name", "age"};    // 需要的列

            String selection = null;    // 选择条件, 给null查询所有

            String[] selectionArgs = null;    // 选择条件的参数, 会把选择条件中的? 替换成数据中的值

            String groupBy = null;    // 分组语句  group by name

            String having = null;    // 过滤语句

            String orderBy = null;    // 排序

            

            Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);

            

            int id;

            String name;

            int age;

            if(cursor != null && cursor.getCount() > 0) {

                List<Person> personList = new ArrayList<Person>();

                

                while(cursor.moveToNext()) {    // 向下移一位, 知道最后一位, 不可以往下移动了, 停止.

                    id = cursor.getInt(0);

                    name = cursor.getString(1);

                    age = cursor.getInt(2);

                    

                    personList.add(new Person(id, name, age));

                }

                

                db.close();

                return personList;

            }

            db.close();

        }

        return null;

    }

    

    /**

     * 根据id查询人

     * @param id

     * @return

     */

    public Person queryItem(int id) {

        SQLiteDatabase db = mOpenHelper.getReadableDatabase();    // 获得一个只读的数据库对象

        if(db.isOpen()) {

            String[] columns = {"_id", "name", "age"};    // 需要的列

            String selection = "_id = ?";    // 选择条件, 给null查询所有

            String[] selectionArgs = {id + ""};    // 选择条件的参数, 会把选择条件中的? 替换成数据中的值

            String groupBy = null;    // 分组语句  group by name

            String having = null;    // 过滤语句

            String orderBy = null;    // 排序

            

            Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);

            

            if(cursor != null && cursor.moveToFirst()) {        // cursor对象不为null, 并且可以移动到第一行

                int _id = cursor.getInt(0);

                String name = cursor.getString(1);

                int age = cursor.getInt(2);

                

                db.close();

                return new Person(_id, name, age);

            }

            db.close();

        }

        return null;

    }

}

事务的使用:

// 开启事务
db.beginTransaction();

// 标记事务成功
db.setTransactionSuccessful();

// 停止事务
db.endTransaction();

你可能感兴趣的:(sqlite)