2016-08-02 64 views
0

所以基本上我通過一個基於控制檯的菜單讓我的程序,是嗎?它是一個數據庫管理器,它通過回答數字來操作(你知道,輸入'1'輸入記錄,輸入'2'來導出記錄等)。所以在這裏沒有什麼不同的方法來混淆參數。但它似乎沒有工作呢? 這裏是我的代碼,之後我會告訴你我試過了什麼。通過JDBC將CSV內容加載到數據庫中?

public void loadCSV(String table, String filename) { 
    String query; 

    try (Statement st = con.createStatement()) { 
     Class.forName("com.mysql.jdbc.Driver"); 
     con = DriverManager.getConnection("jdbc:mysql://localhost:3306/DrSoheirManager", "root", "ITGS!!!"); 
     st = con.createStatement(); 
     query = "load data local infile '/Users/****/NetBeansProjects/IA Draft 3/" + 
       filename + "' ignore into table " + table + " columns terminated 
       by ',' \n" + " lines terminated by '\\n'"; 
     /* load data local infile '/users/****/netbeansprojects/ia draft 
      3/patients.csv' ignore into table */ 
     st.execute(query); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     st = null; 
    } 
} 

所以如何(應)中使用的方法,基本上是:loadCSV( 「患者」,patients.csv);其中患者是我想要輸入值的表的名稱,而patients.csv是我想輸入的值的來源。 這是我第一次使用JDBC,所以我不熟悉涉及的方法,但我試圖用st.executeQuery()和st.executeUpdate()替換st.execute(查詢),都沒有工作。事先我得到一個錯誤,但改變SQL查詢有點似乎已經修復了。現在我沒有收到錯誤,但是這些信息並沒有被添加到數據庫中。

ps:我使用'忽略'功能,因爲我希望能夠導入數據庫而不添加重複項。我做對了嗎?

如果我違反任何規則發佈此請讓我知道,所以我可以修復我的錯誤。預先感謝您:)

編輯:我的架構:

the table is called patients.

和樣本數據集:

CREATE TABLE IF NOT EXISTS `Patients` (
`ID` int(11) NOT NULL, 
    `fname` text NOT NULL, 
    `lname` text NOT NULL, 
    `Diagnosis` text NOT NULL, 
    `phone` varchar(15) NOT NULL, 
    `email` varchar(25) NOT NULL, 
    `DOB` date NOT NULL, 
    `DOFV` date NOT NULL 
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; 


INSERT INTO `Patients` (`ID`, `fname`, `lname`, `Diagnosis`, `phone`, `email`, `DOB`, `DOFV`) VALUES 
(1, 'hanalei', 'ezz', 'hemophelia', '+1(919)929-6567', '[email protected]', '1998-08-22', '2008-03-12'), 
(2, 'monika', 'zanesco', 'sickle cell disease', '+1(919)939-4264', '[email protected]', '1998-10-05', '2016-04-13'), 
(3, 'bang', 'pham', 'leukemia', '+1(919)243-8937', '[email protected]', '1998-03-15', '2013-03-03'); 
+0

也值得注意的是,我用asterixes代替了我的用戶名,所以這些不存在於我的實際代碼中。 –

+0

顯示你的'show create table xyz'和一個數據樣本(像5行) – Drew

+0

@Drew對不起?你是什​​麼意思? –

回答

0
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class myTest { 

    public static void main(String[] args) { 

     Connection con = null; 
     Statement st = null; 
     ResultSet rs = null; 

     String url = "jdbc:mysql://localhost:3306/so_gibberish"; // **** MODIFY db name (my db_name is so_gibberish) 
     String user = "dbUser"; // **** MODIFY 
     String password = "password123"; // **** MODIFY 

     try { 
      con = DriverManager.getConnection(url, user, password); 
      st = con.createStatement(); 
      String sSqlLinux="LOAD DATA INFILE '/Users/nate/patients.txt' INTO TABLE Patients " + 
      " FIELDS TERMINATED BY ',' ENCLOSED BY '\"' " + 
      " LINES TERMINATED BY '\\n'"; 

      String sSqlWindows="LOAD DATA INFILE 'c:/nate/patients.txt' INTO TABLE Patients " + 
      " FIELDS TERMINATED BY ',' ENCLOSED BY '\"' " + 
      " LINES TERMINATED BY '\\r\\n'"; 

      rs = st.executeQuery(sSqlLinux); // run the Linux version 
      System.out.println("------------------------------");  

     } catch (SQLException ex) { 
      Logger lgr = Logger.getLogger(myTest.class.getName()); 
      lgr.log(Level.SEVERE, ex.getMessage(), ex); 

     } finally { 
      try { 
       if (rs != null) { 
        rs.close(); 
       } 
       if (st != null) { 
        st.close(); 
       } 
       if (con != null) { 
        con.close(); 
       } 

      } catch (SQLException ex) { 
       Logger lgr = Logger.getLogger(myTest.class.getName()); 
       lgr.log(Level.WARNING, ex.getMessage(), ex); 
      } 
     } 
    } 
} 

代碼片段來生成來自MySQ提供的插入語句中的文本文件大號工作臺:

select ID,fname,lname,Diagnosis,phone,email,DOB,DOFV 
INTO OUTFILE 'c:\\nate\\patients.txt' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 
FROM Patients; 

select ID,fname,lname,Diagnosis,phone,email,DOB,DOFV 
INTO OUTFILE '/Users/nate/patients.txt' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
FROM Patients; 

樣品CSV:

1,"hanalei","ezz","hemophelia","+1(919)929-6567","[email protected]","1998-08-22","2008-03-12" 
2,"monika","zanesco","sickle cell disease","+1(919)939-4264","[email protected]","1998-10-05","2016-04-13" 
3,"bang","pham","leukemia","+1(919)243-8937","[email protected]","1998-03-15","2013-03-03" 

的數據截斷(:目前在我的Windows盒測試注意事項)後加載的罰款。因此,你需要在字符串中爲你的文件名或表名命名。