2013-03-21 75 views
1

我有一個包含8列的csv文件。當我將csv文件導入到mysql數據庫時,它忽略了第二列,並將剩餘的數據從其他列轉移到左邊,請幫助。在mysql數據庫中導入csv文件

我認爲問題在於csv文件,因爲一些csv文件已成功上傳。我該如何解決它?

這是我的查詢到csv文件存儲到數據庫:

LOAD DATA INFILE '$file_name' INTO TABLE import 
FIELDS TERMINATED BY '|' 
LINES TERMINATED BY '\n' 
IGNORE 1 LINES 
(@srno,@customer_name,@date,@mobno,@city,@state,@type,@telecaller) 
SET [email protected]_name,[email protected],[email protected],[email protected], 
[email protected],[email protected],[email protected],datetime='$datetime' 
+4

也許你應該提供csv samle呢? – 2013-03-21 09:35:30

回答

-1

此代碼爲我工作。用本地數據庫進行測試。

package Example_Import; 

import java.sql.*; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.io.*; 
import java.lang.String; 
import java.util.Scanner; 

public class Example { 

    //import mysql-connector-java-5.1.32.jar 
    //http://www.tutorialspoint.com/jdbc/jdbc-create-tables.htm 
    private static String JDBC_URL = "jdbc:mysql://localhost:3306/sakila"; 
    private static String USER = "root"; 
    private static String PASSWORD = "2004"; 

    public static void main(String[] args) throws IOException { 

     Connection myConnection = null; 
     Statement statement = null; 
     PreparedStatement preparedStatement = null; 

     try{ 
      //CONNECTING TO THE DATABASE 
      myConnection = DriverManager.getConnection(JDBC_URL, USER, PASSWORD); 


      System.out.println("Connected to database"); //CONNECTED 

      //CREATING TABLE IN THE DATABASE  
      System.out.println("Creating table in given database..."); 
      statement = myConnection.createStatement(); 

      String sql = "CREATE TABLE REGISTRATION " + 
          "(id INTEGER not NULL, " + 
          " last VARCHAR(25), " + 
          " first VARCHAR(25), " + 
          " balance FLOAT, " + 
          " Credit FLOAT," + 
          " Date DATE," + 
          " Rating CHAR," + 
          " PRIMARY KEY (id))"; 

      statement.executeUpdate(sql); 
      System.out.println("Created table in given database..."); 
      statement.close(); //closing statement 


      //CREATING A PREPARED STATEMENT 
      String insertTableSQL = "INSERT INTO REGISTRATION" 
        + "(id, last, first, balance, Credit, Date, Rating) VALUES" 
        + "(?,?,?,?, ?, ?, ?)"; 


      preparedStatement = myConnection.prepareStatement(insertTableSQL); 

      //RETRIEVING INFORMATION FROM CSV FILE 

      //opening a file input stream 
      BufferedReader reader = new BufferedReader(new FileReader("SAMPLE.csv")); 

      String line = null; //line read from csv 
      Scanner scanner = null; //scanned line 

      SimpleDateFormat date = new SimpleDateFormat("mm/DD/yyyy"); 

      reader.readLine(); //omits the first line 

      //READING FILE LINE BY LINE AND UPLOADING INFORMATION TO DATABASE 
      while((line = reader.readLine()) != null){ 
       scanner = new Scanner(line); 
       scanner.useDelimiter(","); 
       while(scanner.hasNext()){ 
         preparedStatement.setInt(1,Integer.parseInt(scanner.next())); 
         preparedStatement.setString(2, scanner.next()); 
         preparedStatement.setString(3, scanner.next()); 
         preparedStatement.setFloat(4, Float.parseFloat(scanner.next())); 
         preparedStatement.setFloat(5, Float.parseFloat(scanner.next())); 
         try { 
          java.util.Date d; 
          d = date.parse(scanner.next()); 
          preparedStatement.setDate(6, new java.sql.Date(d.getTime())); 
         } catch (ParseException e) { 
          e.printStackTrace(); 
         } 
         preparedStatement.setString(7, scanner.next()); 
        } 
        preparedStatement.executeUpdate(); 
      } 

      preparedStatement.close(); 
      System.out.println("Data imported"); 

      reader.close(); //closing CSV reader 

     } catch (SQLException e){ 
      e.printStackTrace(); 
     }finally{//CLOSING CONNECTION 
      try{ 
       if(statement!=null) 
        myConnection.close(); 
       }catch(SQLException se){ 
       }// do nothing 
       try{ 
       if(myConnection!=null) 
        myConnection.close(); 
       }catch(SQLException se){ 
       se.printStackTrace(); 
       } 
       System.out.println("Connection closed"); 
     } 
    } 
} 
+0

OP沒有要求Java,我們也不需要另一個海量代碼轉儲作爲答案。 – siride 2014-11-17 00:25:03