2016-08-02 13 views
0

私は基本的にコンソールベースのメニューで自分のプログラムを作っていますよね?それはデータベースマネージャーで、数字で答えることで操作されます(y'know、レコードを入力するには「1」、レコードをエクスポートするには「2」を入力します)。パラメータを混乱させる方法はありません。それはとにかく働いていないようですね? ここに私のコードがあります。その後、私は何を試してみましょう。CSVの内容をJDBC経由でデータベースにロードしますか?

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"、patients.csv);ここでpatientは値を入力するテーブルの名前、patients.csvは入力したい値のソースです。 これは私の最初の時間JDBCを使用しているので、関連するメソッドには慣れていませんが、st.executeQuery()とst.executeUpdate()でst.execute(query)を置き換えようとしました。事前に私はエラーが発生していたが、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

私のユーザ名の代わりにアスタリスクを使用しているので、実際のコードには存在しません。 –

+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から提供されたinsert文のテキストファイルLワークベンチ:

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" 

データは、TRUNCATE(:私のWindowsマシン上で、現時点ではテストノート)の後に罰金ロード。だから、あなたのファイル名やtablenameのための文字列の中で行う必要のある特別なconcatを混乱させる。

関連する問題