SQLite简介
亮点:
① 轻 轻量级数据库 SQLite和C/S模式的数据库软件不同 体积小 没有服务端客户端 只要一个动态库就可以工作 (Linux下300多K)② 绿 核心引擎本身不依赖第三方的软件,不需要安装 拷贝即可使用③ 单一文件 一个数据库只有一个文件④ 跨平台 支持多个嵌入式设备
槽点:
① 多线程性能差
② 不支持全部的SQL
何时使用数据库保存数据: 当有大量结构相似的数据需要保存 比如 短信 电话本 聊天记录
Android下创建SQLite数据库
1 核心类
① SQLiteOpenHelper
② SQLiteDataBase
2 使用方法
第一步: 创建一个类继承 SQLiteOpenHelper 并实现父类的构造
public class MySQLOpenHelper extends SQLiteOpenHelper {
public MySQLOpenHelper(Context context) {
/**第一个参数 上下文
第二个参数 创建的数据库文件名字
第三个参数 游标工厂 通过游标工厂可以获得执行查询语句的返回值 Curor
可以传 null 采用默认的游标工厂
第四个参数 数据库的版本号 从1开始
**/
super(context, "itheima.db", null, 1);
}
第二步 从写onCreate 方法 和onUpgrade 方法
第三步 在Activity中 创建MySQLOpenHelper对象( 注意 !!!! 至此并没有创建数据库)
第四部 调用 MySQLOpenHelper的getReadableDatabase或getWriteableDatabase方法获取SQLiteDataBase对象
public class MainActivity extends Activity {
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MySQLOpenHelper openHelper = new MySQLOpenHelper(this);
//获取SQLiteDatabase对象 如果数据库不存在则创建 如果存在则打开 如果磁盘空间满则出错
db = openHelper.getWritableDatabase();
//与getWritableDatabase功能类似 但如果磁盘空间满则会返回一个只读的数据库
db = openHelper.getReadableDatabase();
}
SQLiteOpenHelper的oncreate方法 和 onUpgrade方法
onCreate方法(必须实现的方法)
当调用getReadableDatabase或getWriteableDatabase方法 第一次创建数据库的时候会执行这个方法
作用: 在这个方法中做创建表 和初始化数据的操作
@Override
public void onCreate(SQLiteDatabase db) {
//适合做创建表 初始化数据的操作
db.execSQL("create table info (_id integer primary key autoincrement, name varchar(20),phone varchar(20))");
}
onUpgrade方法(必须实现的方法)
当调用getReadableDatabase或getWriteableDatabase方法时 如果数据库版本号变大 则会调用这个方法
作用: 在这个方法中做数据库或表结构修改的操作 比如给表添加字段 或给数据库增加新的表
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//通过oldVersion 和newVersion 可以判断当前版本号和最新的版本号
//真实开发环境可能会针对不同的数据库版本做不同的操作
db.execSQL("alter table info add age integer");
}
onDowngrade方法(可选)
当调用getReadableDatabase或getWriteableDatabase方法时 如果数据库版本号变小 则会调用这个方法
作用: 处理数据库版本降级的操作 如果不重写这个方法 则默认数据库降级会抛异常
@SuppressLint("NewApi") @Override
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//处理数据库降级的需求 注意 super.onDowngrade 一定要删掉 否则如果数据库降级依然会抛异常
//super.onDowngrade(db, oldVersion, newVersion);
//一般很少做数据库降级的操作 不一定要实现
}
注意 : onCreate onUpgrade 由系统调用 不需要手动调用