MyOpenHelper openHelper =  new  MyOpenHelper(this);

类似于java的File file = new File();只是声明这个东西,但是文件还并没有真正的被创建出来。那么怎么可以创建出一个数据库呢?

SQLiteDatabase    getReadableDatabase()   Create and/or open a database.

获得一个可读的数据库。

SQLiteDatabase    getWritableDatabase()  Create and/or open a database that will be used for reading and writing.

获得一个可写的数据库。

还是getReadableDatabase()更靠谱一些,当磁盘满了的时候,getWritableDatabase()会直接挂掉但是getReadableDatabase()会给你返回一个只读的数据库。所以大部分情况用getReadableDatabase()还是比较安全的。大多部分情况它们俩功能一样没什么区别,只不过在磁盘满了的时候一个会返回只读的数据库而另一个会直接挂掉。

Ctrl+1补全左边。

SQLiteDatabase可以执行SQL,执行SQL就可以修改/查询数据库里面的内容。

[2017-06-17 07:54:09] Failed to pull selection
[2017-06-17 07:54:09] null

拽取文件失败

只能使用adb命令来拽取文件了。

通过getReadableDatabase()或者是getWritableDatabase()就可以把这个数据库文件创建起来,创建的时候它会走onCreate()方法.在onCreate()方法里面我们可以做表结构的初始化。

    @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被调用");
}

package com.itheima.sqlitehello;

import android.os.Bundle;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
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);
//getReadableDatabase 和 getWriteableDatabase在大部分情况下作用是相同的:
//创建(数据库文件不存在的时候)或者打开一个数据库 获得的都是可读可写的数据库
//当磁盘满的时候 getReadableDatabase会返回一个只读的数据库
//getWritableDatabase会出错
SQLiteDatabase readableDatabase = openHelper.getReadableDatabase();
SQLiteDatabase writableDatabase = openHelper.getWritableDatabase();
} }
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 } }

03_通过OpenHelper获取SqliteDatabase对象的更多相关文章

  1. WebAPI中无法获取Session对象的解决办法

    在MVC的WebApi中默认是没有开启Session会话支持的.需要在Global中重写Init方法来指定会话需要支持的类型 public override void Init() { PostAut ...

  2. 《Entity Framework 6 Recipes》中文翻译系列 (45) ------ 第八章 POCO之获取原始对象与手工同步对象图和变化跟踪器

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 8-6  获取原始对象 问题 你正在使用POCO,想从数据库获取原始对象. 解决方案 ...

  3. js和jquery获取当前对象的子元素

    开发中经常遇到需要获取ul下的il对象,个人总结了js和jquery的方法. HTML片断: <ul class="box"> <li>子元素1</l ...

  4. 获取Graphics对象的方法

    在做自定义控件时或者GDI+的时候经常会遇到获取Graphics实例的问题.一般有三种获取方式 1.从Paint事件的参数中获取.窗体和许多控件都有一个Paint事件,有一个PaintEventArg ...

  5. (转)JS获取当前对象大小以及屏幕分辨率等

    原文 JS获取当前对象大小以及屏幕分辨率等   <script type="text/javascript">function getInfo(){       var ...

  6. Unity关于获取游戏对象

    我觉得Unity里面的Transform 和 GameObject就像两个双胞胎兄弟一样,这俩哥们很要好,我能直接找到你,你也能直接找到我.我看很多人喜欢在类里面去保存GameObject对象.解决G ...

  7. 第三章 EnumUtil根据值获取枚举对象

    项目中使用枚举类的好处这里不再赘述,在使用枚举值时,通常需要根据值来获取枚举对象,下面介绍两种实现方案: 1.在枚举类中定义方法实现 首先给出如下性别枚举类: public enum SexEnum ...

  8. 通过Guid获取DirectoryEntry对象

    绑定DirectoryEntry对象通常有两种方法,一种是通过字符串(如通过ADsPath),一种是通过Guid(参见:http://msdn.microsoft.com/zh-cn/library/ ...

  9. ajax获取json对象

    ajax获取json对象 ajax获取json数据,都是一个原理,设置response 的Content-Type:application/json,这样浏览器自动会解析为json对象 $result ...

随机推荐

  1. 微信小程序设置控件权重

    项目中最常用的两种布局方式,水平布局和垂直布局,在微信小程序中实现起来也比较简单.       1.横向水平布局:         实现水平布局,需要四个view容器组件,其中一个是父容器.如下: & ...

  2. VSCode 配置python

    https://code.visualstudio.com/docs/?dv=win  下载64位的vscode 底下有python插件

  3. toggle不支持事件代理的解决办法或者 jquery live绑定toggle

    $(".xxx").live("click", function () {      $(this).toggle(function () {},functio ...

  4. EF学习和使用(三)Code First

    Code First模式我们称之为"代码优先"模式.从某种角度来看.其实"Code First"和"Model First"区别并非太明显. ...

  5. Flask:web表单

    客户端发送的所有通过POST发出的请求信息都可以通过request.form获取.但是如果我们要生成表单的HTML代码和验证提交的表单数据那么就需要采用另外的方法.Flask-WTF扩展可以把处理we ...

  6. memcache-session-manager(flexjson)

    MSM项目FlexJson序列化参考文档. 序号(步骤) 需求描述 jar包列表: spymemcached-2.11.1.jar memcached-session-manager-tc8-1.8. ...

  7. (扫盲)jQuery extend()和jQuery.fn.extend()的区别

    1.认识jQuery extend()和jQuery.fn.extend() jQuery的API手册中,extend方法挂载在jQuery和jQuery.fn两个不同对象上方法,但在jQuery内部 ...

  8. JavaScript学习笔记(持续更新)

    函数有“定义式”和“变量式”两种写法的区别 函数有“定义式”和“变量式”两种写法,两者基本区别不大.主要区别在于,如果在同一个代码块(Script标签对)定义两个同名的函数,浏览器在预编译代码时,使用 ...

  9. Android Weekly Notes Issue #255

    Android Weekly Issue #255 April 30th, 2017 Android Weekly Issue #255 本期内容包括: 一种在RxJava中显示loading/con ...

  10. 请求时token过期自动刷新token

    1.在开发过程中,我们都会接触到token,token的作用是什么呢?主要的作用就是为了安全,用户登陆时,服务器会随机生成一个有时效性的token,用户的每一次请求都需要携带上token,证明其请求的 ...