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. Angular1.0路由的Hashbang和HTML5模式

    原文答主jupiter http://stackoverflow.com/questions/16677528/location-switching-between-html5-and-hashban ...

  2. Linux 开启端口,操作防火墙

    命令行方式:    添加10002端口方法 1.vi etc/sysconfig/iptables 2. 开放端口命令:-A INPUT -p tcp -m state --state NEW -m ...

  3. python之Matplotlib 和Numpy

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

  4. 基于EasyDarwin框架实现EasyNVR H5无插件直播流媒体服务器方案

    在之前的一篇博客<web无插件播放RTSP摄像机方案,拒绝插件,拥抱H5!>中,描述了实现一套H5无插件直播方案的各个组件的参考建议,又在博客<EasyNVR H5流媒体服务器方案架 ...

  5. 20170326 ABAP调用外部webservice 问题

    1.SE80 创建企业服务: 代理生成:出现错误 库处理程序中出现例外 错误的值:未知类型参考ns1:ArrayOfMLMatnrResource 尝试: 一.测试本地文件:---无效 1. 将网址链 ...

  6. Oracle数据库之SQL基础和分支循环

    一.SQL基础语言 DECLARE --声明 a ); --变量或对象 BEGIN a:='小明';-- := 表示给一个变量赋值 dbms_output.put_line(a); --输出用 dbm ...

  7. 【linux】crontab的环境变量问题

    今天遇到一个奇怪的问题,同样一个脚本,手动执行没问题,加入到crontab中,就出现无法运行的情况,第一反应是环境变量问题 环境说明: 操作系统:centos 用户:test用户通过sudo su切换 ...

  8. PermissionError: [Errno 13] Permission denied:

    在ubuntu系统下使用pip 命令安装包时,出现以下类似错误提示: PermissionError: [Errno 13] Permission denied: '/usr/local/lib/py ...

  9. bzoj5093: [Lydsy1711月赛]图的价值

    不难想到考虑每个点的贡献,ans=n*sigema(1~n)i C(n-1,i)*(2^C(n-1,2))*i^k 直接套第二类斯特林拆柿子即可.提示:sigema(1~n)i C(n,i)*C(i, ...

  10. jira与wiki官方文档记录

    jira:https://confluence.atlassian.com/display/JIRA/Home wiki:https://confluence.atlassian.com/doc/co ...