gpt4 book ai didi

java - 从 Java 向 MySQL 插入/更新 blob

转载 作者:行者123 更新时间:2023-12-02 06:29:33 24 4
gpt4 key购买 nike

经过一天的谷歌搜索,我终于决定是时候向全能的 SO 社区询问了。我正在尝试将图像插入或更新到 MySQL 数据库中。我使用的查询和代码如下:

    FileInputStream inputStream = new FileInputStream(file);

String[] str_array = file.getName().split("-");
String stringb = str_array[1];
String stringc = str_array[2];
String fingerName = stringc.substring(0, 2);
//gets file name and splits it accordingly

String id = getID.id(stringb); //does a sql lookup to get the previously inserted id according to the stringb(users unique id number)

String INSERT_PIC = "INSERT INTO database.user_picture(id_ref, picture_num, user_image) values('" + id + "', ?, ?) ON DUPLICATE KEY UPDATE user_image = ?;";

//creates the sql statement that inserts or updates according to the primary keys id_ref and picture_num

ps = (PreparedStatement) connection.prepareStatement(INSERT_PIC);

ps.setString(1, fingerName);
ps.setBinaryStream(2, (InputStream) inputStream, file.length());
ps.setBinaryStream(3, (InputStream) inputStream, file.length());

//creates the prepared statement and inserts the 3 parameters

ps.executeUpdate();
connection.commit();
//executes the query on the connected database

我非常确定这会起作用。测试后,它将正确地将图像插入数据库。更新时,所有字段都会正确更新,但 blob/image 字段除外,该字段会更改为 NULL。

我不确定为什么会发生这种情况,也不知道有什么其他方法可以让它发挥作用,任何建议将不胜感激......

最佳答案

您为参数 2 和 3 提供相同的输入流。执行该语句时,首先读取参数2流,直到结束。当 JDBC 驱动程序尝试读取参数 3 的流时,它已经到了末尾,因为它是同一个流实例。

尝试提供两个输入流:

FileInputStream inputStream1 = new FileInputStream(file);
FileInputStream inputStream2 = new FileInputStream(file);
[...]
ps.setBinaryStream(2, (InputStream) inputStream1, file.length());
ps.setBinaryStream(3, (InputStream) inputStream2, file.length());

另外,不要忘记关闭某些finally block 中的流。

祝你好运。

关于java - 从 Java 向 MySQL 插入/更新 blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20194471/

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