Android-MySQLiteOpenHelper的理解
MySQLiteOpenHelper:
package com.esandinfo; import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log; public class MySQLiteOpenHelper extends SQLiteOpenHelper { public static MySQLiteOpenHelper mySQLiteOpenHelper; private static final String DB_NAME = "person_info.db";
private static final int VERSION = 1; public synchronized static MySQLiteOpenHelper getInstance(Context context) {
if (null == mySQLiteOpenHelper) {
mySQLiteOpenHelper = new MySQLiteOpenHelper(context, DB_NAME, null, VERSION);
}
return mySQLiteOpenHelper;
} /**
* 当开发者调用 getReadableDatabase(); 或者 getWritableDatabase();
* 就会通过此构造方法配置的信息 来创建 person_info.db 数据库
* 所以此构造方法的配置信息,可以认为是给创建 person_info.db 数据库 准备的
*
* @param context 上下文
* @param name 数据库名
* @param factory 游标工厂
* @param version 版本,最低为1
*/
private MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
} /**
* 此方法是何时调用? ,是需要开发者调用 getReadableDatabase(); 或者 getWritableDatabase();
*
* 注意:此onCreate方法只会被执行一次,因为当开发者调用 getReadableDatabase(); 或者 getWritableDatabase();
* 是先创建好 person_info.db,然后在执行此onCreate方法,只执行一次onCreate方法
* 所以(如果创建好 person_info.db后,onCreate方法里面的创表失败,那么一直不会执行onCreate方法了)
* 所以(如果创建好 person_info.db后,onCreate方法里面的创表成功,那么也一直不会执行onCreate方法了)
* 所以onCreate方法的特点是,只在 创建person_info.db后,然后执行一次onCreate方法,后续就不执行onCreate方法了
*
* @param db 可执行SQL语句
*/
@Override
public void onCreate(SQLiteDatabase db) {
Log.d("db", "onCreate() >>>>>>>>>>>>>> ");
db.execSQL("create table student_table(_id integer primary key autoincrement, name text, age integer);");
} /**
* 此方法用于数据库升级
* @param db 可执行SQL语句
* @param oldVersion 以前旧版本的版本号
* @param newVersion 现在目前最新的版本号
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
@Override
public void onClick(View view) { MySQLiteOpenHelper mySQLiteOpenHelper = MySQLiteOpenHelper.getInstance(this); /**
* 【第一次调用】
*
* 调用getReadableDatabase() 或者 getWritableDatabase(); 的时候,做了两件事
*
* 第一件事:
* person_info.db数据库会被创建:怎么去创建呢?
* 答:根据SQLiteOpenHelper super(context, name, factory, version); 传递的数据库信息,然后内部创建数据库
*
* 第二件事:
* student_table表会被创建:怎么去创建呢?
* 答:是先执行好了[第一件事] 然后马上就执行onCreate创建 student_table表;
*/ /**
* 【第二次调用,或者 第N此调用,反正不是第一次调用了】
*
* 调用getReadableDatabase() 或者 getWritableDatabase(); 的时候,做一件事
*
* 第一件事:
* person_info.db数据库会被打开?
* 答:根据SQLiteOpenHelper super(context, name, factory, version); 传递的数据库信息,然后内部打开数据库
*
* 注意:由于 数据库已经存在,是不会执行onCreate方法的
*
*/ mySQLiteOpenHelper.getWritableDatabase();
}
Android-MySQLiteOpenHelper的理解的更多相关文章
- [译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解
原文链接:Hello, Android Multiscreen_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android Multiscreen深入理解. 本 ...
- Android动画的理解
基础知识 在我们开始讲Android动画这个知识点之前,我们了解下相应的基础知识点. Shape篇 一般用Shape定义的XML文件是存放在Drawable目录下,广泛应用于在Button.TextV ...
- Android灯光系统--深入理解背光灯
Android灯光系统--深入理解背光灯 一.怎么控制背光灯(简述) APP将亮度值写入数据库 线程检测数据库的值是否发生变化 这种机制成为"内容观察者"--contentObse ...
- 移动端测试===Android内存管理: 理解App的PSS
Android内存管理: 理解App的PSS 原文链接:http://www.littleeye.co/blog/2013/06/11/android-memory-management-unders ...
- Android Adapter基本理解
感谢大佬:https://blog.csdn.net/l799069596/article/details/47301711 Android Adapter基本理解: 我的理解是: 1.一个有许多ge ...
- Android进阶笔记07:Android之MVC 理解
1. 为什么需要MVC ? 软件中最核心的,最基本的东西是什么? 答:是的,是数据.我们写的所有代码,都是围绕数据的. 围绕着数据的产生.修改等变化,出现了业务逻辑. 围绕着数 ...
- 深入Android开发之--理解View#onTouchEvent
一:前言 View是Android中最基本的UI单元. 当一个View接收到了触碰事件时,会调用其onTouchEvent方法.方法声明如下: ? 1 2 3 4 5 6 7 /** * Imple ...
- 关于Android API的理解
举个例子: 比如程序中用到了android.content.ClipboardManager这个类, 而该类是在API 11才添加到 “库”. (原谅我,不理解Google API 文档里的 adde ...
- 解决初学者学不懂android,不理解android的设计
最近在忙着搞一个小项目,所以没有来得及写一些原创性的东西,好容易今天中秋节,就趁现在写一些吧,今天仍然看了些老马的视频,尽管这些东西以前都用过,但是感觉仍然学到了不少东西,说给大家听希望大家也要不要不 ...
- Android事件分发理解
Android事件分发机制是个难点和重点,结合下各家,写点自己的理解.. 首先抛出一个小问题,写一个button的点击事件 button.setOnClickListener(new OnClickL ...
随机推荐
- CentOS 7 安装phpredis和redis(接上一篇centos7安装lnmp)
一.安装扩展phpredis 1.PHP7 安装redis 扩展phpredis cd /root/software wget https://github.com/edtechd/phpredis/ ...
- MAC终端如何使用rar和unrar
一.MAC具体安装见下面两个博客分享: Homebrew介绍和使用:https://www.jianshu.com/p/de6f1d2d37bf Mac 压缩 / 解压缩工具解决方案:https:// ...
- django admin的实用配置
https://www.cnblogs.com/wumingxiaoyao/p/6928297.html
- vue实例的生命周期
Vue实例的生命周期也就是这个实例从出生到死亡的过程,所以我在文档原图上把这个周期大致分为创建过程 | 运行过程 | 销毁过程三个阶段,不同结果或又分为一些小的阶段 在第一个阶段,创建阶段,会完成Vu ...
- boost asio死锁一例
socket close -> sendmessage -> io_service stop 先关闭socket句柄,再给windows窗口发送消息,然后io_service停止. 当se ...
- Centos 安装 android sdk(转)
原文地址: https://blog.csdn.net/kai_1215/article/details/80731099 这个后面有个指令没有运行起来,我做了一些修改: 原文:sdkmanager ...
- jquery datatables+MVC+WCF
view @{ Layout = null;} <!DOCTYPE html><html><head> <title>111</title> ...
- 什么是JavaScript原型
JS 原型 转载自[EC前端 - JavaScript原型] 原型是JavaScript最重要的概念.同时也是初级开发者最忌惮的内容,原因在于网上很少有关于它的合理描述. 但事实上,原型很简单,你可以 ...
- sha1withRSA算法
RAS_USE_PRIVATE_ENCRYPT(3021300906052b0e03021a05000414 + SHA1(DATA))
- 使用Python完成排序(快排法、归并法)
class Sort(object): def quick_sort(self, ls): self.quick_sort_helper(ls, 0, len(ls) - 1) return ls d ...