2012-04-24 383 views
3

我有一个从Sqlite浏览器导出的csv文件,其中包含一个表格,并且我将它放在了sdcard中。我希望我可以通过编程导入到我的android应用程序数据库我试了很多 ,但未能取得任何帮助,将不胜感激。我有相同的Tabe在Android中创建,但我不想通过从csv文件逐行读取内容并执行每次查询插入...因此主要点是导入是直接将CSV文件导入到Android应用程序Sqlite数据库

嘿我已经通过这代码

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()); 
     } 

我有在SD卡文件的地方,我正在查询的StringBuilder但错误或异常都正在添加,并没有在表中获取进入,但在调试时我在它的工作sqlite的程序运行相同的查询 看到我在作出和错误,并进一步的建议,将不胜感激

+0

请发表您的logcat的异常 – Simon 2012-04-24 07:41:05

+0

@simon我得到任何异常,但没有进入 – 2012-04-24 09:49:04

+0

好吧我已经发现问题,我使用的线路不合理mainDatabase.beginT ransaction();删除线提出了我的问题,谢谢他们的贡献 – 2012-04-24 10:20:38

回答

2

没有内置的CSV导入功能可用:您需要逐行读取CSV文件并插入它。有许多CSV解析程序(我个人使用OpenCSV),可以很好地读取磁盘上的CSV文件并提取行。如果您在编写有效插入函数时遇到问题,请提出问题并包含您的代码。

+0

谢谢你好,那么如果我们有一个接一个地插入...还有一件事是有其他的方式来实现这一点 – 2012-04-24 06:13:38

+0

导入是从一种存储格式(在这种情况下,CSV),并插入到另一个(在这种情况下,您的数据自定义SQLite格式)。在这种情况下,*方法*需要由您手动执行,因为没有内置的方法可以描述CSV文件中的行如何转换为Android平台上的自定义SQLite格式。 – Femi 2012-04-24 07:04:19

+0

实际上在sqlite中有导入CSV文件的命令,但我不知道它是否存在于任何库中。 'sqlite> create table test(id integer,datatype_id integer,level integer,meaning text);' 'sqlite> .separator“,”' 'sqlite> .import no_yes.csv test' [link](http:// www.sqlite.org/cvstrac/wiki?p=ImportingFiles) – kubo 2013-11-01 19:36:58

1

试试这个代码,

创建资源>原始文件夹,并把你的yourfile.csv文件夹原料。

添加此methos插入在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); 

我希望这个代码解决您的问题...

+0

你能告诉我你在做什么Open(), – Sathish 2016-07-25 10:29:38

+0

@Sathish在打开和关闭im打开和关闭数据库。 – 2016-07-25 10:44:09

+0

@Sathish看到我现在编辑我的答案...... !!! – 2016-07-25 10:46:16

相关问题