首页 > 数据库 >Android—MySQLiteOpenHelper源码解读

Android—MySQLiteOpenHelper源码解读

时间:2023-06-22 14:33:05浏览次数:41  
标签:info 数据库 db MySQLiteOpenHelper person 源码 Android onCreate


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();
}



标签:info,数据库,db,MySQLiteOpenHelper,person,源码,Android,onCreate
From: https://blog.51cto.com/u_16163510/6534873

相关文章

  • 腾讯Android岗三面:EventBus 发送的消息,如何做到线程切换?
    一.前言EventBus是一个基于观察者模式的事件订阅/发布框架,利用EventBus可以在不同模块之间,实现低耦合的消息通信。EventBus因为其使用简单且稳定,被广泛应用在一些生产项目中。通常我们就是使用EventBus分发一些消息给消息的订阅者,除此之外我们还可以通过EventBus将消息传......
  • Android:教你如何避免解决WebView内存泄漏
    一直听说WebView使用不当容易造成内存泄漏,网上有很多针对内存泄漏的解决方案,比较多的是在Activity.onDestroy的时候将WebView从View树中移除,然后再调用WebView.destroy方法:overridefunonDestroy(){valparent=webView?.parentif(parentisViewGroup){......
  • 【建议私藏】Android进阶开发面试必背300题,都在这里了~
    Android的技术面试的本质与考试无差,许多知识点你可能之前没有涉及,之后也不会用到,但面试官提问时,你一定得会。如果你只是精专于之前业务中的内容,那无疑所掌握的知识点会非常会非常片面,也会极大的限制你的发展性,减少你可选择的选项。Android开发面试必问经典题目Handler相关知识,面试......
  • 最新Android音视频开发学习指南,建立自己的技术护城河
    我们常说音视频是程序员小众领域,但其实音视频技术在日常生活中随处可见:直播中要保证在各种网络状况下实现超低价延时、降低卡顿率,就需要用到音视频中的RTC和直播技术;上百人的视频会议若要保证流畅度和清晰的画质就要用到RTC和转码合流服务等技术…Android音视频开发进阶指南目......
  • Android模仿微博的LazyFragment懒加载
    本文会从头开始一步一步带你去写一个LazyFragment,根据写的过程中一步一步记录,你也可以自己试一试,跟着一起写写。最后也根据遇到的问题去完善了,网上搜的都是不完善的,还是自己写一个吧!懒加载是在加载啥?这个问题显得很愚蠢。但是想一下,懒加载到底是加载数据和视图,还是数据呢??(一开始我也......
  • 【干货分享】全套Android学习笔记+最新大厂面试真题合集,打包领取
    笔者是一名普通的软件开发人员,一向不喜欢高高在上或者晦涩难懂的理论。我认为知识的本身也应该是通俗易懂的,用晦涩难懂的东西去描述,是对人类进步的阻碍,是知识垄断。笔者希望此系列教程能够以工程实现为出发点和落脚点,简化理论知识,化繁为简地解析Android相关知识点,为各位读者成长为......
  • 【Android】iOS开发中xconfig和script脚本的使用
    利用Xcode进行开发时需要进行很多buildsetting的设置以便能让项目按照设置的进行编译,同时有时候需要在编译时利用script脚本进行一些设置,本文主要介绍xconfig文件和script脚本在Xcode开发中使用。作者:MambaYongXcode编译在使用xconfig时有几个关于Xcode的概念是需要理解的,这里我进......
  • Android AIDL 跨进程通信超详版
    来了新公司,公司项目里用了很多的独立进程的服务与他们之间存在了很多跨进程的通信。之前有很长一段时间没有实际去做跨进程通信AIDL了,查阅了一些资料和文章看了些Demo把温习的心路历程介绍一下。来模拟一个ktv播控系统(client)控制大屏上的歌曲的播放、暂停动作KtvAIDLClientK......
  • Android13(T) 的Target适配问题总结
    最近在做Android13(T)的Target适配,整理了适配过程中遇到的问题分以下三部分:影响所有应用的变更(包含target33),只影响TargetSdkVersion=33的变更,其他更改(新增或者改善的功能).1.影响所有应用的变更1.1必须要适配此项1.1.1通知的运行时权限Android13中引入了一种新的......
  • Android app的启动优化总结
    工欲善其事必先利其器,最近在启动优化上踩了不少坑,写篇文章记录下,也给大伙避避坑,节省些时间。启动优化是什么,完全可以顾名思义,本文就不赘述了。至于为什么要做性能优化–QAQ,大家dddd问题场景主要分为如下两种场景,笔者主要在第一种场景下进行实操哈1、项目中已有性能启动相关埋点以及......