2014-03-07 94 views
0

我做中,我想從使用JFileChooser的用戶請執行下列操作步驟 -爪哇 - ArrayIndexOutOfBoundsException異常由於INSERT查詢

  1. 輸入HTML表格文件中的應用程序。

  2. 轉換在html爲csv該表。

  3. 填充我的數據庫與.csv文件的內容。

這是延續以前的問題,我問 - link.

 final JFileChooser fileDialog = new JFileChooser(); 
    JButton btnInputFile = new JButton("Input File"); 
    btnInputFile.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 

      int returnVal = fileDialog.showOpenDialog(rootPane); 
      if (returnVal == JFileChooser.APPROVE_OPTION) { 
       java.io.File file = fileDialog.getSelectedFile(); 

       String name = file.getName(); 
       name = name.substring(0, name.lastIndexOf(".")); 
       name += ".html"; 
       File newFile = new File(file.getParentFile(), name); 
       if (file.renameTo(newFile)) { 
        try { 
        TableToCSV tableToCSV = new TableToCSV(newFile, ',', '\"', '#', CSV.UTF8Charset); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       } 

       try 
       { 
       BufferedReader br=new BufferedReader(new FileReader(newFile)); 
       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]+"','"+value[5]+"')"; 

        PreparedStatement pst = DatabaseConnection.ConnectDB().prepareStatement(sql); 
        pst.executeUpdate(); 

       } 
       br.close(); 

       } 

       catch(Exception e) 
       { 
       JOptionPane.showMessageDialog(null, e); 
       } 

      } 

     } 
    }); 
    btnInputFile.setFont(new Font("Segoe UI Symbol", Font.BOLD, 15)); 
    btnInputFile.setBounds(34, 31, 122, 51); 
    getContentPane().add(btnInputFile); 

一旦運行,它顯示java.lang.ArrayIndexOutOfBoundsException - 1錯誤。由於它將文件轉換爲csv,我認爲這部分代碼有些問題。

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]+"','"+value[5]+"')" 

回答

0

最有可能其中一行少於6個元素。在訪問它們之前確保數組有6個元素。

String[]value = line.split(","); 
if(value.length != 6){ 
    continue; 
} 
String sql = "INSERT into main 
+0

不能說。我試過System.out.println(value.length),它返回= 1。這是不正確的。我哪裏錯了? csv肯定有6列 – satnam

+0

您是否在CSV中使用逗號作爲分隔符。只要打印行如果長度!= 6。 – user2793390

+0

是的,逗號是分隔符。如何打印該行?它顯示value.length = 1,所以也許它不正確的列數? – satnam

0

newFile對象創建一個空白文件,並且您正在讀取newFile BufferedReader br=new BufferedReader(new FileReader(newFile));。這可能是你無法獲取任何記錄的原因,因此它拋出ArrayOutOfBoundsException。

+0

這正是我的想法。那麼我應該如何放置而不是newFile,以便輸入新創建的.csv文件? – satnam