Reading a database from the assets folder
我在资产文件夹中有一个db文件,我该如何使用它。 我必须能够读写数据库文件
如果我使用
SqliteDatabase.open(context.openassest().open(filrname),null);
Exception db file not found
Don't check. The syntax I have done correctly in my lap see the content
要充分利用打包的数据库(即作为资产包含的数据库),必须将数据库解压缩(自动)并复制到合适的位置(最常见的是
要"打包"数据库应该包含在assets文件夹中,最好包含在数据库文件夹中(如果使用SQLiteAssetHelper而不进行修改则需要)。
此外,必须在实际打开数据库之前完成复制,之后可以打开它。
利用SQLiteAssetHelper
第一步是创建要打包的数据库,这不会被涵盖,因为有许多可用的工具。对于此示例,数据库是名为test.db的文件
然后,您应该创建项目,在这种情况下,Project已被称为DBtest,Compnay Domian为com.DBtest,因此包名称为dbtest.com.dbtest。
下一步是将数据库复制到assets文件夹中。
将数据库文件(本例中为test.db)复制到数据库文件夹中。
下一步是通过将它包含在App的build.gradle中来设置项目以利用SQLiteAssetHelper。
创建一个类,它是新/现在可用的SQLiteAssethelper类的子类。在本练习中,它将被称为DBHelper。
沿着行创建DBHelper类的构造函数
: -
1 2 3 4 5 6 7 8 9 | 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的实例,然后访问数据库。
使用类似的东西创建DBHelper cclass的实例
-
DBHelper mDBHlpr = new DBHelper(this);
使用CommonSQLiteUtilities访问数据库使用: -
-
CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
MainActivity完全成为了
: -
1 2 3 4 5 6 7 8 9 10 11 | 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()); } } |
结果是成功运行日志记录: -
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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 |
-
前两行来自
SQliteAssethelper ,其余来自CommonSQLiteUtilities 类的logDatabaseInfo 方法。 - 在subsequnt运行时,数据库将不会被复制,因为它已经存在。
您可以在安装时将数据库从资产复制到数据库文件夹,然后从那里使用它。
1 | /data/data/<Your-Application-Package-Name>/databases/<your-database-name> |