パッケージ化されたデータベース(つまり、アセットとして含まれているデータベース)を最大限に活用するには、データベースを解凍(自動)して適切な場所(ほとんどの場合、 data / data /
および
アプリのパッケージ名とデータベース名にそれぞれ準拠します。
「パッケージ化」するには、データベースをアセットフォルダーに含める必要があります。できればデータベースフォルダーに含める必要があります(変更せずにSQLiteAssetHelperを使用する場合は 。
さらに、データベースを実際に開く前にコピーを実行する必要があります。その後、データベースを開くことができます。
SQLiteAssetHelperの利用
-
最初のステップは、パッケージ化するデータベースを作成することです。利用可能なツールが多数あるため、これについては説明しません。この例では、データベースは test.dbという名前のファイルです。
-
次に、プロジェクトを作成する必要があります。この場合、プロジェクトは DBtestと呼ばれています。 com.DBtestとしてCompnayDomianを使用 したがって、パッケージ名は dbtest.com.dbtest 。
-
次の段階は、データベースをアセットフォルダにコピーすることです。
- アセットの作成 src / main内のフォルダ フォルダ(まだ存在しない場合)。
- **アセットにデータベース""フォルダを作成する フォルダ(まだ存在しない場合)。
-
データベースファイルのコピー( test.db この例では)データベースフォルダに入れます。
-
次の段階は、SQLiteAssetHelperをアプリの build.gradle に含めることで、プロジェクトをセットアップして利用することです。 。
- build.gradleを編集します アプリで フォルダ。
- 行を追加します
implementation'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1'
依存関係セクション内。 - [今すぐ同期]をクリックします
-
新しく/現在利用可能なSQLiteAssethelperクラスのサブクラスであるクラスを作成します。この演習では、 DBHelperと呼ばれます。 。
- MainActivityを右クリックします javaクラスで、[新規]、[Javaクラス]の順に選択します。
- [名前]フィールドにDBHelperと入力します 。
- [SuperClass]フィールドにSQLiteAssetと入力し始めます(これでSQliteAssetHelperクラスが選択可能になります)。そのため、これを選択します。次のように解決する必要があります:-
- [OK]をクリックします。
-
:-
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);
}
}
-
DBHelperのインスタンスを作成してから、データベースにアクセスします。
- 注 簡単にするために、 CommonSQLiteUtilitiesと呼ばれる別のクラス 、からコピーされたように一般的なSQLiteの問題を解決するのに役立つ方法はありますか?
-
-
DBHelper mDBHlpr =new DBHelper(this);
-
-
CommonSQLiteUtilitiesを使用して、データベースにアクセスしました:-
-
CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
-
-
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の実行時に、データベースはすでに存在するためコピーされません。