将数据库从资产复制到数据库文件夹[重复]

2023-12-01

在主要活动中,我有一个方法可以从assets to the databases文件夹:

try{
    // CHECK IS EXISTS OR NOT
    SQLiteDatabase dbe = SQLiteDatabase.openDatabase("/data/data/com.henanet.dalel/databases/mydb.sqlite",null, 0);
    dbe.close();
    // COPY IF NOT EXISTS
    AssetManager am = getApplicationContext().getAssets();
    OutputStream os = new FileOutputStream("/data/data/com.henanet.dalel/databases/mydb.sqlite");
    byte[] b = new byte[100];
    int r;
    InputStream is = am.open("mydb.sqlite");
    while ((r = is.read(b)) != -1) {
        os.write(b, 0, r);
    }
    is.close();
    os.close();
}
catch(Exception e)
{

}

但是一旦用户安装了该应用程序,他就会在 LogCat 中收到以下错误:

09-14 22:57:25.694: I/Database(19903): sqlite returned: error code = 14, msg = cannot               open file at source line 25467
09-14 22:57:25.694: E/Database(19903): sqlite3_open_v2("/data/data/com.henanet.dalel/databases/mydb.sqlite", &handle, 2, NULL) failed

我的方法

使用以下命令获取您的数据库路径

ContextWrapper cw =new ContextWrapper(getApplicationContext());
DB_PATH =cw.getFilesDir().getAbsolutePath()+ "/databases/"; //edited to databases

那么你可以这样走

