2016-08-02 65 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盒测试注意事项)后加载的罚款。因此,你需要在字符串中为你的文件名或表名命名。