SQLiteOpenHelper api解释:

  • A helper class to manage database creation and version management.
  • You create a subclass implementing onCreate(android.database.sqlite.SQLiteDatabase), onUpgrade(android.database.sqlite.SQLiteDatabase, int, int) and optionally onOpen(android.database.sqlite.SQLiteDatabase), and this class takes care of opening the database if it exists, creating it if it does not, and upgrading it as necessary.Transactions are used to make sure the database is always in a sensible state.

那这两大串的英文是什么意思呢?我们一句一句来翻译:

  第一句:一个辅助类来管理数据库创建和版本管理。

        ---->也就是说用于创建、连接、维护数据库

  第二句:您创建一个子类实现  onCreate(android.database.sqlite.SQLiteDatabase)

               onUpgrade(android.database.sqlite。SQLiteDatabase,int,int)

            和可选  onOpen(android.database.sqlite.SQLiteDatabase)

     而且如果存在这类负责打开database,如果它不创造,升级是必要的。事务是用来确保数据库总是在一个合理的状态。                 

        ---->也就是说:1.用一个类继承SQLiteOpenHelper

                2.必须实现抽象方法 onCreate() 和onUpgrade() 方法

                3.如果有数据库,类可以负责打开数据库。

                4.如果这个数据库不能再做创作,升级是必要的。列如:当数据库表结构要添加一列,使用升级。

                5.这些所有的操作都是为了确保数据库在一个合理的状态。列如:新老用户的、新老版本的数据存储、添加、修改处理。

由于SQLiteOpenHelper没有空构造器,继承的类不能自动调用默认无参构造器,所以必须定义一个显式构造函数。

比如我们写一个MySQLiteOpenHelper 继承SQLiteOpenHelper

public class MySQLiteOpenHelper extends SQLiteOpenHelper{

    public MySQLiteOpenHelper(Context context, String name,CursorFactory factory, int version) {
super(context, name, factory, version);
} @Override
public void onCreate(SQLiteDatabase db) { } @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }

现在,我们看一下这个构造器  MySQLiteOpenHelper(Context context, String name,CursorFactory factory, int version)

  api :

    Create a helper object to create, open, and/or manage a database. The database is not actually created or opened until one of getWritableDatabase() or getReadableDatabase() is called.

  意思是:创建一个helper对象去创建、打开和/或管理数据库。数据库没有创建或打开直到getWritableDatabase()或getReadableDatabase()其中一个被调用。

    也就是说:1.创建一个helper   2.helper调用getWritableDatabase()或getReadableDatabase()时才可创建、打开一个数据库

  • Context                                       上下文(to use to open or create the database)用于打开或者创建一个上下文
  • name                                       数据库名
  • CursorFactory                             游标(to use for creating cursor objects, or null for the default)null
  • version                                      数据库版本号

四个参数,后三个可以在本类直接声明。前面我们也了解,Activity就是一个上下文。也就是说在Activity调用这个类的时候我们只要传入一个Activity就可以了。

所以我们修改这个构造器为:  

public class MySQLiteOpenHelper extends SQLiteOpenHelper{

    private static final String name = "mydata.db"; // 数据库名称
private static final int version = 2; // 数据库版本 public MySQLiteOpenHelper(Context context) {
super(context, name, null, version);
} @Override
public void onCreate(SQLiteDatabase db) { } @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }

在Activity中我们就可以这样用:

public class MainActivity extends Activity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获得Helper
MySQLiteOpenHelper openHelper = new MySQLiteOpenHelper(this);
    //也可以是 new MySQLiteOpenHelper(getApplicationContext())
    //创建或者打开数据库 
    SQLiteDatabase db = openHelper.getReadableDatabase();     //关闭数据库
    db.close();
  }
}

可能看到这,有的人就想起了File 文件。现在我们新建一个java项目 [new -->project-->java project]


public class File1 {

    public static void main(String[] args) throws Exception {
//声明一个File
File file = new File("info.text");
//生成File
FileOutputStream fos = new FileOutputStream(file);
//关闭io
fos.close(); }
}

当我们把FileOutputStream这行注释掉,运行run -->java application ,再把注释去掉,运行一次

我们发现,new File() 没有产生一个文件。这就是我注释里写的:声明。而 new FileOutputStream() 则是把File生成了。

同理,openHelper.getReadableDatabase(); 才是真正的创建、打开数据库。

下一篇:Android SQLiteOpenHelper(二) http://www.cnblogs.com/hxb2016/p/6118475.html

谢谢大家的关注(之前有事太忙)。从今天开始,诗词就告一段落。来一段时间的经典语录:世界上唯一不变的,就是一切都在变。

