【问题标题】:Uploading an image to a database with javafx使用 javafx 将图像上传到数据库
【发布时间】:2019-04-21 06:49:36
【问题描述】:

我正在尝试使用 phpmyadmin 将图像上传到 mysql 数据库,尽管程序可以运行并存储其余数据,但图像未正确存储。

如果我直接在 phpmyadmin 中上传图像,则 Blob 类型的图像大小为 26.6 KB,但如果我尝试使用 javafx 上传,图像大小约为 10 B,所以我认为我没有正确上传。

@Override
public void guardarMonstruo(MonstruoDTO monstruo) {
    con= ConexionBDA.getInstance().getCon();
    try {
    if (con != null){
        byte[] blob = imagenToByte(monstruo.getImagen());
        System.out.println(blob.toString());
        statement = con.createStatement();
        statement.executeUpdate("INSERT INTO monstruos (Nombre,Habitat,Estado,ColaCercenable,DragonAnciano,DebilidadFuego,DebilidadAgua,Debilidadrayo,DebilidadHielo,DebilidadDraco,ImagenMonstruo) VALUES ('"+monstruo.getNombre()+"'"+","+"'"+monstruo.getHabitat()+"'"+","+"'"+monstruo.getEstado()+"'"+","+"'"+monstruo.getColaCercenable()+"'"+","+"'"+monstruo.getDragonAnciano()+"'"+","+"'"+monstruo.getDebilidadFuego()+"'"+","+"'"+monstruo.getDebilidadAgua()+"'"+","+"'"+monstruo.getDebilidadRayo()+"'"+","+"'"+monstruo.getDebilidadHielo()+"'"+","+"'"+monstruo.getDebilidadDraco()+"'"+","+"'"+blob+"');");
        con.close();
        statement.close();


    }
    }
    catch(Exception e) {
        e.printStackTrace();
    }


}

而 imagenToByte() 方法用于将图像传递给字节是这样的:

private byte[] imagenToByte(Image imagen) {
    BufferedImage bufferimage = SwingFXUtils.fromFXImage(imagen, null);
      ByteArrayOutputStream output = new ByteArrayOutputStream();
      try {
        ImageIO.write(bufferimage, "jpg", output );
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
      byte [] data = output.toByteArray();
      return data;
}

我不知道我做错了什么,你能帮帮我吗?

【问题讨论】:

  • 这不是无关的。准备好的语句将使您免于 SQL 注入,并允许您将 blob 数据插入表中。你确定你的代码没有报错吗?

标签: mysql eclipse javafx phpmyadmin


【解决方案1】:

您将toString 方法的结果插入到查询字符串中,这不会产生所需的结果。改用PreparedStatement 并设置Blob 参数:

try (PreparedStatement ps = con.prepareStatement("INSERT INTO monstruos (Nombre,Habitat,Estado,ColaCercenable,DragonAnciano,DebilidadFuego,DebilidadAgua,Debilidadrayo,DebilidadHielo,DebilidadDraco,ImagenMonstruo) VALUES (?,?,?,?,?,?,?,?,?,?,?)")) {
    ps.setString(1, monstruo.getNombre());
    ps.setString(2, monstruo.getHabitat());
    ps.setString(3, monstruo.getEstado());
    ps.setString(4, monstruo.getColaCercenable());
    ps.setString(5, monstruo.getDragonAnciano());
    ps.setString(6, monstruo.getDebilidadFuego());
    ps.setString(7, monstruo.getDebilidadAgua());
    ps.setString(8, monstruo.getDebilidadRayo());
    ps.setString(9, monstruo.getDebilidadHielo());
    ps.setString(10, monstruo.getDebilidadDraco());

    // upload the data, not the toString result of the array
    ps.setBlob(11, new SerialBlob(blob));

    ps.executeUpdate();
}

【讨论】:

  • 完美运行,你真是个天才,非常感谢!!
猜你喜欢
  • 2011-04-21
  • 2015-09-18
  • 2016-08-28
  • 2012-08-27
  • 2013-09-27
  • 2016-05-26
  • 1970-01-01
  • 2020-10-06
相关资源
最近更新 更多