【问题标题】:Java - Import .csv to database - Exclude last rowJava - 将 .csv 导入数据库 - 排除最后一行
【发布时间】:2014-03-12 08:49:26
【问题描述】:

我正在从 .csv 文件导入数据库值。但是,.csv 中的最后一行实际上是某些列的总数,我的导入程序将数据库更新为最后一行,这是不可取的。这会打乱我稍后会用它做的查询。请帮助我如何防止这种情况发生?

我的 .csv 导入器代码:

try
{
    BufferedReader br=new BufferedReader(new FileReader("v.csv"));
    String line;
    while((line=br.readLine())!=null)
    {
        String[]value = line.split(",");
        String sql = "INSERT into main ([Ticket #], Status, Priority, Department, [Account Name]) "
                + "values ('"+value[0]+"','"+value[1]+"','"+value[2]+"','"+value[3]+"','"+value[4]+"')";
        System.out.println(sql);
        PreparedStatement pst = null;
        try
        {
            pst = db.prepareStatement(sql);
            pst.executeUpdate();
        }finally{
            if(pst != null){
                pst.close();
            }
        }
    }
    br.close();
}
catch(Exception e)
{
    JOptionPane.showMessageDialog(null, e);
}

【问题讨论】:

    标签: java sql database csv import


    【解决方案1】:

    试试这个:

    try
    {
        BufferedReader br=new BufferedReader(new FileReader("v.csv"));
        ArrayList<String> lines = new ArrayList<String>();
        String line;
        while((line=br.readLine())!=null)
        {
            lines.Add(line);
        }
        br.close();
        if (lines.size() > 1) { // be sure that the last row exists (prevents indexoutexception)
            for (int i = 0; i < lines.size() - 1; i++) { // the - 1 excludes the last row
                String[]value = lines.get(i).split(",");
                String sql = "INSERT into main ([Ticket #], Status, Priority, Department, [Account Name]) "
                        + "values ('"+value[0]+"','"+value[1]+"','"+value[2]+"','"+value[3]+"','"+value[4]+"')";
                System.out.println(sql);
                PreparedStatement pst = null;
                try
                {
                    pst = db.prepareStatement(sql);
                    pst.executeUpdate();
                } finally {
                    if(pst != null) {
                        pst.close();
                    }
                }
            }
        }
    }
    catch(Exception e)
    {
        JOptionPane.showMessageDialog(null, e);
    }
    

    【讨论】:

      【解决方案2】:

      如果可能,您可以使用 Apache commons IO ReversedLinesFileReader 并从最后读取 CSV。然后你可以跳过第一行。

      【讨论】:

        【解决方案3】:

        试试这个:

        try
        {
            BufferedReader br=new BufferedReader(new FileReader("v.csv"));
            String line;
            String firstFlag =true;
            while((line=br.readLine())!=null)
            {
             if (!firstFlag){
        
            String sql = "INSERT into main ([Ticket #], Status, Priority, Department, [Account      Name]) "
                    + "values      ('"+value[0]+"','"+value[1]+"','"+value[2]+"','"+value[3]+"','"+value[4]+"')";
                System.out.println(sql);
                PreparedStatement pst = null;
                try
                {
                    pst = db.prepareStatement(sql);
                    pst.executeUpdate();
                }finally{
                    if(pst != null){
                        pst.close();
                    }
                }
         }
             String[]value = line.split(",");
             firstFlag=false;
            }
             br.close();
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(null, e);
        }
        

        【讨论】:

          猜你喜欢
          • 2014-04-16
          • 2012-08-29
          • 1970-01-01
          • 1970-01-01
          • 2011-08-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-11
          相关资源
          最近更新 更多