02_SQliteOpenHelper介绍&oncreate方法介绍

file:///D:/BaiduNetdiskDownload/adt-bundle-windows-x86_64_20140101/adt-bundle-windows-x86_64_20140101/sdk/docs/reference/android/database/sqlite/SQLiteOpenHelper.html

A helper class to manage database creation and version management.

You create a subclass implementing onCreate(SQLiteDatabase)onUpgrade(SQLiteDatabase, int, int) and optionally onOpen(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.

Open Declaration android.database.sqlite.SQLiteOpenHelper.SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version)



public SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version) 
Added in API level 1
Create a helper object to create, open, and/or manage a database. This method always returns very quickly. The database is not actually created or opened until one of getWritableDatabase() or getReadableDatabase() is called.

Parameters
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 
version  number of the database (starting at 1); if the database is older, onUpgrade(SQLiteDatabase, int, int) will be used to upgrade the database; if the database is newer, onDowngrade(SQLiteDatabase, int, int) will be used to downgrade the database  

context:上下文

name:数据库文件的名字,如果name=null就会在内存当中创建一个数据库。如果你只是想临时用一下,并不想把这个数据真正的保存成文件那就可以传一个null。

如果说你真正的想把你的数据保存到本地的存储文件的话,那你一定要给它起一个名字。内存只要是一掉电/手机关上了,内存的内容就都会被清空了。或者你的应用程序退出了,你的进程被系统回收掉之后你的内存里面的内容将毫无意义。你当前程序使用的这块内存就会分配给其他程序再去使用。所以真正的想把数据存储到磁盘上一定要把这个参数传进来,给它指定数据库文件的名字。

CursorFactory:游标工厂 JDBC查询之后会返回一个结果集ResultSet,这个ResultSet里面就会有一个游标。在安卓当中查询之后它返回的就是一个Cursor,就是游标。怎么去创建这个游标,就需要一个CursorFactory,游标工厂。如果用系统默认的游标工厂传一个null就可以了。基本上咱们在这里都用系统帮咱们创建的游标工厂。所以第三个参数传一个null即可。

version:数据库版本号。数据库的版本号必须从1开始。怎么去控制数据库的升级和降级,这就涉及到我把这个版本号从1变成2.说明我的数据库升级了,反之则是降级。


Open Declaration void com.itheima.sqlitehello.MyOpenHelper.onCreate(SQLiteDatabase db)


@Override


Overrides: onCreate(...) in SQLiteOpenHelper
public abstract void onCreate (SQLiteDatabase db) 
Added in API level 1
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.

Parameters
db  The database.  
Open Declaration android.database.sqlite.SQLiteDatabase



SQLiteDatabase has methods to create, delete, execute SQL commands, and perform other common database management tasks. 

 在安卓当中你的SQL一旦写错了会带来一系列的麻烦,因为它报错报的并不是很明确。所以可以把SQL之前先在Mysql试一试。SQL一旦写错了在安卓代码当中不太容易发现。

SQLite数据库 一般id都用_id开头。

 数据库文件没有被创建,自然SQL语句也就没有被执行。究竟什么时候会创建一个SQLite数据库呢?


package com.itheima.sqlitehello;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MyOpenHelper openHelper =  new  MyOpenHelper(this);
        
    }


}
package com.itheima.sqlitehello;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class MyOpenHelper extends SQLiteOpenHelper {

    /*public MyOpenHelper(Context context, String name, CursorFactory factory,
            int version) {*/
    public MyOpenHelper(Context context){
        //第一个参数上下文
        //第二个参数  数据库的名字 如果传入null 就是在内存中创建一个数据库 内存中的数据库在应用退出之后 数据就会丢失
        //如果是聊天记录之类我真正的想给它存起来,下一次再启动还想用那你就要给它存储到一个具体的数据库里面。这个名字就一定要传进来
        //第三个参数 游标工厂 如果使用系统默认的游标工厂就传入null
        //第四个参数  数据库的版本号 用版本号来控制数据库的升级和降级 版本号从1开始
        super(context, "itheima.db", null, 1);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
    //数据库第一次创建的时候就会调用onCreate
    //当数据库文件第一次创建的时候 会调用这个方法  在这个方法中  我们一般做表结构的创建和数据的初始化操作
    //能够跟关系型的数据库/SQLite的数据库进行操作的API就是SQLiteDatabase
    //_id sqlite id这一列的字段名 一般都习惯称为_id
    //sqlite数据库 都是字符串  存的时候没做数据类型的区分 都是用字符串存储的
    //写SQL语句也要按照标准的格式来。这么写是没有问题的,只不过存的时候都是用字符串存。比如说去取某一个数据,比如说getString()、getInt(),它在取的时候根据你调哪一个方法再把
    //这个字符串转化成相应的数据类型。这样就方便它底层的数据结构简单一些,存的都是字符串。
        db.execSQL("create table info(_id integer primary key autoincrement,name varchar(20),phone varchar(20))");
        System.out.println("onCreate被调用");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }

}
原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/7023114.html