Android SQLite乐学成语项目之数据库存储
2016-06-14 18:22
267 查看
一.SQLite介绍
1SQLite是一种轻量级的小型数据库,虽然比较小,但是功能相对比较完善,一些常见的数据库基本功能也具有,在现在的嵌入式系统中使用该数据库的比较多,因为它占用系统资源很少。Android系统中也不例外,也是采用SQLite,本节中就学习下在andorid中怎样使用该数据库来存放数据,并且对SQLite完成简单的新建,更新,查询,删除等操作。
3.SQLite支持五种数据类型:NULL,INTEGER,REAL(浮点数),TEXT(字符串文本)和BLOB(二进制对象),可以对varchar,char等其他数据类型可以进行保存;SQLite有个显著的特点:可以把各种数据类型的数据保存到任何字段中,不受字段所声明的数据类型的影响。 另外,SQLite 在解析CREATE TABLE 语句时, 会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息。二.相关的类
1.SQLiteOpenHelper:抽象类,可以通过继承该类,重写数据库创建以及更新的方法, 通过该类的对象获得数据库实例,或者关闭数据库。2.SQLiteDatabase:数据库访问类:可以通过该类的对象来对数据库做一些增删改查的操作。
3.Cursor:游标,类似于JDBC里的resultset(结果集),可以简单理解为指向数据库中某 一个记录的指针。
三.创建数据库
为了能够更加方便的管理数据库,专门提供了SQLiteOpenHelper帮助类,借助这个类就可以非常简单的对数据库进行常和升级。首先要知道SQLiteOpenHelper是一个抽象类,如果使用它的话,需要创建一个自己的帮助类去继承它。
SQLiteOpenHelper中的两个抽象方法是:
1.onCreate();
2.onUpgrade();
必须在自己的帮助类里重写这两个方法,然后分别在这两个方法中去实现创建和升级数据库。
SQLiteOpenHelper中两个非常重要的实例方法:
1.getReadableDatabase();
2.getWriteableDatabase();
四.程序
package com.example.happyidiom.db; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import com.example.happyidioms.R; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.os.Environment; import android.util.Log; public class DBOpenHelper { private final int BUFFER_SIZE=400000; public static final String DB_NAME="idioms.db"; public static final String PACKAGE_NAME="com.example.happyidiom"; public static final String DB_PATH="/data" + Environment.getDataDirectory().getAbsolutePath()+"/" + PACKAGE_NAME+"/databases"; private Context context; public DBOpenHelper(Context context) { // TODO Auto-generated constructor stub this.context=context; } //数据库 public SQLiteDatabase openDatabase(){ try{ File myDataPath=new File(DB_PATH); if(!myDataPath.exists()){ myDataPath.mkdirs();//如果没有这个目录则创建 } String dbfile=myDataPath+"/"+DB_NAME; if(!(new File(dbfile).exists())){ InputStream is = context.getResources().openRawResource(R.raw.idioms); FileOutputStream fos = new FileOutputStream(dbfile); byte[] buffer=new byte[BUFFER_SIZE]; int count=0; while((count=is.read(buffer))>0){ fos.write(buffer,0,count); } fos.close(); is.close(); } SQLiteDatabase db=SQLiteDatabase.openOrCreateDatabase(dbfile, null); return db; }catch(FileNotFoundException e){ Log.e("Database", "File not found"); e.printStackTrace(); }catch (IOException e) { // TODO: handle exception Log.e("Datebase", "IO exception"); e.printStackTrace(); } return null; }编写测试程序:
package com.example.happyidiom.test; /*数据库测试类*/ import com.example.happyidiom.db.DBOpenHelper; import android.test.AndroidTestCase; public class DBOpenHelperTest extends AndroidTestCase { public void testDBOpen(){ DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext()); dbOpenHelper.openDatabase(); } }
相关文章推荐
- Android高级之第十一讲Hybird开发
- Android的MediaPlayer错误
- Android 反序列化异常EOFException的解决
- Android 自定义View之路——Paint
- android 发布流程
- Android标签流控件的实现
- Android-安装APK的代码
- Android图片加载库的理解
- 安卓之相机Camera
- 深入浅出RxJava四-在Android中使用响应式编程
- RelativeLayout
- android viewFlipper 循环播放图片
- 在Android中如何获取视频的第一帧图片并显示在一个ImageView中
- android 一个 textview 设置不同的字体大小和颜色
- Android入门--RadioButton事件和RadioButton值判断
- Android XML布局控件属性汇总
- Android基于开源项目的WheelView的时间、地址联动选择对话框
- Android_短信
- Android-自定义多TAB悬浮控件实现蘑菇街首页效果
- Android应用崩溃后异常捕获并重启并写入日志