2016-11-07 62 views
0

我想使用准备好的语句以加密格式将数据插入到MySQL中。但我得到这个错误。我认为我的查询是正确的。AES_ENCRYPT与MySQL服务器5.5

Connection con=null; 
    PreparedStatement psmt1=null; 

    String tit=request.getParameter("tit"); 
    String min=request.getParameter("minvalue"); 
    String max=request.getParameter("maxvalue"); 
    String disc=request.getParameter("disc"); 
    System.out.println(tit); 
    String [] title=tit.split(":"); 

    try{ 
    con=databasecon.getconnection(); 
    psmt1=con.prepareStatement("insert into medication(tid,titname,minvalue,maxvalue,disc) values(AES_ENCRYPT(?, 'key'),AES_ENCRYPT(?, 'key'),AES_ENCRYPT(?, 'key'),AES_ENCRYPT(?, 'key'),AES_ENCRYPT(?, 'key'))"); 

psmt1.setString(1,title[0]); 
psmt1.setString(2,title[1]); 
psmt1.setString(3,min); 
psmt1.setString(4,max); 
psmt1.setString(5,disc); 
psmt1.executeUpdate(); 
} 
catch(Exception ex) 
{ 
out.println("Error in connection : "+ex); 
} 

下面是我的连接类

package databaseconnection; 
import java.sql.*; 

public class databasecon 
{ 
    static Connection con; 
    public static Connection getconnection() 
    { 


     try 
     { 
      Class.forName("com.mysql.jdbc.Driver"); 
      con = DriverManager.getConnection("jdbc:mysql://localhost:3306/cam","root","root"); 
     } 
     catch(Exception e) 
     { 
      System.out.println("class error"); 
     } 
     return con; 
    } 

} 

最后错误是

Error in connection : java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'maxvalue,disc) values(AES_ENCRYPT('6', 'key'),AES_ENCRYPT('systolic bp', 'key'),' at line 1 

按照要求由我的同事开发我张贴我的表sturuture Below is my table def:

+1

[AES \ _ENCRYPT和AES \ _DECRYPT使用java]可能的重复(http://stackoverflow.com/questions/27938636/aes-encrypt-and-aes-decrypt-using-java) – rkosegi

回答

0

我不不知道为什么会这样,但你需要通过在一个字节数组作为第二个参数到MySQL的AES_ENCRYPT

psmt1 = con.prepareStatement("insert into medication(tid,titname,minvalue,maxvalue,disc) values(AES_ENCRYPT(?, 'key'),AES_ENCRYPT(?, 'key'),AES_ENCRYPT(?, 'key'),AES_ENCRYPT(?, 'key'),AES_ENCRYPT(?, 'key'))"); 

byte[] keyBytes = "key".getBytes(); 
psmt1.setString(1, title[0]); 
psmt1.setBytes(2, keyBytes); 
psmt1.setString(3, title[1]); 
psmt1.setBytes(4, keyBytes); 
psmt1.setString(5, min); 
psmt1.setBytes(6, keyBytes); 
psmt1.setString(7, max); 
psmt1.setBytes(8, keyBytes); 
psmt1.setString(9, disc); 
psmt1.setBytes(10, keyBytes); 
psmt1.executeUpdate(); 

我说,我没有解释,因为MySQL documentation意味着两个参数来AES_ENCRYPT都是字符串。我自己会犯这个错误。

+0

没有那没有解决我的问题我得到以下错误 – Kishan

+0

即使我尝试插入与加密也,但我失败了psmt1 = con.prepareStatement(“插入药物(tid,titname,minvalue,maxvalue,disc)值(?,?,?,? ))“)?; – Kishan

+0

发布您的表格定义。 –