Java отображение FX изображения по поисковому запросу - PullRequest
0 голосов
/ 04 марта 2020

Я недавно работал над загрузкой изображений с использованием изображений BLOB-объектов, и это работает, но теперь, когда я пытаюсь найти определенного человека c в поиске, он не отображается, я пытался преобразовать изображение BLOB-объекта в байт и отобразить в поле изображения в java fx форме

это мой код

 @FXML
    private void handleSearchResults(KeyEvent event) throws IOException {

        try {

            String sql = "select * from Staff_information where id=? ";
            pst = conn.prepareStatement(sql);
            pst.setString(1, txtSearch.getText());
            rs = pst.executeQuery();

            String add1 = rs.getString("id");
            txtid.setText(add1);

            byte[] img = rs.getBytes("Image");
            BufferedImage bufferedImage = ImageIO.read(img);
            WritableImage image = SwingFXUtils.toFXImage(bufferedImage, null);

            imageDisplay.setImage(image);
            imageDisplay.setFitWidth(200);
            imageDisplay.setFitHeight(200);


        } catch (Exception e) {
            System.out.println("missingdata");
        } finally {

            try {

                rs.close();
                pst.close();

            } catch (Exception e) {

            }
        }

    }

Это мой код для загрузки файла, который работает

Загрузка файла

 @FXML
    private void UploadImageActionPerformed(ActionEvent event) {

        FileChooser fileChooser = new FileChooser();

        //Set extension filter
        FileChooser.ExtensionFilter extFilterJPG
                = new FileChooser.ExtensionFilter("JPG files (*.JPG)", "*.JPG");
        FileChooser.ExtensionFilter extFilterjpg
                = new FileChooser.ExtensionFilter("jpg files (*.jpg)", "*.jpg");
        FileChooser.ExtensionFilter extFilterPNG
                = new FileChooser.ExtensionFilter("PNG files (*.PNG)", "*.PNG");
        FileChooser.ExtensionFilter extFilterpng
                = new FileChooser.ExtensionFilter("png files (*.png)", "*.png");
        fileChooser.getExtensionFilters()
                .addAll(extFilterJPG, extFilterjpg, extFilterPNG, extFilterpng);
        //Show open file dialog
        File file = fileChooser.showOpenDialog(null);

        try {
            BufferedImage bufferedImage = ImageIO.read(file);
            WritableImage image = SwingFXUtils.toFXImage(bufferedImage, null);
            img.setImage(image);
            img.setFitWidth(200);
            img.setFitHeight(200);
            img.scaleXProperty();
            img.scaleYProperty();
            img.setSmooth(true);
            img.setCache(true);
            FileInputStream fin = new FileInputStream(file);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            byte[] buf = new byte[1024];

            for (int readNum; (readNum = fin.read(buf)) != -1;) {
                bos.write(buf, 0, readNum);
            }
            person_image = bos.toByteArray();

        } catch (IOException ex) {
            Logger.getLogger("ss");
        }
    }


byte[] person_image = null;

 @FXML
    private void handleaddemployee(ActionEvent event) throws IOException {

        try {
                String empID = "nill";
                if (!txtempID.getText().equals("")) {
                    empID = txtempID.getText();
                }

                Employee e = new Employee(
                        empID,
                        person_image 
                );
                dbemployee.addEmployee(e);

            } else {
                 System.out.println("not working");
            }

        } catch (SQLException ex) {
           System.out.println("error");

        } catch (NumberFormatException e) {
         System.out.println("number error");

        }

    }

, чтобы проверить, что я попробовал свое первое поле, которое считывает данные из базы данных, что дает результаты теста "2", но изображение для сотрудника "2" не загружается и не падает

enter image description here

любая помощь будет оценена спасибо

Ошибка enter image description here

Ошибка

enter image description here

1 Ответ

1 голос
/ 04 марта 2020

Курсор (указатель на текущую строку) в ResultSet изначально указывает перед первой строкой. Метод next() возвращает логическое значение, указывающее, есть ли еще строки для перемещения, и перемещается к следующей строке, если она есть.

В опубликованном вами коде вы никогда не вызовете rs.next(), поэтому, когда вы пытаетесь получить идентификатор и изображение, курсор не указывает ни на какую строку, и (я думаю) выдается исключение.

В вашем случае, поскольку вы ищете что-то, что выглядит как первичный ключ, вы ожидаете, что будет возвращено ноль или одна строка. Итак, вам нужно:

private void handleSearchResults(KeyEvent event) throws IOException {

    try {

        String sql = "select * from Staff_information where id=? ";
        pst = conn.prepareStatement(sql);
        pst.setString(1, txtSearch.getText());
        rs = pst.executeQuery();

        if (rs.next()) {
            String add1 = rs.getString("id");
            txtid.setText(add1);

            byte[] img = rs.getBytes("Image");
            BufferedImage bufferedImage = ImageIO.read(img);
            WritableImage image = SwingFXUtils.toFXImage(bufferedImage, null);

            imageDisplay.setImage(image);
            imageDisplay.setFitWidth(200);
            imageDisplay.setFitHeight(200);
        } else {
            // no match found.... inform user, etc
        }

    } catch (Exception e) {
        System.out.println("missingdata");
    } finally {

        try {

            rs.close();
            pst.close();

        } catch (Exception e) {

        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...