2

我在包含多行的文件中有 csv。如果第一列值没有,则它给出错误并且 m 无法插入数据库。ex 如果行是 :130,1,datafile8.csv, 2007 ,17,List_date 读取 n 插入没有问题,但如果行是:,0,datafile8.csv,Bihar,7,list_Left ,无法读取 n 插入 .how在上面的行中插入null。所以我可以在数据库中插入dis行。

String keyword = "celldescription.csv";
File makefile = new File(keyword);
  BufferedReader r2 = new BufferedReader(new FileReader(makefile));
  strLine1 = r2.readLine();
   System.out.println (strLine1);
   String r="0";int r1=0;

  while((strLine1=r2.readLine())!=null)
   {
  System.out.println (strLine1);

  StringTokenizer st2 = new StringTokenizer(strLine1, ",");
  // Print the content on the console


        String cellvalue = st2.nextToken();          


        String position = st2.nextToken();


        String Docid=st2.nextToken();


        String Word=st2.nextToken();


        String Count=st2.nextToken();

        String List_Entry=st2.nextToken();


        String tab3="insert into description(cellvalue,position,Docid,Word,Count,List_Entry) values(?,?,?,?,?,?)";
        ps = connection.prepareStatement(tab3);
        ps.setString (1,cellvalue );
        ps.setString (2,position );
        ps.setString (3,Docid);
        ps.setString (4,Word );
        ps.setString (5,Count );
        ps.setString (6,List_Entry );
        ps.executeUpdate();



 }//end of while



  r2.close();

 System.out.println("Data is inserted");

        }//try closed**
4

2 回答 2

2

当您String strLine1以逗号(,)开头时,StringTokenizer如果它在开始或结束甚至介于两者之间,则省略空字符串。

前任 -,0,datafile8.csv,Bihar,7,list_Left

令牌->"0" - "datafile8.csv" - "Bihar" - "7" and "list_Left"

最好用逗号(,)分割字符串。前任 -

String[] str = strLine1.split(",",-1);

字符串 [] ->["","datafile8.csv","Bihar","7" and "list_Left"]

于 2013-02-15T10:15:46.530 回答
1

您可能需要考虑使用 java 库来处理 csv 文件。 OpenCSV就是其中之一,它对我帮助很大。

它的一些特点:

  • 每行任意数量的值
  • 忽略引用元素中的逗号
  • 处理带有嵌入回车的引用条目(即跨越多行的条目)
  • 可配置的分隔符和引号字符(或使用合理的默认值)
  • 一次阅读所有条目,或使用迭代器样式模型
  • 从 String[] 创建 csv 文件(即嵌入引号字符的自动转义)
于 2013-02-15T10:25:57.817 回答