从资产文件夹中读取数据库
Reading a database from the assets folder
我在 asset 文件夹中有一个 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
您可以在安装时将数据库从资产复制到数据库文件夹,然后从那里使用它。
/data/data/<Your-Application-Package-Name>/databases/<your-database-name>
要充分利用打包的数据库(即作为资产包含的数据库),必须解压缩(自动)数据库并将其复制到合适的位置(通常 data/data/<package_name>/databases/<database_name>
其中 <package_name>
和<database_name>
会根据App的包名和数据库名分别。
至 "package" 数据库应包含在资产文件夹中,最好包含在数据库文件夹中(如果不修改 使用 SQLiteAssetHelper 则需要)。
此外,必须在实际打开数据库之前完成复制,然后才能打开它。
利用 SQLiteAssetHelper
第一步是创建要打包的数据库,这个就不讲了,工具很多。对于这个例子,数据库是一个名为 test.db
的文件
然后您应该创建您的项目,在这种情况下该项目被称为 DBtest,Compnay Domian 为 com.DBtest 所以包名是 dbtest.com.dbtest.
下一步是将数据库复制到资产文件夹中。
- 正在 src/main 文件夹中创建 assets 文件夹(如果尚不存在)。
- 正在 **assets 文件夹中创建 databases"" 文件夹(如果尚不存在)。
正在将数据库文件(test.db复制到数据库文件夹中。
下一阶段是将项目设置为利用 SQLiteAssetHelper,方法是将其包含在应用程序的 build.gradle.
中
- 编辑 build.gradle 文件夹中的 App。
- 在依赖项部分添加行
implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1'
。
- 单击立即同步
创建一个 class,它是 newly/now 可用 SQLiteAssethelper class 的子class。对于本练习,它将被称为 DBHelper.
- 右击 MainActivity java class, select New 然后 Java Class.
- 在名称字段中输入 DBHelper.
- 在 SuperClass 字段中开始输入 SQLiteAsset(现在 SQliteAssetHelper class 将 select 可用),所以 select 它。它应该解析为:-
- 点击确定。
按照
的方式为 DBHelper class 创建构造函数
:-
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 实例,然后访问数据库。
- 注意 另一个 class 调用 CommonSQLiteUtilities,从 复制是否有任何方法可以帮助解决常见的 SQLite 问题?
创建 DBHelper cclass 的实例,使用类似于
的方法
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
- 前两行来自
SQliteAssethelper
,其余来自logDatabaseInfo
方法CommonSQLiteUtilities
class.
- 在随后的 运行s 中,数据库将不会被复制,因为它已经存在。
我在 asset 文件夹中有一个 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
您可以在安装时将数据库从资产复制到数据库文件夹,然后从那里使用它。
/data/data/<Your-Application-Package-Name>/databases/<your-database-name>
要充分利用打包的数据库(即作为资产包含的数据库),必须解压缩(自动)数据库并将其复制到合适的位置(通常 data/data/<package_name>/databases/<database_name>
其中 <package_name>
和<database_name>
会根据App的包名和数据库名分别。
至 "package" 数据库应包含在资产文件夹中,最好包含在数据库文件夹中(如果不修改 使用 SQLiteAssetHelper 则需要)。
此外,必须在实际打开数据库之前完成复制,然后才能打开它。
利用 SQLiteAssetHelper
第一步是创建要打包的数据库,这个就不讲了,工具很多。对于这个例子,数据库是一个名为 test.db
的文件
然后您应该创建您的项目,在这种情况下该项目被称为 DBtest,Compnay Domian 为 com.DBtest 所以包名是 dbtest.com.dbtest.
下一步是将数据库复制到资产文件夹中。
- 正在 src/main 文件夹中创建 assets 文件夹(如果尚不存在)。
- 正在 **assets 文件夹中创建 databases"" 文件夹(如果尚不存在)。
正在将数据库文件(test.db复制到数据库文件夹中。
下一阶段是将项目设置为利用 SQLiteAssetHelper,方法是将其包含在应用程序的 build.gradle.
中- 编辑 build.gradle 文件夹中的 App。
- 在依赖项部分添加行
implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1'
。 - 单击立即同步
创建一个 class,它是 newly/now 可用 SQLiteAssethelper class 的子class。对于本练习,它将被称为 DBHelper.
- 右击 MainActivity java class, select New 然后 Java Class.
- 在名称字段中输入 DBHelper.
- 在 SuperClass 字段中开始输入 SQLiteAsset(现在 SQliteAssetHelper class 将 select 可用),所以 select 它。它应该解析为:-
- 点击确定。
按照
的方式为 DBHelper class 创建构造函数
:-
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 实例,然后访问数据库。
- 注意 另一个 class 调用 CommonSQLiteUtilities,从 复制是否有任何方法可以帮助解决常见的 SQLite 问题?
创建 DBHelper cclass 的实例,使用类似于
的方法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
- 前两行来自
SQliteAssethelper
,其余来自logDatabaseInfo
方法CommonSQLiteUtilities
class. - 在随后的 运行s 中,数据库将不会被复制,因为它已经存在。