您的位置:首页 > 移动开发 > Android开发

Android下SQLite数据库学习笔记1——SQLite数据库的使用

2015-08-24 17:49 477 查看

SQLite数据库

移动平台的嵌入式关系型数据库

所以他所支持的数据类型就比较少,NULL,INTEGER,REAL(浮点数字),TEXT(字符串文本),BLOB(二进制对象)这五种,但实际上,SQLite3也接受varchar(n),char(n),等数据类型,只不过在运算或保存的时候,会转换成对应的五中数据类型。

最大的特点:你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么,

注意:定义为主键的字段只能存储64位的整数,当保存其他类型字段的时候,会报错

SQLite在解析CREATE TABLE语句时,会忽略语句中跟在字段后面的数据类型信息,写上只是为了代码易于理解。

SQLiteOpenHelper

数据库创建于打开的帮助类,需要创建实现类

实现类需要实现的方法

构造方法

public PersonSQLiteOpenHelper(Context context, String name,CursorFactory factory, int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}


参数介绍:

context:to use to open or create the database(上下文,告诉程序,数据库创建在那个目录下)

name:of the database file, or null for an in-memory database(数据库文件的名字)

factory:to use for creating cursor objects, or null for the default(用来创建游标对象,可以设为null,使用默认的结果集的指针。游标工厂)

version:number of the database (starting at 1); if the database is older, onUpgrade will be used to upgrade the database; if the database is newer, onDowngrade will be used to downgrade the database(数据库的版本,最小是从1开始)

onCreate方法(需要重写父类的方法)

@Override
public void onCreate(SQLiteDatabase db) {
// 初始化数据库的表结构
db.execSQL("create table person (id integer primary key autoincrement, name varchar(20), number varchar(20))");
}


Called when the database is created for the first time. This is where the creation of tables and the initial population of the tables should happen.(当数据库第一次被调用的时候被创建,在此定义数据库的表结构,和初始化数据)

onUpgrade方法

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}


Called when the database needs to be upgraded.(当数据库需要更新的时候调用)

创建数据库

new出数据库帮助类对象后只有调用getWritableDatabase()或者getReadableDatabase()方法,数据库才会被创建

创建测试:

另建一个专门测试的包,新建测试类,继承AndroidTestCase类(介绍:Extend this if you need to access Resources or other things that depend on Activity Context)

新建方法

public class TestPersonDB extends AndroidTestCase {

public void testCreateDB() throws Exception {
PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(getContext());
helper.getWritableDatabase();
}

}


帮助类可以通过框架提供的getContext来获取context

此时如果直接直接对这个方法Run AS Android JUnit Test会报错

数据库 does not specify a android.test.InstrumentationTestRunner instrumentation or does not declare uses-library android.test.runner in its AndroidManifest.xml

即在这个项目里的AndroidManifest.xml文件里缺少instrumenttation,和uses-library

解决方法:在AndroidManifest.xml文件里配置:

1.<instrumentation android:name="android.test.InstrumentationTestRunner"android:targetPackage="com.jxust.db" />

2.把<uses-library android:name="android.test.runner" />配在<application></applocation>之间




这时就可以对这个方法Run AS>Android JUnit Test,成功。

将项目部署在模拟器上后,在data/data/com.jxust.db文件夹下,可以发现多了一个database文件夹,哪里有我们新建的数据库文件



导出文件用SQLite Expert软件查看数据库的结构,发现除了我们建的表,还多了一个”android_metadata”表。



这是由系统自动创建出来的,只有一个内容locale这时google攻城狮为了方便以后做扩展而定义出来的表,希望对数据库也能国际化

SQLiteExpertPers下载地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: