簡體   English   中英

JDBC中SQL查詢中的InputStream錯誤

[英]InputStream in SQL query error in 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;

我嘗試將InputStream存儲在photo列中,如下所示:

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值。 這是怎么引起的,我該如何解決?

替換部分代碼:

        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. 潛在的性能改進(不保證-取決於驅動程序如何處理查詢)

暫無
暫無

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

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