在Android中将数据从CSV文件复制到Sqlite文件

时间:2019-04-21 01:21:11

标签: android csv android-sqlite

我想将数据从CSV文件复制到我的android应用程序的SQLite文件.SQLite表结构,即列与CSV文件列不同。 CSV文件中还有更多列。我正在尝试使用DB Browser SQLite软件。

是否可以通过这些应用程序复制数据,或者我应该编写一些代码来做到这一点?有人可以建议吗?

2 个答案:

答案 0 :(得分:1)

如果CSV文件中的列未映射到SQLite表中的列,则需要首先进行一些数据转换,即将列数减少为表中的列数,并相应地命名。 然后,您可以使用内置的CSV导入程序来导入数据。

  1. 打开终端并启动sqlite提示。
  2. 将模式设置为csv

    sqlite> .mode csv

  3. 使用以下命令从csv文件导入数据:

    sqlite> .import c:/path/to/your/file/use/forward/slashes destination_table_name

这是一个非常好的教程。 http://www.sqlitetutorial.net/sqlite-import-csv/

答案 1 :(得分:1)

我建议使用SQLite Studio导入CSV数据,并从该CSV文件创建一个SQLite数据库文件。您可以找到details here。您也可以从命令行参数执行此操作,如提供的链接所示。

$ sqlite3 mydb // This creates a new database
.mode csv // Enable to import from the csv
.import c:/sqlite/city.csv cities // import a csv file and create a table having the column name same as found in the first row of your csv file

有了SQLite数据库后,现在可以使用数据库查询添加,删除或修改列及其名称。

准备好数据库后,可以将该数据库文件放入Android Studio项目的资产目录中,并在启动应用程序时,将数据库从资产目录复制到本地存储中,以便您可以访问Android应用程序。我附上了一个示例代码,用于将数据库文件从资产目录复制到内部存储器。

private void copyFromAssetsAndCreateDatabase() {

    InputStream mInputStream;
    private String DB_PATH = "/data/data/" + "your.application.package.goes.here" + "/databases/";

    try {
        mInputStream = getApplicationContext().getAssets().open(YOUR_DATABASE_NAME);

        File dir = new File(DataHelper.DB_PATH);
        if (!dir.exists()) dir.mkdir();
        File f = new File(DataHelper.DB_PATH + YOUR_DATABASE_NAME);
        if (!f.exists()) {
            f.createNewFile();
        }

        OutputStream mOutput = new FileOutputStream(f);
        byte[] mBuffer = new byte[1024];
        int mLength;
        while ((mLength = mInputStream.read(mBuffer)) > 0) {
            mOutput.write(mBuffer, 0, mLength);
        }

        mOutput.flush();
        mOutput.close();
        mInputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

希望有帮助!