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下载地址
相关文章推荐
- Android 高仿QQ5.2双向侧滑菜单DrawerLayout实现源码
- Android的输入事件分发机制笔记
- Android debug.keystore的密码
- Android对文件的读写
- Android 增强版百分比布局库 为了适配而扩展
- 异常:android.os.NetworkOnMainThreadException
- android KK版本号,如何更改蓝牙设备类型
- Android中的EditText有光标,弹不出输入法的问题
- Android实现透明指示层
- Android 语言切换实现(就是这么简单)
- Android SnackBar 使用的问题: Error inflating class android.support.design.widget.Snackbar$SnackbarLayout
- android XML文件注释
- Android4.4+ 外置SD卡不能写入 获取外置SD卡路径解决方案
- Android NDK编译本地文件以及引用第三方so文件
- Android中图片缓存的一些总结
- android 首页fragment切换
- Android JsonArray移除里面的一个对象
- Android Camera 预览图像被拉伸变形的解决方法【转】
- Android 摇一摇 之 震动片
- Android性能优化之一:ViewStub