private void copyDataBase()
    {
        Log.i("Database",
                "New database is being copied to device!");
        byte[] buffer = new byte[1024];
        OutputStream myOutput = null;
        int length;
        // Open your local db as the input stream
        InputStream myInput = null;
        try
        {
            myInput =myContext.getAssets().open(DB_NAME);
            // transfer bytes from the inputfile to the
            // outputfile
            myOutput =new FileOutputStream(DB_PATH+ DB_NAME);
            while((length = myInput.read(buffer)) > 0)
            {
                myOutput.write(buffer, 0, length);
            }
            myOutput.close();
            myOutput.flush();
            myInput.close();
            Log.i("Database",
                    "New database has been copied to device!");


        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将数据库从资产复制到数据库文件夹[重复] 的相关文章

随机推荐

  • JTextField 时间(HH:mm:ss)

    我有一个浮动的特定任务所需的估计时间 以分钟为单位 如何将其放入 JFormattedTextField 中 格式为HH mm ss 对于 Calendar and DateFormat float minutes 100 5f 1 40
  • 如何在Python中使用联合类型? [复制]

    这个问题在这里已经有答案了 我找到了以下代码 def get iterator from config config dict data dict iterator config config dataset iterator iterat
  • Solrj 从 Android 索引文档

    我正在尝试使用 Android 应用程序中的 Solrj 来索引文档 但它似乎不起作用 我关注这个LINK 这是我正在编写的代码 package com example secondapp import android app Activi
  • SQLite数据库错误,无用日志

    我发布了应用程序的更新 但从用户那里收到了大量错误 我无法重新创建它或查明问题 我收到两个错误 java lang IllegalStateException attempt to re open an already closed obj
  • Angular Router - 网址更改但视图未加载

    我刚刚开始调整示例角度 离子选项卡导航应用程序 但遇到了问题 当我点击一个视图中的链接 所有旅程的列表 时 我应该被带到一个屏幕 其中包含有关该特定旅程的详细信息 改编自示例应用程序中的 聊天 然而它并不完全有效 URL 更改为预期的 UR
  • 如何为复杂的计算设置超时?

    我正在写一个像这样的程序 results for i in range 30 x 4 5 i results append x 然而 当i变得更大 结果并没有太大而无法提高 OverflowError 这将需要一个long计算结果的时间 所
  • 停止函数写入标准输出

    我的代码中有这一行 writer cv CreateVideoWriter video avi cv CV FOURCC X V I D 30 480 800 1 哪些输出可以对此进行控制台 Output 0 avi to video av
  • 执行 cx_Freeze 结果时的循环依赖

    我面临着一个非常简单的重现问题 但我根本不明白发生了什么 我尝试编译一个Python脚本 它使用fastparquet依赖关系 与 cx Freeze 当我直接启动它时 我能够执行我的脚本python script py 但是如果我用 cx
  • C# MySQL 连接过多

    我试着跑SELECT在桌子上MySql我收到此错误 Server Error in MyApp Application Too many connections Description An unhandled exception occu
  • 逐字突出显示表格中的文本,而不是整个范围

    我想为 html 表创建过滤器 例如网站 ctrl f 但当前代码突出显示搜索输入单个单词时的所有范围 无需任何插件 就像下图一样 Html表格过滤 search keyup function console log this val if
  • 如何使用 FFMpeg -timestamp 语法

    Hi All ffMpeg timstamp 选项是否像上图一样工作 07 21 54 07 07 05 黑盒容器中的白色文本 在 ubuntu 12 04 中 像这样输入执行 ffmpeg y f video4linux2 s vga r
  • 在 Excel 中每 X 行插入行

    我有一长串代码 例如 008 45 等 需要多行文本来解释它们 我有代码列表 我想知道如何自动插入一行 例如第五行 下面的例子 1 2 3 4 5 6 7 8 9 10 100 每五行我想插入给定数量的我选择的行 我怎样才能做到这一点 谢谢
  • 如何将 Java 8 LocalDateTime 与 JPA 和 Hibernate 结合使用

    我有以下类描述片段 Column name invalidate token date Temporal TemporalType TIMESTAMP private LocalDateTime invalidateTokenDate 此代
  • 使用 PHP 脚本运行 shell 命令

    我正在使用 CodeIgniter 创建应用程序 但无法使用 PHP 脚本运行 Linux 命令 如何运行终端命令 我试过了shell exec and exec 但是在使用 CI 时两者都不起作用 这取决于您的服务器配置 如果这些功能被禁
  • QMainWindow 在 show() 之后立即关闭

    我是 Qt 新手 主要使用 Objective C 所以我遇到了可能是新手问题 来自QDialog我尝试打开的窗口QMainWindow像这样 this gt close SQLWindow window window receivePat
  • 使用 python requests 模块在单个请求中上传多个文件

    蟒蛇请求模块提供了有关如何在单个请求中上传单个文件的良好文档 files file open report xls rb 我尝试使用此代码来扩展该示例 以尝试上传多个文件 files file open report xls rb open
  • 如何使用 CAPI 的 CryptImportKey 和来自 OpenSSL 的 PEM 编码公钥?

    如何获取 Microsoft 的 CryptoAPICryptImportKey函数导入一个PEM编码密钥 它确实有效 但是CryptDecrypt返回错误 1 Generate a Public Private RSA key pair
  • 使用 CSS 从中间展开 div,而不是仅从顶部和左侧展开

    我不确定这是否可行 但我认为使用 CSS 转换来创建 div 从其中心扩展到预定高度和宽度 而不仅仅是从左上角 的效果会很酷 例如 如果我有 demo div div 和 为简洁起见 省略了供应商前缀 square width 10px h
  • VS2015 尝试运行应用程序时出错:无效指针

    当您调试 Visual Studio 2015 解决方案时 您会看到以下错误消息 尝试运行应用程序时出错 指针无效 显然有些东西配置不正确 或者与权限相关 只是想知道是否有人已经找出原因 根据杰里米的建议 我查看了活动日志 有关活动日志的信
  • 将数据库从资产复制到数据库文件夹[重复]

    这个问题在这里已经有答案了 在主要活动中 我有一个方法可以从assets to the databases文件夹 try CHECK IS EXISTS OR NOT SQLiteDatabase dbe SQLiteDatabase op