我想将数据从CSV文件复制到我的android应用程序的SQLite文件.SQLite表结构,即列与CSV文件列不同。 CSV文件中还有更多列。我正在尝试使用DB Browser SQLite软件。
是否可以通过这些应用程序复制数据,或者我应该编写一些代码来做到这一点?有人可以建议吗?
答案 0 :(得分:1)
如果CSV文件中的列未映射到SQLite表中的列,则需要首先进行一些数据转换,即将列数减少为表中的列数,并相应地命名。 然后,您可以使用内置的CSV导入程序来导入数据。
将模式设置为csv
sqlite> .mode csv
使用以下命令从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();
}
}
希望有帮助!