【问题标题】:InputStream in SQL query error in JDBCJDBC中的SQL查询错误中的InputStream
【发布时间】:2015-08-10 12:03:47
【问题描述】:

我有下表:

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 值已插入我的数据库。这是如何引起的,我该如何解决?

【问题讨论】:

  • 了解prepared statement
  • 问题到底是什么?图片没有上传?或者插入不起作用?

标签: java mysql jdbc blob


【解决方案1】:

替换这部分代码:

        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. 潜在的性能改进(不能保证 - 取决于驱动程序如何处理您的查询)

【讨论】:

  • 感谢您的大力支持.. @Nikos Paraskevopulos
猜你喜欢
  • 2015-08-30
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 2015-09-24
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
相关资源
最近更新 更多