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. Android中RelativeLayout各个属性及其含义

    android:layout_above="@id/xxx"  --将控件置于给定ID控件之上android:layout_below="@id/xxx"  - ...

  2. C# WinForm退出方法

    1.this.Close();   只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出: 2.Application.Exit();  强制所有消息中 ...

  3. 【BZOJ4710】[Jsoi2011]分特产 组合数+容斥

    [BZOJ4710][Jsoi2011]分特产 Description JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特产分给N 个同 ...

  4. EasyPlayerPro Windows播放器本地快照抓拍截图功能实现方法

    背景描述 作为一个播放器,截图功能必不可少; 下面主要记录一下截图功能的实现: 实现流程 将解码后的帧进行格式转换(目标格式为RGB24); 采用独立的线程进行截图处理; 截图可保存为BMP或JPG两 ...

  5. Entity Framework 4.1:多对多的关系

    这篇文章讨论多对多的关系. 让我们从最简单的例子开始.我们让 EF4.1 来推断表的映射.我在订单和雇员之间建模多对多的关系. )] publicstring CustomerName { get; ...

  6. php总结4——数组的定义及函数、冒泡排序

    4.1 数组的定义 数组:变量存储的有序序列. 索引数组:下标为数字的数组.  $数组名称(下标)    下标从0开始的数字. 直接定义: $arr[0]=123; $arr[1]="chi ...

  7. 【题解】CF997C Sky Full of Stars

    [题解]CF997C Sky Full of Stars 为什么我的容斥原理入门题是这道题????????? \(Part-1\)正向考虑 直接考虑不合法合法的方案吧 所以我们设行有\(i\),列有\ ...

  8. 我的Android进阶之旅------>解决如下错误failed to copy 'Settings2.apk' to '/system/app//Settings2.apk': Read-only

    push apk的时候报错 ouyangpeng@oyp-ubuntu:~/apk升级$ adb push Settings2.apk /system/app/ failed to copy 'Set ...

  9. html乱码怎问题

    大家会不会常常遇到中文乱码的情况?html中文乱码问题该怎么调? <标签名 lang=lang> - 指定语言种类 lang 属性能够指定标签范围内的元素的语言种类. 英语lang=&qu ...

  10. python cookbook第三版学习笔记六:迭代器与生成器

    假如我们有一个列表 items=[1,2,3].我们要遍历这个列表我们会用下面的方式 For i in items:   Print i 首先介绍几个概念:容器,可迭代对象,迭代器 容器是一种存储数据 ...