当前位置: 首页 > 面试题库 >

创建具有大量数据的android app数据库

韦繁
2023-03-14
问题内容

我的应用程序的数据库需要填充大量数据,因此在期间onCreate(),不仅有一些创建表sql指令,而且还有很多插入。我选择的解决方案是将所有这些指令存储在res
/ raw中的sql文件中,该文件已加载Resources.openRawResource(id)

它运作良好,但我面对编码问题,sql文件中有一些突出的字符,在我的应用程序中看起来很糟。这是我的代码来做到这一点:

public String getFileContent(Resources resources, int rawId) throws
IOException
  {
    InputStream is = resources.openRawResource(rawId);
    int size = is.available();
    // Read the entire asset into a local byte buffer.
    byte[] buffer = new byte[size];
    is.read(buffer);
    is.close();
    // Convert the buffer into a string.
    return new String(buffer);
  }

public void onCreate(SQLiteDatabase db) {
   try {
        // get file content
        String sqlCode = getFileContent(mCtx.getResources(), R.raw.db_create);
        // execute code
        for (String sqlStatements : sqlCode.split(";"))
        {
            db.execSQL(sqlStatements);
        }

        Log.v("Creating database done.");
        } catch (IOException e) {
            // Should never happen!
            Log.e("Error reading sql file " + e.getMessage(), e);
            throw new RuntimeException(e);
        } catch (SQLException e) {
            Log.e("Error executing sql code " + e.getMessage(), e);
            throw new RuntimeException(e);
        }

我发现避免这种情况的解决方案是从一个巨大的static final String而不是文件中加载sql指令,并且所有突出的字符都显示良好。

但是,难道没有比static final String所有sql指令的big 属性更优雅的方式来加载 sql指令吗?


问题答案:

我认为您的问题出在以下方面:

return new String(buffer);

您正在将字节数组转换为,java.lang.String但没有告诉Java /
Android要使用的编码。因此,由于使用了错误的编码,因此未正确转换重音字符的字节。

如果使用String(byte[],<encoding>)构造函数,则可以指定文件具有的编码,并且字符将正确转换。



 类似资料:
  • 本文向大家介绍Docker 创建数据量,包括了Docker 创建数据量的使用技巧和注意事项,需要的朋友参考一下 示例 此命令从mysql图像创建一个新容器。它还会创建一个新的数据卷,然后将其装入容器中/var/lib/mysql。该卷可帮助其中的任何数据在容器的生命周期之外持续存在。也就是说,当删除容器时,其文件系统更改也将被删除。如果数据库正在容器中存储数据,并且容器已被删除,则所有这些数据也将

  • 我创建了一个向MySql数据库插入数百万个值的程序。我读到过有关批插入的文章,它将优化我的程序并使其更快,但当我尝试这样做时,它以同样的方式工作。我没有将每个值插入数据库,而是每次将500个值保存在一个列表中,然后将它们插入一个大循环中,如下所示: 然后我删除列表中的所有值,并再次开始收集500个值。它不应该工作得更好吗? 我的插入代码是: 我有一些问题: 1。为什么当我批量插入时它不能更快地工作

  • 问题内容: 我正在使用PHP。 我有以下具有关系数据(父子关系)的数组。 我需要采用这种JSON格式: 我知道我需要创建一个多维数组并通过json_encode()运行它。我还认为,用于此操作的此方法必须是递归的,因为现实世界中的数据可能具有未知数量的级别。 我很高兴展示我的一些方法,但是它们没有用。 谁能帮我? 我被要求分享我的工作。这是我尝试过的方法,但还没有达到我所不知道的帮助程度。 我做了

  • 创建数据源的基本步骤: 在工作区窗口中,点击 “新建数据源”。 输入数据源的名,然后选择所需的连接或现有的数据源。 点击“确定”。 一个选项卡将打开,让你编辑数据源。 将表或查询从连接窗格拖放到设计窗格。 将一个节点拖放到另一个节点以创建联接。 如有需要,请配置联接类型和联接字段。 【提示】创建联接后,你可以随时点击连接器上的联接图标来更改联接设置。 选择“实时”模式或“存档”模式。 点击“应用并

  • 创建数据源的基本步骤: 在工作区窗口中,点击 。 输入数据源的名,然后选择所需的连接或现有的数据源。 点击“好”。 一个选项卡将打开,让你编辑数据源。 将表或查询从连接窗格拖放到设计窗格。 将一个节点拖放到另一个节点以创建联接。 如有需要,请配置联接类型和联接字段。 【提示】创建联接后,你可以随时点击连接器上的联接图标来更改联接设置。 选择“实实时”模式或“存档”模式。 点击“应用并刷新数据”来查

  • 创建数据源的基本步骤: 在工作区窗口中,点击 “新建数据源”。 输入数据源的名,然后选择所需的连接或现有的数据源。 点击“确定”。 一个选项卡将打开,让你编辑数据源。 将表或查询从连接窗格拖放到设计窗格。 将一个节点拖放到另一个节点以创建联接。 如有需要,请配置联接类型和联接字段。 【提示】创建联接后,你可以随时点击连接器上的联接图标来更改联接设置。 选择“实时”模式或“存档”模式。 点击“应用并