Сохраните изображения как VARCHAR, используя Java - PullRequest
0 голосов
/ 13 апреля 2020

Я использую 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? Это для университетского проекта.

...