gpt4 book ai didi

java - JDBC中SQL查询错误的InputStream

转载 作者:行者123 更新时间:2023-11-29 22:23:28 25 4
gpt4 key购买 nike

我有下表:

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 注入(inject)的影响(您的第一个带有字符串连接的代码是黑客接管您的应用程序的天堂)
  3. 潜在的性能改进(无法保证 - 取决于驱动程序处理查询的方式)

关于java - JDBC中SQL查询错误的InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30498788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com