sql >> データベース >  >> RDS >> SQLite

アセットフォルダからデータベースを読み取る

    パッケージ化されたデータベース(つまり、アセットとして含まれているデータベース)を最大限に活用するには、データベースを解凍(自動)して適切な場所(ほとんどの場合、 data / data / / databases / <)にコピーする必要があります。 / code> ここで、 および アプリのパッケージ名とデータベース名にそれぞれ準拠します。

    「パッケージ化」するには、データベースをアセットフォルダーに含める必要があります。できればデータベースフォルダーに含める必要があります(変更せずにSQLiteAssetHelperを使用する場合は

    さらに、データベースを実際に開く前にコピーを実行する必要があります。その後、データベースを開くことができます。

    SQLiteAssetHelperの利用

    1. 最初のステップは、パッケージ化するデータベースを作成することです。利用可能なツールが多数あるため、これについては説明しません。この例では、データベースは test.dbという名前のファイルです。

    2. 次に、プロジェクトを作成する必要があります。この場合、プロジェクトは DBtestと呼ばれています。 com.DBtestとしてCompnayDomianを使用 したがって、パッケージ名は dbtest.com.dbtest

    3. 次の段階は、データベースをアセットフォルダにコピーすることです。

      1. アセットの作成 src / main内のフォルダ フォルダ(まだ存在しない場合)。
      2. **アセットにデータベース""フォルダを作成する フォルダ(まだ存在しない場合)。
      3. データベースファイルのコピー( test.db この例では)データベースフォルダに入れます。

    4. 次の段階は、SQLiteAssetHelperをアプリの build.gradle に含めることで、プロジェクトをセットアップして利用することです。 。

      1. build.gradleを編集します アプリで フォルダ。
      2. 行を追加しますimplementation'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1' 依存関係セクション内。
      3. [今すぐ同期]をクリックします

    1. 新しく/現在利用可能なSQLiteAssethelperクラスのサブクラスであるクラスを作成します。この演習では、 DBHelperと呼ばれます。 。

      1. MainActivityを右クリックします javaクラスで、[新規]、[Javaクラス]の順に選択します。
      2. [名前]フィールドにDBHelperと入力します 。
      3. [SuperClass]フィールドにSQLiteAssetと入力し始めます(これでSQliteAssetHelperクラスが選択可能になります)。そのため、これを選択します。次のように解決する必要があります:-
      4. [OK]をクリックします。
    2. の行に沿ってDBHelperクラスのコンストラクターを作成します

    :-

    public class DBHelper extends SQLiteAssetHelper {
    
        public static final String DBNAME = "test.db"; //<<<< must be same as file name
        public static final int DBVERSION = 1;
    
        public DBHelper(Context context) {
            super(context,DBNAME,null,DBVERSION);
        }
    }
    
    1. DBHelperのインスタンスを作成してから、データベースにアクセスします。

      1. 簡単にするために、 CommonSQLiteUtilitiesと呼ばれる別のクラス 、からコピーされたように一般的なSQLiteの問題を解決するのに役立つ方法はありますか?
      2. に沿ったものを使用して、DBHelpercclassのインスタンスを作成します。
        • DBHelper mDBHlpr =new DBHelper(this);
      3. CommonSQLiteUtilitiesを使用して、データベースにアクセスしました:-

        • CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
      4. MainActivityは完全に

        になりました

    :-

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            DBHelper mDBHlpr = new DBHelper(this);
            CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
        }
    }
    

    その結果、実行ロギングが成功しました:-

    04-11 06:12:55.091 1401-1401/dbtest.com.dbtest W/SQLiteAssetHelper: copying database from assets...
        database copy complete
    04-11 06:12:55.123 1401-1401/dbtest.com.dbtest I/SQLiteAssetHelper: successfully opened database test.db
    04-11 06:12:55.127 1401-1401/dbtest.com.dbtest D/SQLITE_CSU: DatabaseList Row 1 Name=main File=/data/data/dbtest.com.dbtest/databases/test.db
        Database Version = 1
        Table Name = mytable Created Using = CREATE TABLE mytable (
            _id INTEGER PRIAMRY KEY, 
            mydata TEXT, 
            inserted INTEGER DEFAULT CURRENT_TIMESTAMP
        )
        Table = mytable ColumnName = _id ColumnType = INTEGER PRIAMRY KEY Default Value = null PRIMARY KEY SEQUENCE = 0
        Table = mytable ColumnName = mydata ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
        Table = mytable ColumnName = inserted ColumnType = INTEGER Default Value = CURRENT_TIMESTAMP PRIMARY KEY SEQUENCE = 0
        Table Name = android_metadata Created Using = CREATE TABLE android_metadata (locale TEXT)
        Table = android_metadata ColumnName = locale ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
    
    • 最初の2行は、 SQliteAssethelperからのものです。 、残りは logDatabaseInfoからのものです CommonSQLiteUtilitiesのメソッド クラス。
    • subsequntの実行時に、データベースはすでに存在するためコピーされません。


    1. UTF8のエンコーディングがロケールen_USと一致しません。選択したLC_CTYPE設定には、LATIN1のエンコードが必要です

    2. bind_resultとget_resultの使用方法の例

    3. mysql_fetch_array()は、パラメーター1がリソースの問題であると想定しています

    4. json列キーがnullであるレコードを取得します