将CSV文件导入Android Apps Sqlite数据库

时间:2012-04-24 06:01:21

标签: android database sqlite csv import

我有一个从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程序中运行它工作 看到我正在制作和错误,我们将不胜感激。

2 个答案:

答案 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);

我希望此代码可以解决您的问题...