2015-06-09 35 views
2

我已經嘗試了以下代碼來分割csv值,現在如何將它插入到數據庫中?我是否已經將值保存到單獨的變量以匹配列名稱?我無法弄清楚。如何在java中將值從csv插入數據庫

注意:我現在不想使用任何csv解析器。我只想做手工

public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException { 
     String name; 
     String email; 
     String phone; 
     String ID; 

     Connection con = OracleDBConnection.getConnection(); 
     String query = "Insert into NEWSTUDENT values(?,?,?,?)"; 
       PreparedStatement st = con.prepareStatement(); 
       st.executeUpdate(query);   

     try { 
      BufferedReader bReader = new BufferedReader(new FileReader("1000rows.csv")); 

      while (bReader != null) { 
       String read; 
       try { 
        read = bReader.readLine(); 
        if (read != null) 
        { 
         String[] array = read.split(",+"); 
         for(String result:array) 
         { 
          System.out.println(result); 
         } 
        } 
       } catch (IOException ex) { 
        ex.printStackTrace(); 
       } 
       finally 
       { 
        if (bReader == null) 
        { 
         bReader.close(); 
        } 
       } 
      } 
     } catch (FileNotFoundException ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 

輸出:

1Kiriti 
[email protected] 
880789939 

列名在數據庫:

Name Email Phone ID 
+0

使用PreparedStatement – agad

回答

3

使用Parepared語句並在while循環中構建查詢並執行它。欲瞭解更多有關準備語句請Check this link

String sql = " INSERT INTO TABLE_(name,email,phone,id) VALUES(?,?,?,?) "; 


try { 
     BufferedReader bReader = new BufferedReader(new FileReader("1000rows.csv")); 
     String line = ""; 
     while ((line = bReader.readLine()) != null) { 
      try { 

       if (line != null) 
       { 
        String[] array = line.split(",+"); 
        for(String result:array) 
        { 
         System.out.println(result); 
//Create preparedStatement here and set them and excute them 
       PreparedStatement ps = yourConnecionObject.createPreparedStatement(sql); 
       ps.setString(1,str[0]); 
       ps.setString(2,str[1]); 
       ps.setString(3,str[2]); 
       ps.setString(4,strp[3]) 
       ps.excuteUpdate(); 
       ps. close() 
    //Assuming that your line from file after split will folllow that sequence 

        } 
       } 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
      finally 
      { 
       if (bReader == null) 
       { 
        bReader.close(); 
       } 
      } 
     } 
    } catch (FileNotFoundException ex) { 
     ex.printStackTrace(); 
    } 
+0

我的問題如何在循環中將循環中的值與數組中的值進行匹配 – kittu

2

您可以存儲陣列中的數據並將其綁定到你的發言:

String query = "Insert into NEWSTUDENT values(?,?,?,?)"; 

PreparedStatement st = con.prepareStatement(query); 
st.setString(1,array [0]); 
st.setString(2,array[1]); 
.... 
st.executeUpdate();   

欲瞭解更多信息關於預處理語句的離子參見oracle documentation

3

您可以使用Prepare Statement,並在每次迭代設置參數的值:

Connection con = OracleDBConnection.getConnection(); 
String query = "Insert into NEWSTUDENT values(?,?,?,?)"; 
PreparedStatement ps=con.prepareStatement(query); 
ps.setString(1,array[0]); 
ps.setString(2,array[1]); // and so on 
ps.executeUpdate(); 

如果沒有一行是更多,你也可以使用批處理:

String sql = "Insert into NEWSTUDENT values(?,?,?)"; 


PreparedStatement preparedStatement = null; 
try{ 
    preparedStatement = 
      connection.prepareStatement(sql); 

    preparedStatement.setString(1, "Gary"); 
    preparedStatement.setString(2, "Larson"); 
    preparedStatement.setString (3, "Test"); 

    preparedStatement.addBatch(); 

    preparedStatement.setString(1, "Stan"); 
    preparedStatement.setString(2, "Lee"); 
    preparedStatement.setString (3, 456); 

    preparedStatement.addBatch(); 

    int[] affectedRecords = preparedStatement.executeBatch(); 

}finally { 
    if(preparedStatement != null) { 
     preparedStatement.close(); 
    } 
} 
+0

我有大約1000行 – kittu

+0

然後您可以使用批處理! –