Я использую Java (javaFX + JDB C) для извлечения данных, хранящихся в БД, и отображения их в табличном представлении. Главное беспокойство - это часть image , она была сохранена в БД как VARCHAR (потому что я работал с VichUploader), и теперь я пытаюсь выбрать изображение на рабочем столе и сохранить его также как VARCHAR. .
Вот что я пробовал:
Для функции ADD:
public void ajouter(Employee user) throws FileNotFoundException {
String req = "INSERT INTO employee (fonction, Name, Last_name, Birth_Date, image, email) VALUES (?, ?, ?, ?, ?, ?)" ;
PreparedStatement pre;
InputStream is = new FileInputStream(user.getImage());
try {
pre = connection.prepareStatement(req);
pre.setString(1, user.getFonction());
pre.setString(2, user.getName());
pre.setString(3, user.getLast_name());
pre.setDate(4, user.getBirth_Date());
pre.setBlob(5, is);
pre.setString(6, user.getEmail());
pre.executeUpdate();
System.out.println("Employee ajouter avec succés");
} catch (SQLException ex) {
Logger.getLogger(EmployeeService.class.getName()).log(Level.SEVERE, null, ex);
}
}
для части javaFX:
private void ADDEMP(ActionEvent event) throws FileNotFoundException {
EmployeeService EMPS= new EmployeeService();
Employee EMP= new Employee();
EMP.setName(name.getText());
EMP.setLast_name(lastname.getText());
EMP.setFonction(fonction.getText());
EMP.setBirth_Date(java.sql.Date.valueOf(birthdate.getValue()));
EMP.setImage((String)(s.getAbsolutePath()));
EMP.setEmail(email.getText());
EMPS.ajouter(EMP);
}
@FXML
private void upload(ActionEvent event) throws IOException {
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);
s = file;
BufferedImage bufferedImage = ImageIO.read(file);
Image image;
image = SwingFXUtils.toFXImage(bufferedImage, null);
img.setImage(image);
}
}
Я был пытаясь сделать «грязный обходной путь», беря путь к файлу и сохраняя его как изображение. Просто так программа работает, а я нет. Выдает ошибку:
java.sql.SQLException: Incorrect string value: '\x89PNG\x0D\x0A...' for column 'image' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3933)
Как найти правильный способ сохранить изображение в виде строки и заставить его работать как на PHP, так и на Java? Это для университетского проекта.