中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

如何隨apk一起打包并使用SQLite

2018-07-20    來源:編程學習網(wǎng)

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

背景

  • 開發(fā)環(huán)境

    • macOS:Sierra 10.12.1
    • SQLite:3.9.2
    • JDK:1.8.0_77
    • shell:zsh
  • 對應(yīng)源碼:

    shakeba: https://github.com/bihe0832/Shakeba

  • SQLite SQL語法

    https://www.tutorialspoint.com/sqlite/sqlite_data_types.htm

準備數(shù)據(jù)庫

創(chuàng)建數(shù)據(jù)表

  • 創(chuàng)建DB文件

    在shell中輸入下面的命令創(chuàng)建db.

    ?  1  sqlite3 shakeba.db
      SQLite version 3.9.2 2015-11-02 18:31:45
      Enter ".help" for usage hints.
  • 查看DB信息

    繼續(xù)輸入下面的命令,即可看到創(chuàng)建的db將會保存的位置,另外可以發(fā)現(xiàn)sqlite會默認創(chuàng)建名為main的數(shù)據(jù)庫。

    sqlite> .databases
      seq  name             file
      ---  ---------------  ----------------------------------------------------------
      0    main             /Volumes/Document/Document/temp/1/shakeba.db
  • 關(guān)聯(lián)DB

    開發(fā)中可能并不想直接用默認的數(shù)據(jù)庫名,可以通過ATTACH關(guān)聯(lián)自定義的名稱。例如

    sqlite> ATTACH DATABASE 'shakeba.db' as shakeba;
      sqlite> .databases
      seq  name             file
      ---  ---------------  ----------------------------------------------------------
      0    main             /Volumes/Document/Document/temp/1/shakeba.db
      2    shakeba          /Volumes/Document/Document/temp/1/shakeba.db	 這樣就可以按照自定義的數(shù)據(jù)庫名來操作了。

添加數(shù)據(jù)

  • 添加默認表

    為了防止android程序出錯,需要在shakeba.db中創(chuàng)建表android_metadata,并插入一行數(shù)據(jù)具體命令如下:

    sqlite> CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'zh_CN');
      sqlite> INSERT INTO "android_metadata" VALUES ('zh_CN');

    通過查看表確實已經(jīng)創(chuàng)建好,而且內(nèi)容OK

    sqlite> .tables
      android_metadata
      sqlite> .header on
      sqlite> select * from android_metadata;
      locale
      zh_CN
  • 添加個人表

    這部分內(nèi)容主要是添加應(yīng)用相關(guān)的數(shù)據(jù)表,簡單舉例:

    DROP TABLE IF EXISTS "t_adventure";
      CREATE TABLE "t_adventure" (
          "id" INT PRIMARY KEY NOT NULL,
          "item_type" SMALLINT NOT NULL DEFAULT 1,
          "item_category" SMALLINT NOT NULL DEFAULT 1,
          "content" NVARCHAR(4096) NOT NULL DEFAULT ""
      );

    添加數(shù)據(jù)

    INSERT INTO "t_adventure" VALUES 
      (1,2,'1','背一位異性繞場一周'),
      (3,2,'1','做一個大家都滿意的鬼臉'),
      (4,2,'2','抱一位異性直到下一輪真心話大冒險結(jié)束');

至此就已經(jīng)完成了前期的數(shù)據(jù)庫文件的準備。

定義版本號

為了保證二進制的數(shù)據(jù)文件與代碼使用的一致,可以在二進制的數(shù)據(jù)文件中定義數(shù)據(jù)庫的版本號,在應(yīng)用初始化的時候?qū)Ρ劝姹咎柺欠褚恢,如果一致再拷貝使用?/p>

PRAGMA shakeba.user_version = 1;

集成數(shù)據(jù)庫到APK

將前面創(chuàng)建好的數(shù)據(jù)庫放在項目工程下源碼的/res/raw路徑下。至此我們就完成了前期的db的準備并添加到項目中,接下來就是數(shù)據(jù)處理相關(guān)的內(nèi)容。

數(shù)據(jù)操作

拷貝DB

因為raw中的db無法直接訪問,因此我們在應(yīng)用初始化的時候要先把db拷貝到應(yīng)用的私有目錄 getApplicationContext().getDatabasePath( DATABASE_NAME )中。

  • 具體代碼

    InputStream myInput = Shakeba.getInstance().getApplicationContext().getResources().openRawResource(getRawDatabaseResID());
    
      File file = Shakeba.getInstance().getApplicationContext().getDatabasePath(getDatabaseName());
    
      if (!file.exists()) {
          try {
              OutputStream myOutput = new FileOutputStream(file);
    
              byte[] buffer = new byte[1024];
              int length;
              while ((length = myInput.read(buffer))>0){
                  myOutput.write(buffer, 0, length);
              }
              myOutput.close();
              myInput.close();
              mIsDBOK = true;
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
  • 代碼位置

    在shakeba項目中,這部分邏輯在com.bihe0832.shakeba.framework.database.BaseRawDatabaseHelper中實現(xiàn)

增刪改查

在上面的拷貝DB的動作完成以后,原本打包在APK中的db就已經(jīng)拷貝到了應(yīng)用私有目錄下,此時對于數(shù)據(jù)庫的增刪改查的操作就和正常的使用SQLiteOpenHelper的操作一致了,因此不再特別說明。這部分內(nèi)容可以參考shakeba項目的以下代碼:

  • com.bihe0832.shakeba.framework.database.*
  • com.bihe0832.shakeba.module.game.adventure.AdventureTableModel

 

來自:http://blog.bihe0832.com/sqlite-raw-db.html

 

標簽: 代碼 數(shù)據(jù)庫

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:Android Studio,使用技巧,問題記錄和一些好用的插件

下一篇:Android開發(fā)必知的java嵌套類