2015-05-28 63 views
0

SQL查詢錯誤,我有如下表:的InputStream在JDBC

CREATE TABLE `contact` (
    `idcontact` int(11) NOT NULL AUTO_INCREMENT, 
    `first_name` varchar(245) NOT NULL, 
    `last_name` varchar(245) NOT NULL, 
    `photo` mediumblob NOT NULL, 
    PRIMARY KEY (`idcontact`), 
    UNIQUE KEY `idcontact_UNIQUE` (`idcontact`) 
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; 

我想存儲爲低於InputStreamphoto列:插在我的數據庫

Class.forName("com.mysql.jdbc.Driver"); 
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test1", "root", "root"); 
Statement st = con.createStatement(); 
String sql = "insert into contact(first_name,last_name,photo) values('"+firstName+"','"+lastName+"','"+inputStream+"')"; 
if(st.executeUpdate(sql) !=0){ 
    System.out.println("Success"); 
} else { 
    System.out.println("Fail"); 
} 

null值。這是如何造成的,我該如何解決這個問題?

+1

瞭解準備好的聲明 – Jens

+0

什麼是probelm實際?圖像不上傳? OR插入不是正在打開? – Anptk

回答

0

更換這部分代碼:

 Statement st = con.createStatement(); 
     String sql = "insert into contact(first_name,last_name,photo) values('"+firstName+"','"+lastName+"','"+inputStream+"')"; 
     if(st.executeUpdate(sql) !=0){ 

有:

 PreparedStatement st = con.prepareStatement("insert into contact(first_name,last_name,photo) values(?, ?, ?)"); 
     st.setString(1, firstName); 
     st.setString(2, lastName); 
     st.setBlob(3, inputStream); 
     if(st.executeUpdate() != 0) { 

即根據Jens的評論使用PreparedStatement。實際上

  1. 可以設置BLOB類型列
  2. 您是從SQL注入(你用字符串連接第一個密碼是黑客的接管您的應用程序的天堂)
  3. 安全:這是什麼你買
  4. 潛在的性能改進(不保證 - 取決於驅動程序如何處理您的查詢)
+0

感謝您的大力支持.. @Nikos Paraskevopulos –

+0

我應該使用相同的文件,文本,pdf文件上傳嗎?喜歡使用BLOB .. –