【问题标题】:Reading a database from the assets folder [duplicate]从资产文件夹中读取数据库[重复]
【发布时间】:2018-09-20 06:22:37
【问题描述】:

我在资产文件夹中有一个 db 文件,我该如何使用它。我必须能够读写数据库文件 如果我使用

SqliteDatabase.open(context.openassest().open(filrname),null); 找不到异常 db 文件 不要检查。我在膝盖上正确完成的语法请参阅内容

【问题讨论】:

    标签: android android-sqlite android-database


    【解决方案1】:

    要充分利用打包的数据库(即作为资产包含的数据库),必须将数据库解压缩(自动)并复制到合适的位置(最常见的是data/data/<package_name>/databases/<database_name>,其中<package_name><database_name> 将根据分别为 App 的包名和数据库名)。

    要“打包”数据库,应将其包含在 assets 文件夹中,最好包含在数据库文件夹中(如果使用 SQLiteAssetHelper 而不进行修改则需要)。

    此外,必须在实际打开数据库之前完成复制,然后才能打开它。

    使用 SQLiteAssetHelper

    1. 第一步是创建要打包的数据库,这里不做介绍,因为有很多可用的工具。对于此示例,数据库是一个名为 test.db

    2. 的文件
    3. 然后您应该创建您的项目,在这种情况下,该项目被称为 DBtest,Compnay Domian 为 com.DBtest,因此包名称为 dbtest.com.dbtest.

    4. 下一阶段是将数据库复制到 assets 文件夹中。

      1. src/main 文件夹中创建 assets 文件夹(如果该文件夹尚不存在)。
      2. 在 **assets 文件夹中创建 databases"" 文件夹(如果该文件夹尚不存在)。
      3. 将数据库文件(本例中为test.db)复制到数据库文件夹中。

    5. 下一阶段是设置项目以利用 SQLiteAssetHelper,方法是将其包含在应用的 build.gradle 中。

      1. 编辑 App 文件夹中的 build.gradle
      2. 在依赖项部分添加implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1' 行。
      3. 点击立即同步


    1. 创建一个作为新/现在可用的 SQLiteAssethelper 类的子类的类。对于本练习,它将被称为 DBHelper

      1. 右键单击 MainActivity java 类,选择 New,然后选择 Java Class。
      2. 在名称字段中输入 DBHelper
      3. 在 SuperClass 字段中开始输入 SQLiteAsset(现在 SQliteAssetHelper 类将是可选的),因此选择它。它应该解析为:-
      4. 单击确定。
    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 的类,复制自 Are there any methods that assist with resolving common SQLite issues?
      2. 使用类似的方法创建 DBHelper cclass 的实例

        • 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
    
    • 前两行来自 SQliteAssethelper,其余来自 CommonSQLiteUtilities 类的 logDatabaseInfo 方法。
    • 在随后的运行中,不会复制数据库,因为它已经存在。

    【讨论】:

      【解决方案2】:

      您可以在安装时将数据库从资产复制到数据库文件夹,然后从那里使用它。

      /data/data/<Your-Application-Package-Name>/databases/<your-database-name>
      

      【讨论】:

      • 兄弟任何视频教程如果我在安装后复制。
      猜你喜欢
      • 1970-01-01
      • 2013-12-11
      • 2013-09-19
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多