安卓数据库的使用方式

简介

该博客主要是为安卓数据库开发做的笔记,该笔记肯定有很多不完善的地方,希望dalao们及时指正,不胜感激。该笔记很大程度上参考了《第一行代码》第二版,很多细节大家可以参考书籍,本笔记主要是一个总结。

SQLiteOpenHelper

类的简介

SQLiteOpenHelper用于创建和升级数据库。在安卓的数据库系统中,一旦创建了一个数据库的表,那么这个表会一致存在于应用的文件夹中,除非程序被卸载。这是一个抽象类,一般我们需要继承并实现这个抽象类。该类有两个核心的函数:onCreate()onUpgrade()。前者用于创建数据库,后者用来更新数据库。一旦数据库的表创建后,就不能随便更改格式,除非卸载这个表并重新建立,或者使用onUpgrade()函数更新表的结构。

构造函数

假设myDataBaseHelper这个类继承了SQLiteOpenHelper:

public class myDataBaseHelper extends SQLiteOpenHelper{
}

那么我们需要在构造函数中进行如下的声明:

    public myDataBaseHelper(Context context, String name,
                            SQLiteDatabase.CursorFactory factory, int version){
        super(context, name, factory, version);

    }

context是当前的上下文环境;name是自定义的数据库的名字,factory一般是表示查询时传入的Cursor,一般传入null,需要时查询; 最后一个时数据库的版本,用于升级。

onCreate() 函数简介

该函数用于建表。因为构造函数创建了一个数据库,那么在创建的数据库中需要根据需求建表,不懂的自己看数据库原理吧。。。构造函数中一般是写建表的SQL语句,我们一般以静态成员的方式定义建表语句,然后执行。

    @Override
    public void onCreate(SQLiteDatabase db){
        db.execSQL(CREATE_BOOK);
    }

CREATE_BOOK时建表语句,在这里定义成静态String类型, 当定义玩数据库后,就会根据语句的含义在相应的db中建立一个表,如果之前那个表存在,不会建立新的表。注意,这里的db是自己命名的一个数据库,比如我们可以传入"BookDB.db"表示建立或者使用BookDB.db这个数据库。

一般来说,定义好数据库后,会调用getWritableDatabase()或者getReadableDatabase()方法,通过这两函数进行数据库的构建。实际上,这两个函数调用了onCreate函数,如果数据库已经存在了,这两个函数会返回一个数据库对象。

onUpgrade() 函数简介

该函数用于数据库的更新操作。如果我们想要在已有的数据库中添加一个新的表,需要重写并调用这个方法。当然,建立新表的语句在onCreate方法中完成。
方法如下:

@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
        // 如果存在Book这个表,那么把表删除,一般是根据需要进行操作
        // db.execSQL("drop table if exists Book");
        // 创建新版本的数据库
        onCreate(db);
    }

重写完这个方法后,在调用构造函数myDataBaseHelper时,仅仅需要把version参数改成比之前的高一个版本即可。调用完构造函数后,在执行getWritableDatabase()或者getReadableDatabase()方法,进行数据库的构建

SQLiteDatabase

这是一个数据库对象,用于对数据库进行”增、删、改、查”的操作。因为SQLiteOpenHelpergetWritableDatabase()或者getReadableDatabase()方法返回这个类型的对象,我们需要定义一个该类型的对象来引用这个返回。

insert插入操作

SQLiteDatabase::insert("Book", null, values)Book是数据库中表的名字;第二个参数为限制条件,一般传入null,需要时再查询;values是要传入的数据,是ContentValues数据类型。

// 添加数据
ContentValues values=new ContentValues();
// 第一个参数是列名
values.put("name", "The Da Vinci Code");
values.put("price",16.96);
// 插入数据
db.insert("Book",null,values);

update()更新方法

// 建立数据库
dhHelper=new myDataBase(this, "BookStore.db",null,2);
// 获取相应的数据库对象
SQLiteDatabase db=new dbHelper.getWritableDatabase();
// 设置更改的数据
ContentValues values=new ContentValues();
values.put("price",10.99);
// 更新数据
db.update("Book",values,"name=?",new String[]{"The Da Vinci Code"});

db.update("Book",values,"name=?",new String[]{"The Da Vinci Code"})中的第一个参数表示表的名称;第二个参数表示更新的数值;第三个参数是个占位符,相当于where语句;第四个参数提供字符串数组,为第三个参数指定相应的内容。

delete删除操作

// 建立数据库
dhHelper=new myDataBase(this, "BookStore.db",null,2);
// 获取相应的数据库对象
SQLiteDatabase db=new dbHelper.getWritableDatabase();
// 删除数据
db.update("Book","page>?",new String[]{"500"});

三个参数分别是:表明、where限制语句、限制条件的具体内容

query()查询操作

该函数有7个参数,分别是:
这里写图片描述
一般根据需要进行选取。

调用完之后会返回一个Cursor对象,查询到的所有对象都从这个对象中取出。
比如:

/ 建立数据库
dhHelper=new myDataBase(this, "BookStore.db",null,2);
// 获取相应的数据库对象
SQLiteDatabase db=new dbHelper.getWritableDatabase();

// 获取要查询的数据对象,在这里获取整个表的内容
Cursor cursor=db.query("Book",null,null,null,null,null,null);
// 遍历所有的元素
if(cursot.moveToFirst()){
    do{
        String name=cursor.getString(cursor.getColumnIndex("pages"));
        String name=curosr.getString(cursor.getColumnIndex("name"));
    }while(cursor.moveToNext());
}
cursor.close();  // 在这里释放掉所有的元素

也可以使用原生的数据库语句进行查询,在这里不在赘述,直接查找有关手册即可。

总结

SQLiteOpenHelper用于建立和更新数据库, SQLiteDatabase用于获取前者建立的数据库对象,并在获得的数据库对象中,对有关表进行操作。 两者配合使用,完成一般数据库的操作。

猜你喜欢

转载自blog.csdn.net/qq_35976351/article/details/80114627