我有一个从Sqlite浏览器导出的csv文件包含一个表,我把它放在sdcard中。我希望我能以编程方式导入我的Android应用程序数据库,我尝试了很多 但未能获得任何帮助将不胜感激。我在android中有相同的tabe创建,但我不想通过从csv文件中逐行读取内容并执行每次查询插入...所以主要点是导入是直接
嘿,我已经完成了这段代码public static void InsertCSVFile(String FilePath, String filename,
String TableName) {
try {
FileReader fr = new FileReader(new File("mnt/sdcard/",
"olinecsv.csv"));
BufferedReader br = new BufferedReader(fr);
String data = "";
String tableName = "Test";
String columns = "ID,NAME,TYPE";
String InsertString1 = "INSERT INTO " + tableName + " (" + columns
+ ") values(";
String InsertString2 = ");";
mainDatabase.beginTransaction();
while ((data = br.readLine()) != null) {
StringBuilder sb = new StringBuilder(InsertString1);
String[] sarray = data.split(",");
sb.append(sarray[0] + ",");
sb.append( sarray[1] + ",");
sb.append(sarray[2]);
sb.append(InsertString2);
if(sarray[0].contains("ID"))
continue;
mainDatabase.rawQuery(sb.toString(), null);
//mainDatabase.execSQL(sb.toString());
}
我已将该文件放在sdcard中,并且我正在获取查询StringBuilder,但是出现错误或异常并且没有输入任何内容但是,在调试相同的查询时,我在Sqlite程序中运行它工作 看到我正在制作和错误,我们将不胜感激。
答案 0 :(得分:2)
您无法使用内置的CSV导入功能:您需要逐行读取CSV文件并插入。有许多CSV解析程序(我个人使用OpenCSV),它可以很好地读取磁盘上的CSV文件并提取行。如果您在编写有效的插入函数时遇到问题,请提出问题并包含您的代码。
答案 1 :(得分:1)
试试这段代码,
在res> raw中创建一个文件夹,并将yourfile.csv文件放在原始文件夹中。
添加此方法以在sqlite中插入数据,
public void insertCSVData(Activity activity, InputStream is, String tableName) {
String colunmNames = null, str1 = null;
open();
try {
BufferedReader buffer = new BufferedReader(new InputStreamReader(is));
String line = "";
String str2 = ");";
db.beginTransaction();
int i = 0;
while ((line = buffer.readLine()) != null) {
i++;
if (i == 1) {
colunmNames = line;
str1 = "INSERT INTO " + tableName + " (" + colunmNames + ") values (";
} else {
StringBuilder sb = new StringBuilder(str1);
String[] str = line.split(",");
for (int h = 0; h < str.length; h++) {
if (h == str.length - 1) {
sb.append("'" + str[h] + "'");
} else {
sb.append("'" + str[h] + "',");
}
}
sb.append(str2);
db.execSQL(sb.toString());
}
}
db.setTransactionSuccessful();
db.endTransaction();
} catch (Exception e) {
close();
e.printStackTrace();
}
close();
}
public void open() {
db = this.getWritableDatabase();
}
public void close() {
db.close();
}
通过
调用此方法insertCSVData(Activity, getResources().openRawResource(R.raw.yourfile.csv), tableName);
我希望此代码可以解决您的问题...