Android SQLiteOpenHelper(一)的更多相关文章

  1. Android SQLiteOpenHelper(二)

    上一篇我们已经了解了SQLiteOpenHelper 和 构造函数. 现在我们就来掌握一下:onCreate( )  onUpgrade( )  onDowngrade( ) public void ...

  2. Android SQLiteOpenHelper类的使用

    SQLiteOpenHelper类是Android平台提供的用于SQLite数据库的创建.打开以及版本管理的帮助类.一般需要继承并这个类并实现它的onCreate和onUpgrade方法,在构造方法中 ...

  3. android SQLiteOpenHelper使用示例

    我们大家都知道Android平台提供给我们一个数据库辅助类来创建或打开数据库,这个辅助类继承自SQLiteOpenHelper类,在该类的 构造器中,调用Context中的方法创建并打开一个指定名称的 ...

  4. android SQLiteOpenHelper 使用

    1.实体 package mydemo.mycom.demo2.entity; public class UserInfo { private int id; private String usern ...

  5. Android SQLiteOpenHelper Sqlite数据库升级onUpgrade

    Android Sqlite数据库升级,在Android APP开发之中,非常常见: 在确定原来的数据库版本号之后,在原来数据库版本号+1,就会执行onUpgrade方法,进行数据库升级操作: 在on ...

  6. Android SQLiteOpenHelper Sqlite数据库的创建与打开

    Android Sqlite数据库是一个怎样的数据库? 答:是一种嵌入式小型设备,移动设备,的数据库,应用在穿戴设备(例如:智能手表,计算手环 等等),移动设备(例如:Android系统类型的手机 等 ...

  7. Android SqliteOpenHelper详解

    一. SQLite介绍 SQLite是android内置的一个很小的关系型数据库. SQLite的官网是http://www.sqlite.org/,可以去下载一些文档或相关信息. 博客中有一篇有稍微 ...

  8. Android · SQLiteOpenHelper实例PrivateContactsDBHelper

    package privatecontact; import android.content.ContentValues; import android.content.Context; import ...

  9. 升级后开机就提示“android.process.acore”停止执行 --分析 解决方式

    OTA升级的,升级引发的全部问题都是能够解释的,有的能解决,有的不能解决. 一个项目报了这个问题. 升级后开机就提示"android.process.acore"停止执行 抓取 a ...

随机推荐

  1. spring多线程与定时任务

    本篇主要描述一下spring的多线程的使用与定时任务的使用. 1.spring多线程任务的使用 spring通过任务执行器TaskExecutor来实现多线程与并发编程.通常使用ThreadPoolT ...

  2. SDUTOJ 3312

    题目描述 给出一个n*n的矩阵,矩阵中只有0和1,现在有两种操作: 1 x y 将第x行第y列的数字改变(0变1,1变0) 2 x1 y1 x2 y2求由左上角(x1,y1)到右下角(x2,y2)组成 ...

  3. document.compatMode属性和获取鼠标的位置

    document.compatMode属性 document.compatMode用来判断当前浏览器采用的渲染方式. 官方解释: BackCompat:标准兼容模式关闭.CSS1Compat:标准兼容 ...

  4. 异常问题解决Error:Execution failed for task ':app:processDebugManifest'

    Error:Execution failed for task ':app:processDebugManifest' www.MyException.Cn  网友分享于:2015-12-28  浏览 ...

  5. 【Android】设置 LinearLayout 的样式

    前言 LinearLayout是最常用的控件之一,主要是用来进行排版布局,本人介绍如何给LinearLayout 增加边框样式,在增加样式之前的效果如下: 可以看得出来,每个LinearLayout几 ...

  6. Java 中的 static 使用之静态方法

    与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法.其实之前我们一直写的 main 方法就是静态方法.静态方法的使用如: 运行结果: 需要注意: 1. 静态方法中可以直接调用 ...

  7. 调度系统任务创建---Git部署项目(一)

    有任务要上线时,需要将任务所在的项目代码从git上取出,在调度系统中编译打包,分发大任务执行服务器上. 具体的任务可以参考:http://192.168.53.100:8090/jenkins/vie ...

  8. 转{QQ浏览器X5内核问题汇总}

    转自https://www.qianduan.net/qqliu-lan-qi-x5nei-he-wen-ti-hui-zong/ 常常被人问及微信中使用的X5内核的问题,其实我也不是很清楚,只知道它 ...

  9. linux应用程序开发-文件编程-库函数

    ---恢复内容开始--- c库函数文件操作独立于具体的系统平台,可移植性较好. 库函数-创建和打开 FILE*fopen(const char*filename,const char*mode) mo ...

  10. JavaScript学习笔记及知识点整理_3

    1.js的事件冒泡及阻止方法:事件冒泡的概念:在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事 ...