android SQLite数据库

来源:互联网 发布:linux安装spark 编辑:程序博客网 时间:2024/06/16 14:37

android是一个小型的设备,不可能安装一个Mysql数据库在我们的手机手,本身手机上的内存就有限,所以android嵌入了一个很小的关系型数据库就是SQLite,和其他数据库不同的是SQLite存储数据时不区分类型,


比如:一个字段声明为Integer类型,我们也可以存入一个字符串类型数据,一个字段声明为Boolean类型,我们也可以存储一个浮点型数据

除非是主键被定义为Integer,这时只能存储64位整数,


创建数据库表时可以不指定数据类型,但是在实际的项目开发中,肯定是每人这么写的,这样其他人没办法读懂,不利于后期的维护,


SQLite支持大部分sql的标准语句,增删改查都是通用的,分页查询和MYsql相同

SELECT * FROM person LIMIT 20 OFFSET 10

SELECT * FROM person LIMIT10,20

指的是从第10+1条开始取20条数据


在android中创建数据库

1:继承SQLiteOpenHelper,因为SQLiteOpenHelper是抽象的类,它里面有二个抽象的方法需要子类去具体实现,因为抽象类他不知道子类的业务需求是什么,所以只能做成抽象的方法了

2:重写onCreate()

3:重写onUpGrade()

现在写一个例子说明下:

MyHelper.java

package com.handcool.sqlite;


import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;


public class MyHelper extends SQLiteOpenHelper {
private static final String DB_NAME="handcool";
private static final int version = 1;
private static final String TAG = "MyHelper";
public MyHelper(Context context) {
super(context, DB_NAME, null, version);
}
/**
* 当数据库被创建的时候 会自动执行onCreate()方法,当已有数据库时,就不会再执行此方法
* 也就是说这个方法只会执行一次,一般在这都是创建表的结构
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE person(id,Integer,name varchar(20))");
Log.e(TAG,"onCreate方法执行了");
}
/**
* 从上面的构造函数中最后一个参数(version)我们知道这是数据库版本,从1开始,当数据库版本发生变化时,会执行onUpgrade()方法
* 一般添加什么字段啊 ,对数据库进行一些操作  都在这执行
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.e(TAG,"onUpgrade方法执行了");
}
}

这个类继承了SQLiteOpenHelper类,就代表着数据库,我们再写个单元测试,测试下他的结果;如图


就执行了onCreate()方法,而没有执行onUpgrade()方法,因为数据库版本没有升级,所以这个验证时对的,再看看表的结构


数据库文件在data/data/包名/databases目录下,请看截图:


我在这里放了一个错误,之前的数据库文件名后缀没有写.db,导致我 无法查看其表的结构,

原来好像是后缀名写不写都是可以的,今天没写就遇到了这个问题,


现在我把数据库版本改为2,看看打印的日记信息


发现oncreate()方法没有打印出来,所以我们可以总结为

1:oncreate()方法只有在数据库创建的时候才会调用,但数据库已存在时,不会执行oncreate()方法,

2:但数据库版本发生变化时,会执行onUpgra()方法


在android2.3以后api有点变化,当我们把数据库版本从3改为2时,意味着数据库版本降级,那么会执行

@Override
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
super.onDowngrade(db, oldVersion, newVersion);
}

这个方法















0 0