gpt4 book ai didi

java - 从 Java 将图像保存在 MySQL 中

转载 作者:可可西里 更新时间:2023-11-01 07:48:15 25 4
gpt4 key购买 nike

我正在尝试从 Java swing 应用程序中将图像保存在 MySQL 数据库中。我正在使用 JFileChsoser 来获取图像的路径。然后转换文件,以便它可以保存在 BLOB 类型的 MySQL 列中。但是我尝试保存的每张图像都无法正确保存或正确转换。有人可以告诉我我在这里做错了什么吗?

private void btn_choosepicActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser picchooser = new JFileChooser();
picchooser.setDialogTitle("Select Image");
picchooser.showOpenDialog(null);
File pic=picchooser.getSelectedFile();
path= pic.getAbsolutePath();
txt_path.setText(path.replace('\\','/'));
try{
File image = new File(path);
FileInputStream fis = new FileInputStream(image);
ByteArrayOutputStream baos= new ByteArrayOutputStream();
byte[] buff = new byte[1024];
for(int readNum; (readNum=fis.read(buff)) !=-1 ; ){
baos.write(buff,0,readNum);
}
userimage=baos.toByteArray();
}
catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}
}

然后我像这样将它保存到数据库中。

private void btn_saveActionPerformed(java.awt.event.ActionEvent evt) {
String user= txt_username.getText();
try{
String sql="insert into imgtst (username,image) values ('"+user+"','"+userimage+"')";
pst=con.prepareStatement(sql);
pst.executeUpdate();
JOptionPane.showMessageDialog(null, "Saved");
}
catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}
}

并且我已经将变量 userimage 和 path 声明为全局变量

String path=null;
byte[] userimage=null;

最佳答案

您在 sql 语句中将 byte[] 转换为 String,最终会得到不正确的数据。

使用 BLOB 的正确方法是传递 InputStream 本身。您可以使用正在使用的 FileInputStream 来读取文件。

File image = new File(path);
FileInputStream fis = new FileInputStream ( image );

String sql="insert into imgtst (username,image) values (?, ?)";
pst=con.prepareStatement(sql);

pst.setString(1, user);
pst.setBinaryStream (2, fis, (int) file.length() );

当您取回它时,您可以类似地从 ResultSet 中获取一个 InputStream:

InputStream imgStream = resultSet.getBinaryStream(2); 

关于java - 从 Java 将图像保存在 MySQL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15035883/

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