Context和SQLiteOpenHelper创建数据库

编程技术  /  houtizong 发布于 3年前   68

       一直以为安卓数据库的创建就是使用SQLiteOpenHelper创建,但是最近在android的一本书上看到了Context也可以创建数据库,下面我们一起分析这两种方式创建数据库的方式和区别,重点在SQLiteOpenHelper

 

 

一:SQLiteOpenHelper创建数据库:

 

1,SQLiteOpenHelper是一个抽象类,使用SQLiteOpenHelper创建数据库需要使用类来继承这个抽象的方法,SQLiteOpenHelper用来创建,打开,升级数据库的最佳方式,SQLiteOpenHelper不会在程序启动时就直接创建数据库 而是当需要需要操作是先检查数据库是否存在 如果不存在就会执行SQLiteOpenHelper的onCreate()方法

 

    2,SQLiteOpenHelper会在打开数据库实例后来缓存数据库对象,以便使用数据库时更加方便,而不是在应用程序中环讯打开

 

    3,在进行数据库的写入数据时,需要判断是否有权限,磁盘是否还能进行写的操作,getWritableDatabase();获得数据库的操作对象

 

  创建数据数据库的表和结果

package com.sqlite.DB;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;/** *  * @author Administrator Sqlite的简单使用 *  *         SQLite是android中内嵌的,不需要自己安装 *  *         SQLite的使用,创建数据库的类继承SQLiteOpenHelper类 ,重写三个方法 OnCreate();创建数据库 *         OnUpgrading();跟新数据库 *  *  */public class DBAdapter extends SQLiteOpenHelper {// static final String KEY_ROWID = "_id";// static final String KEY_NAME = "name";// static final String KEY_EMAIL = "email";// static final String TAG = "DBAdapter";// static final String DATABASE_NAME = "MyDB";// static final String DATABASE_TABLE = "contacts";// static final int DATABASE_VERSION = 1;// static final String DATABASE_CERATE =// "create table contacts(_id integer primary key autoincrement,"// + "name text not null,email text not null);";// 数据库类的构造构造构造方法public DBAdapter(Context context, String name, CursorFactory factory,int version) {super(context, name, factory, version);}@Override// 创建表public void onCreate(SQLiteDatabase db) {//创建表String sql = "create table contacts('_id integer primary key autoincrement,name text not null,callphone integernoy null')";db.execSQL(sql);}@Override// 数据库的版本改变时,触发该方法public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}

 

创建数据库并操作数据库

package com.sqlite.DB;import android.app.Activity;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.provider.Contacts.Intents.Insert;//操作操作数据库的类public class DemoDB extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//创建SQLiteOpenHelper对象需要重写四个参数//参数一:上下文//参数二:数据库的创建的数据库名字//参数三:游标工厂表示使用系统的默认游标 一般为null//参数四:版本号//创建数据库DBAdapter db = new DBAdapter(this, "main_user.db", null, 1);//判断数据库是否可写,不可写提示,获得数据库的操作对象SQLiteDatabase database=db.getWritableDatabase();if(database==null){//获得写的操作database=db.getReadableDatabase();}//插入数据String sql="insert into contacts(null,'张丹枫',13409909089)";database.execSQL(sql);//执行sql语句database.close();//数据库的使用完后必须关闭}}

 

二;使用Context创建数据库等操作

 

     使用Context对象的openOrCreateDatabase操作数据库,而不是使用SQLiteOpenHelper 创建数据库

 

//使用上下文创建数据库//参数一:数据库的名字//参数二:数据库的模式//参数三:游标  一般为nullSQLiteDatabase db=this.openOrCreateDatabase("user", MODE_PRIVATE, null);

 

 

 

创建数据库后必须要出路原来SQLiteOpenHelper 的onCreate()创建数据库和更新数据库的方法onUpgrade(),这时就需要execSQl方法来处理,这种方式将数据库的创建和打开推迟到需要的时候进行操作,是一种比较友好的方式

 

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客