从数据库中检索图像并在标签中显示

时间:2012-05-25 07:25:21

标签: java mysql sql database sqlexception

我有一张名为P100.jpg的图片。我正在调整它并将其转换为ZP100.png。我通过插入查询将其存储到数据库MySQL中。

    File imageFile = new File("F:\\POSTERS\\Roses\\ZP100.png");
    FileInputStream fis = new FileInputStream(imageFile);

    String insertImage = "insert into image values(?,?)";
    prestmt = con.prepareStatement(insertImage);
    prestmt.setInt(1,4);
    prestmt.setBinaryStream(2, fis, fis.available());
    result = prestmt.executeUpdate();

现在,我想通过将其分配给标签来检索该图像并在表单上显示。

    String selectImage = "select img from image";
    prestmt = con.prepareStatement(selectImage);

但它给我的例外是

java.sql.SQLException: Can not issue executeUpdate() for SELECTs

为了将图像分配给标签,我有:

    image.setText("ZP100.png"); 

我知道,它无法奏效。请帮我重新编码。

1 个答案:

答案 0 :(得分:0)

第一个错误必须是:

result = prestmt.executeUpdate();

我担心你已宣布result类型为ResultSet 当您将int的返回类型executeUpdate()分配给result时, 显然会引发SQLException

修改上述语句:

int insertResult = prestmt.executeUpdate();

你应该取得成功。

建议

  

prestmt.setBinaryStream(2,fis, fis.available());

如果您想要从流中read个内容,请不要依赖available()方法 它只是一个估计,并不保证您可以阅读直到流的结尾。

而是使用setBinaryStream方法的其他签名,如:
setBinaryStream( int parameterIndex, InsputStream is )
Javadoc说, The data will be read from the stream as needed until end-of-file is reached. ,这意味着你不需要明确地阅读它 通过更改,您的陈述将如下所示:

  

prestmt.setBinaryStream(2,fis);


图片
我没有在Java GUI和图像方面做太多工作 但是可以建议您参考以下的一些解决方案:

  1. Add Image to Button
  2. Label with Image