1.SQLite简介:
SQLite是Android内置的一款轻量级的数据库,运算速度非常快。Android为了我们方便对数据库的管理,专门以提供了SQLiteOpenHelper帮助类,这个类是一个抽象类,所以我们需要创建自己的类去继承他。
2.需要实现的两个抽象方法:
SQLiteOpenHelper中有两个抽象方法,onCreate()和onUpgrade(),我们必须实现这两个方法。
3.需要重写的构造方法(2个,一般重写参数较少的):
public MyDataBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); }
四个参数分别是:上下文,数据库的名称,允许我们在查询数据时返回的一个自定义的cursor(一般为null),当前数据库的版本号。构建出SQLiteOpenHelper的实例之后,在调用它的getReadableDataBase()或getWritableDataBase()就可以创建数据库了,数据库文件会存放在/data/data/包名/databases/目录下。
4.SQLiteOpenHelper中两个比较重要的实例方法:
getReadableDataBase()和getWritableDataBase(),这两个方法都可以创建或打开一个现有的数据库(如果数据库已经存在则直接打开,否则进行创建),并且返回一个可以对数据库进行读写操作的对象。但,当数据库不可写入时(磁盘满),getReadableDataBase()返回的对象以只读的方式打开数据库,而getWritableDataBase()将出现异常。
SQLiteOpenHelper的实例类
MainActivity类
布局文件
5.或许有些朋友已经看到,SQLiteOpenHelper的onUpgrade()还没有用到,下面我们就来了解下这个方法是如何使用的。
比如说我们现在还想在原来的类中再继续创建另一张表,那按照我们之前的做法,我们只需要写出创建表的语句,在MyDataBaseHelper类的onCreate()中执行创建语句就可以了
public class MyDataBaseHelper extends SQLiteOpenHelper { /** * 1.创建表 * primary key 唯一键,integer整型,text 文本,blob二进制类型,real浮点型,autoincrement自增长 * 2.给出Context */ public static final String CREATE_BOOK = "create table book(id integer primary key autoincrement,author text,price real,pages integer,name text)"; private Context mContext; public static final String CREATE_AUTHOR = "create table author(id integer primary key autoincrement,author_name text)";
public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK);//创建表语句 db.execSQL(CREATE_AUTHOR); Toast.makeText(mContext, "创建成功", Toast.LENGTH_SHORT).show(); }
但是,当我们执行完上述操作后,根本没有吐司出提示说表创建成功,因为我们已经创建过BookStore.db表了,MyDataBaseHelper()的onCreate()不会再次执行。如果我们想要吐司表创建成功,我们需要把项目卸载重新运行就可以了。或者我们此时就可以知道onUpgrade()的作用啦,只需几行代码就可以搞定,详情看下面代码。
@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table if exists Book"); db.execSQL("drop table if exists Author"); onCreate(db); }
我们可以看到在onUpgrade()中,执行了两条DROP语句【
Drop
:用于删除表(注:将表的结构、属性、索引也会被删除。
)
语法:
Drop Table
表名称
Drop:用于删除表(注:将表的结构、属性、索引也会被删除。) 语法:Drop Table 表名称 】,就是如果发现数据库中存在上述两张表的话就先删除,然后在调用onCreate()去重新创建表。(这里先将存在的表删除,是因为如果创建表时发现表已经存在会报错)。 那么接下来我们的任务就是执行onUpgrage(),要想执行此方法,只需要将SQLiteOpenHelper的构造函数的第四个参数改的比原来的数大就好了。改为2表示我们对数据库进行了升级。这样直接运行项目就可以创建两张表啦~~~@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //参数:上下文,数据库名称,允许我们返回的自定义的cursor(一般为null),版本号。 dbHelper = new MyDataBaseHelper(this,"BookStore.db",null,2); initView(); }
总结,这只是Android内置SQLite的基本使用方法,会了最基本的用法,相信你能写出更多好的代码。。。。