数据库
首页 > 数据库> > android-从资产文件夹中读取数据库

android-从资产文件夹中读取数据库

作者:互联网

这个问题已经在这里有了答案:            >            Ship an application with a database                                    16个
我在资产文件夹中有一个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 /< package_name> / databases /< basebase_name>其中< ; package_name>和< database_name>将分别根据应用程序的软件包名称和数据库名称来确定).

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

另外,必须在实际打开数据库之前完成副本,然后才能打开数据库.

利用SQLiteAssetHelper

>第一步是创建要打包的数据库,因为有许多可用的工具,所以这不会涉及.对于此示例,数据库是名为test.db的文件
>在这种情况下,您应该创建您的项目,该项目已被称为DBtest,Compnay Domian为com.DBtest,因此程序包名称为dbtest.com.dbtest.
>下一步是将数据库复制到资产文件夹.

>在src / main文件夹中创建资产文件夹(如果尚不存在).
>在** assets文件夹中创建数据库“”文件夹(如果尚不存在).
>将数据库文件(在此示例中为test.db)复制到数据库文件夹中.

> enter image description here

>下一步是通过将项目包含在App的build.gradle中来设置项目以利用SQLiteAssetHelper.

>在App文件夹中编辑build.gradle.
>在相关性部分中添加行实现’com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1′.
>单击立即同步

enter image description here

>创建一个类,该类是新的/现在可用的SQLiteAssethelper类的子类.在本练习中,它将称为DBHelper.

>右键单击MainActivity Java类,选择New,然后选择Java Class.
>在名称字段中输入DBHelper.
>在SuperClass字段中,开始输入SQLiteAsset(现在可以选择SQliteAssetHelper类),因此选择它.它应该解决为:
>单击确定.
enter image description here

>按照以下步骤为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);
    }
}

>创建DBHelper的实例,然后访问数据库.

>为方便起见,另一个类名为CommonSQLiteUtilities,从Are there any methods that assist with resolving common SQLite issues?
复制而来
>使用类似于以下内容的方法创建DBHelper cclass的实例

> DBHelper mDBHlpr =新的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,其余行来自CommonSQLiteUtilities类的logDatabaseInfo方法.
>在子序列运行时,将不会复制数据库,因为它已经存在.

标签:android,android-sqlite,android-database
来源: https://codeday.me/bug/20191013/1908479.html