簡體   English   中英

Java將Excel數據導入有關編碼的MySQL

[英]Java Import Excel Data into MySQL about encoding

這是我的資料!!

String url    =   "jdbc:mysql://localhost/dahan?characterEncoding=euckr";
String user    =   "root";
String password   =   "pass";

    try{
        Class.forName("com.mysql.jdbc.Driver");  
        Connection con = (Connection)                                                      DriverManager.getConnection(url,user,password);  
        con.setAutoCommit(false);  
        PreparedStatement pstm = null ; 
        PreparedStatement pstm1 = null ; 
        PreparedStatement pstm2 = null ; 
        FileInputStream input = new FileInputStream("C:/Users/hyunwoo/Downloads/Personal Contacts.xls");  
        POIFSFileSystem fs = new POIFSFileSystem( input );  
        HSSFWorkbook wb = new HSSFWorkbook(fs);  
        HSSFSheet sheet = wb.getSheetAt(0);
    Row row;
    String del = "DROP TABLE IF EXISTS `dahanMail`";
    String cre = "CREATE TABLE `dahanMail` (`전체이름`  varchar(50),`성`  varchar(50),`이름`  varchar(50) ,`닉네임`  varchar(50),"
            + "`회사`  varchar(500),`부서`  varchar(500),`직급`  varchar(500),`메일주소1`  varchar(50),"
            + "`메일주소2`  varchar(50),`전화번호1`  varchar(50),`전화번호2`  varchar(50),`전화번호3`  varchar(50),"
            + "`휴대폰1`  varchar(50),`휴대폰2`  varchar(50),`팩스1`  varchar(50),`팩스2`  varchar(50),"
            + "`주소`  varchar(50),`웹사이트`  varchar(50),`id`  int NOT NULL ,PRIMARY KEY (`id`))";
    pstm1 = (PreparedStatement) con.prepareStatement(del);
    pstm2 = (PreparedStatement) con.prepareStatement(cre);
    pstm1.execute();
    pstm2.execute();
for(int i=0; i<=sheet.getLastRowNum(); i++){
        row = sheet.getRow(i);
        String fullname = row.getCell(0).getStringCellValue();
        String lastname = row.getCell(1).getStringCellValue();
        String firstname = row.getCell(2).getStringCellValue();
        String nickname = row.getCell(3).getStringCellValue();
        String company = row.getCell(4).getStringCellValue();
        String sub = row.getCell(5).getStringCellValue();
        String hei = row.getCell(6).getStringCellValue();
        String mailaddress1 = row.getCell(7).getStringCellValue();
        String mailaddress2 = row.getCell(8).getStringCellValue();
        String cnumber1 = row.getCell(9).getStringCellValue();
        String cnumber2 = row.getCell(10).getStringCellValue();
        String cnumber3 = row.getCell(11).getStringCellValue();
        String pnumber1 = row.getCell(12).getStringCellValue();
        String pnumber2 = row.getCell(13).getStringCellValue();
        String fax1 = row.getCell(14).getStringCellValue();
        String fax2 = row.getCell(15).getStringCellValue();
        String address = row.getCell(16).getStringCellValue();
        String website = row.getCell(17).getStringCellValue();
        int id = (int) row.getCell(18).getNumericCellValue();

        String sql = "INSERT INTO dahanmail VALUES('"+fullname+"','"+lastname+"','"+firstname+"'"
                        + ",'"+nickname+"','"+company+"','"+sub+"','"+hei+"','"+mailaddress1+"','"+mailaddress2+"','"+cnumber1+"','"+cnumber2+"','"+cnumber3+"'"
                                        + ",'"+pnumber1+"','"+pnumber2+"','"+fax1+"','"+fax2+"',"
                                                + "'"+address+"','"+website+"','"+id+"')";

       pstm = (PreparedStatement) con.prepareStatement(sql);

       pstm.execute();
       System.out.println("Import rows "+i);
       }
       con.commit();
       pstm.close();
       con.close();
       input.close();
       System.out.println("Success import excel to mysql table");

我已經使用Java中的POI將excel數據保存到mysql,並且效果很好! 所以我檢查了cmd中的mysql表,但是控制台窗口仍然顯示像“ ???”這樣的損壞語言 似乎是編碼問題...如何更改源以解決編碼問題?

您所擁有的似乎已經接近工作狀態,但是有些事情我會改變:

首先,在循環之前聲明SQL,對於值占位符使用?'s:

String sql = "INSERT INTO dahanmail VALUES(?,?,?)";
PreparedStatement pstm = conn.prepareStatement(sql);

(我在上面的代碼中沒有放入足夠的? ,每個值應該有一個)

然后,在循環中,您可以設置參數:

pstm.setString(1,row.getCell(0).getStringCellValue());
pstm.setString(2,row.getCell(2).getStringCellValue());
//one for each value. You could use another loop.

然后(仍然在循環中)執行以下語句:

pstm.execute();

最后清除下一次參數:

pstm.clearParameters();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM