• Android几种打开SQLite的方法


    第一种:用SQLiteOpenHelper辅助类

      SQLiteOpenHelper类可以用来创建或打开数据库,两个关键的方法:onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)。当新建一个数据库时会调用前者,一般在里面做一些创建表或视图的操作。数据库版本升级时则会调用后者。

      当第一次调用getReadableDatabase()方法或getWritableDatabase()方法即可返回一个SQLiteDatabase对象。如果是第一次调用,则会创建数据库。随后可使用SQLiteDatabase对象的方法进行数据操作,如:execSQL(), insert(), update(), query(), rawQuery(), delete()等。

      PS:通过该方法创建的数据库存放的目录是固定的,其路径为/data/data/packageName/databases/

    第二种:用Context类的openOrCreateDatabase()方法

      openOrCreateDatabase(String dbName, int mode, CursorFactory factory);

      dbName:数据库操作模式:默认值为MODE_PRIVATE(0),可选值:MODE_WORLD_READABLE, MODE_WORLD_WRITABLE, MODE_ENABLE_WRITE_AHEAD_LOGGING

      factory:附加的一个工厂类,当SQLiteDatabase实例的query函数被调用时,会使用该工厂类返回一个Cursor。可为null。

    PS:该方法得到的数据库文件,其存储路径与上一方法相同。

    第三种:直接调用SQLiteDatabase类的静态方法openOrCreateDatabases()

    SQLiteDatabase类有几个静态方法可直接打开或创建数据库。

    //等同于openDatabase(path, factory, SQLiteDatabase.CREATE_IF_NECESSARY)

    openOrCreateDatabase(String path, CursorFactory factory)

    //等同于openDatabase(file.getPath(), factory, SQLiteDatabase.CREATE_IF_NECESSARY)

    openOrCreateDatabase(File file, CursorFactory factory)

    //等同于openDatabase(file.getPath(), factory, SQLiteDatabase.CREATE_IF_NECESSARY, errorHandler)

    openOrCreateDatabase(String path, CursorFactory factory, DatabaseErrorHandler errorHandler)

    PS:该方法打开或创建的数据库文件可与上述两个方法的路径不同。

    还是上个代码看着更爽

     1 //第一种
     2         SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
     3         db.execSQL("alter table info add number1 vchar(20)");
     4 
     5         //第二种
     6         //获取info.db的路径
     7         File file = new File(getApplication().getDatabasePath("info.db").getPath());
     8         SQLiteDatabase db1 = SQLiteDatabase.openOrCreateDatabase(file,null);
     9         db1.execSQL("alter table info add number2 vchar(20)");
    10 
    11         //第三种,
    12         SQLiteDatabase db2 = this.openOrCreateDatabase("info.db",0,null);
    13         db.execSQL("alter table info add number3 vchar(20)");

    ps:前几天面试被面试官问到过这个问题。

    GitHub:https://github.com/godfunc
    博客园:http://www.cnblogs.com/godfunc
    Copyright ©2019 Godfunc
  • 相关阅读:
    原 java调整数据顺序是奇数位于偶数的前面(思路与实现)
    队列和栈是什么,列出它们的区别?
    python 虚拟环境创建
    系统架构知识
    Git 管理代码
    继承类构造方法使用
    if __name__=="__main__"
    django 项目创建
    python unittest的使用
    python ddt/paramunittest的使用
  • 原文地址:https://www.cnblogs.com/Godfunc/p/6022102.html
Copyright © 2020-2023  润新知