目前我正在创建产品。在创建产品时,您需要插入图像。所以我使用JavaFx发布了一个文件选择器代码。当按钮处于打开状态时,它将调用此动作事件以提示用户从机器中选择图像。
public void handle(ActionEvent event){
FileChooser fileChooser = new FileChooser();
//Set extension filter
FileChooser.ExtensionFilter extFilterJPG = new FileChooser.ExtensionFilter("JPG files (*.jpg)", "*.JPG");
FileChooser.ExtensionFilter extFilterPNG = new FileChooser.ExtensionFilter("PNG files (*.png)", "*.PNG");
fileChooser.getExtensionFilters().addAll(extFilterJPG, extFilterPNG);
//Show open file dialog
File file = fileChooser.showOpenDialog(null);
try {
BufferedImage bufferedImage = ImageIO.read(file);
Image image = SwingFXUtils.toFXImage(bufferedImage, null);
myImageView.setImage(image);
} catch (IOException ex) {
Logger.getLogger(CreateProductUI.class.getName()).log(Level.SEVERE, null, ex);
}
}
它完美无缺,我可以简单地获取并显示由以下选择的图像:
myImageView.setImage(image);
Image image = panel.getMyImageView().getImage();
但是,当我尝试将此图像插入数据库表时,我收到一条错误消息。这是我的Insert SQL方法:
public boolean create() {
boolean success = false;
try {
DBController db = new DBController();
String dbQuery;
db.getConnection();
dbQuery = "INSERT INTO sm_product(productName,productDescription,productPrice,productQuantity,dateOfCreation,productStatus,productImage) VALUES (?,?,?,?,?,?,?)";
PreparedStatement psmnt = db.getConnection().prepareStatement(dbQuery);
psmnt.setString(1, name);
psmnt.setString(2, desc);
psmnt.setDouble(3, price);
psmnt.setInt(4, quantity);
psmnt.setString(5, datestr);
psmnt.setString(6, "Available");
File imageFile = new File("test.png");
RenderedImage renderedImage = SwingFXUtils.fromFXImage(image, null);
ImageIO.write(renderedImage, "png", imageFile); //Change extension appropriately
FileInputStream fis = new FileInputStream(imageFile);
psmnt.setBinaryStream(7, (InputStream) fis, (int) (imageFile.length()));
int s = psmnt.executeUpdate();
//check the value of s and initialize success appropriately
return success;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
我的图片列数据类型是Blob。并且它返回一个“数据截断:第1行的列'productImage'的数据太长”错误消息。我甚至试图将数据类型更改为varchar(100),但它不起作用。我想知道为什么。
提前致谢。
答案 0 :(得分:0)
如异常所示。与图像列容量相比,图像太长。
你有productImage是BLOB,但为什么你甚至试图改为varchar(100)它真是太奇怪了。
您必须将图像列数据类型更改为BLOB。 有关详细信息,请参阅此处http://dev.mysql.com/doc/refman/5.0/en/blob.html
希望这个帮助