一、Sqlite概述
Sqlite是一种轻量级的嵌入式关系型数据库。因为它体积小,直接由程序驱动,使用灵活而且功能强大,所以被广泛的应用在嵌入式平台、移动开发平台以及其他很多场景。
在Android开发中使用Sqlite数据库非常简单,只需要通过Android提供及的原生API即可基本完成所需要的操作。
二、Android中创建sqlite数据库
Android提供了一个操作Sqlite数据库的非常重要的类SqliteOpenHelper,它是一个抽象类,新建一个类去继承它:
package com.example.sqlitedemo;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
/**
* Created by chuibai on 2017/2/17.<br />
*/
public class MyHelper extends SQLiteOpenHelper {
private static final String TAG = "MyHelper";
/**
* 构造方法
* @param context 上下文对象
* @param name 数据库名称
* @param factory 游标工厂
* @param version 版本号
*/
public MyHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
/**
* 由于四个参数的构造方法使用比较少,这里编写一个只需要传入一个参数的构造方法去调用四个参数的构造方法,
* 其中数据库名以及版本号在{@link Constant}中定义,游标工厂为null
* @param context 上下文对象
*/
public MyHelper(Context context){
this(context,Constant.DB_NAME,null,Constant.DB_VERSION);
}
/**
* 在数据库创建的时候被调用,这个方法一般来说只会调用一次,除非数据库被删掉
* @param sqLiteDatabase
*/
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String sql = "create table " + Constant.TABLE_NAME + "(" + Constant._ID + " Integer primary key ,"
+ Constant.NAME + " varchar(20) ," + Constant.AGE + " Integer," + Constant.RESPONSIBILITY + " varchar(20))";
sqLiteDatabase.execSQL(sql);
Log.e(TAG,"---------onCreate----------");
}
/**
* 在更新的时候被调用
* @param sqLiteDatabase 被更新的数据库
* @param oldVersion 老的版本号
* @param newVersion 新的版本号
*/
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
}
}
Sqlite数据库的创建时机为第一次尝试打开数据库而数据库不存在的时候,执行onCreate方法进行创建,相关的两个方法是:
helper.getReadableDatabase();
helper.getWritableDatabase();
这两个方法为取得数据库对象,取得的数据库对象都是可读可写的,只在磁盘已满的时候,前者是只读的。
在布局文件中添加一个简单的按钮:
<Button
android:id="@+id/create"
android:text="创建数据库"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"
/>
定义其点击事件:
public void click(View v){
switch (v.getId()){
case R.id.create:
MyHelper helper = new MyHelper(this);
SQLiteDatabase db = helper.getReadableDatabase();
//数据库用完关闭
db.close();
break;
}
}
运行,点击“创建数据库”按钮
![](https://i-blog.csdnimg.cn/blog_migrate/46acfa3a427f09fda160942c62fd9c49.png)
在Android Device Monitor中的File Explorer中查看
![](https://i-blog.csdnimg.cn/blog_migrate/77230c4089c12f6a7329ded4c462cb36.png)
生成了一个Sqlite数据库文件。在Sqlite Expert中查看
这样,就完成了数据库的创建。
三、对Sqlite数据库的增删改
对Sqlite数据库的更改一般是通过执行简单的SQL语句来进行。主要是以下两个操作
SQLiteDatabase db = helper.getReadableDatabase();
db.execSQL("一个合法的sql语句");
这样就可以执行数据库的增删改操作了。由于execSQL方法返回的是void类型,所以如果要执行查询操作的话此方法不适用。
在布局文件中添加三个按钮:
<Button
android:id="@+id/insert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"
android:text="插入数据"/>
<Button
android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"
android:text="删除数据"/>
<Button
android:id="@+id/update"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"
android:text="修改数据"/>
click方法修改为:
public void click(View v){
MyHelper helper = new MyHelper(this);
SQLiteDatabase db = helper.getReadableDatabase();
String sql;
switch (v.getId()){
case R.id.create:
break;
case R.id.insert:
sql = "insert into person values('1','chuibai','24','android development')";
db.execSQL(sql);
sql = "insert into person values('2','zhanxiaofan','24','ios development')";
db.execSQL(sql);
break;
case R.id.delete:
sql = "delete from person where " + Constant._ID + " = 2";
db.execSQL(sql);
break;
case R.id.update:
sql = "update person set " + Constant.AGE + "=23 where " + Constant._ID + " = 1";
db.execSQL(sql);
break;
}
//数据库用完关闭
if(db != null) db.close();
}
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/7fe919fa50a03255b00e5e96c8644097.png)
当然,除了直接执行SQL语句这种方法外,android还提供了另外一种封装好的API的方式进行操作,这里不记录。
四、查询Sqlite数据库
在布局文件中增加两个控件
<Button
android:id="@+id/query"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"
android:text="查询数据"/>
<TextView
android:id="@+id/result"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
click方法改为:
public void click(View v){
MyHelper helper = new MyHelper(this);
SQLiteDatabase db = helper.getReadableDatabase();
String sql;
switch (v.getId()){
case R.id.create:
break;
case R.id.insert:
sql = "insert into person values('1','chuibai','24','android development')";
db.execSQL(sql);
sql = "insert into person values('2','zhanxiaofan','24','ios development')";
db.execSQL(sql);
break;
case R.id.delete:
sql = "delete from person where " + Constant._ID + " = 2";
db.execSQL(sql);
break;
case R.id.update:
sql = "update person set " + Constant.AGE + "=23 where " + Constant._ID + " = 1";
db.execSQL(sql);
break;
case R.id.query:
TextView result = (TextView)findViewById(R.id.result);
sql = "select " + Constant.NAME + " from person where " + Constant._ID + "=?";
Cursor cursor = db.rawQuery(sql, new String[]{1+""});
while(cursor.moveToNext())
result.append(cursor.getString(0));
//cursor也需要关闭
cursor.close();
break;
}
//数据库用完关闭
if(db != null) db.close();
}
运行结果: