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 } }

02_SQliteOpenHelper介绍&oncreate方法介绍的更多相关文章

  1. PhoneGap 在 Android 上的插件开发方法介绍

    移动应用开发已经成为软件开发的一个重要方向,但是移动开发面临的一个重要问题就是跨平台的问题.PhoneGap 作为一个多平台的软件开发框架,提供了一次编写多个平台的运行.目前已经支持多达 6 个移动平 ...

  2. [转载]C#读写txt文件的两种方法介绍

    C#读写txt文件的两种方法介绍 by 大龙哥 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char ...

  3. winFrom 常用控件属性及方法介绍

    目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichTextBox控件 5.NumericUpDown控件 6.Button(按钮)控件 7.Gro ...

  4. fstream的使用方法介绍

    转载自:  fstream的使用方法介绍 - saga's blog - C++博客 http://www.cppblog.com/saga/archive/2007/06/19/26652.html ...

  5. Windows下获取本机IP地址方法介绍

    Windows下获取本机IP地址方法介绍 if((hostinfo = gethostbyname(name)) != NULL) { #if 1 ; printf("IP COUNT: % ...

  6. WebService服务调用方法介绍

    1 背景概述 由于在项目中需要多次调用webservice服务,本文主要总结了一下java调用WebService常见的6种方式,即:四种框架的五种调用方法以及使用AEAI ESB进行调用的方法. 2 ...

  7. C#读写txt文件的两种方法介绍

    C#读写txt文件的两种方法介绍 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出 ...

  8. jquery的ajax()函数传值中文乱码解决方法介绍

    jquery的ajax()函数传值中文乱码解决方法介绍,需要的朋友可以参考下 代码如下: $.ajax({ dataType : ‘json', type : ‘POST', url : ‘http: ...

  9. UploadifyAPI-上传插件属性和方法介绍

    上一篇文章简单的介绍了Uploadify上传插件的使用.但是对于常用的属性和方法并没有说明.授人以鱼不如授人以渔,我决定将常用的属性列举出来,供大伙参考参考.           Uploadify属 ...

随机推荐

  1. 【WPF】ComboBox:根据绑定选取、设置固定集合中的值

    问题场景 我有一个对象,里面有一个属性叫Limit,int类型.虽然int可取的范围很大,我想要在用户界面上限制Limit可取的值,暂且限制为5.10.15.20. 所以ComboBox绑定不是绑定常 ...

  2. 修改zend studio字符集

    zend studio是一款编辑PHP的很好的工具,但是它的默认字符集是GBK,如何修改成UTF-8呢? 一.修改整个编辑器的编码 其实很简单,如果你做的每一个项目都是固定的某一个字符集(如UTF-8 ...

  3. python之Matplotlib 和Numpy

    1.matplotlib http://www.cnblogs.com/TensorSense/p/6802280.html https://wenku.baidu.com/view/e1c15c9d ...

  4. 九度OJ 1006:ZOJ问题 (递归)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:18621 解决:3197 题目描述: 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. 是否AC的规则如下: 1. ...

  5. 九度OJ 1065:输出梯形 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5379 解决:2939 题目描述: 输入一个高度h,输出一个高为h,上底边为h的梯形. 输入: 一个整数h(1<=h<=1000 ...

  6. php函数: set_include_path

    <?php $p =get_include_path(); $p.=PATH_SEPARATOR.'./bp/'; $p.=PATH_SEPARATOR.'./CLI/'; $p.=PATH_S ...

  7. php标准库DirectoryIterator类的操作说明

    <?php $dir = new DirectoryIterator(dirname(__FILE__)); foreach ($dir as $fileInfo) { if ($fileInf ...

  8. JSDuck 安装---mac

    1.  如果你已经安装了xcode,安装Xcode command line tools,在终端输入 xcode-select --install 2.install RVM \curl -sSL h ...

  9. 利用iOS原生系统进行人脸识别+自定义滤镜(GPUImage)

    人脸识别+滤镜效果(基于GPUImage实现的自定义滤镜) 最近碰到一个好玩的需求.说要客户端这边判定一下是否有人脸.在有的基础上.对相片做进一步的美化滤镜处理. 首先是人脸的识别判定; //将图片对 ...

  10. wordpress,cos-html-cache静态化后,点击数失效问题的解决方案

    装了wordpress cos-html-cache 静态插件后,生成了静态文件,post-views等点击数插件就失效了, 找了一些,包括有个js版本的,需要用到post-views插件,我也不想装 ...