私はこの解決策を見つけるのが苦労しているので、私は質問を書き直しています。名前、姓などを知っている生徒の基本情報を登録する簡単なフォームを作った。また、ファイルチェッカークラスで写真を選択して、ファイルシステムから画像を見つけることもできます。バイト配列をjavaFXイメージに変換するには?
このコードを見てみましょう。
ユーザーがボタンをクリックしたとき、彼らは私が がinputreamオブジェクトである変数であることを新しいのFileInputStreamと参照を作成し、その後 を画像を選択します。この時点で@FXML
public void onBrowserPhoto() throws IOException {
File file = fileChooser.showOpenDialog(stage);
if (file != null) {
is = new FileInputStream(file);
Image image = new Image(is);
imageView.setImage(image);
}
}
。それはいくつかのものをやってされる次のこのメソッドが呼び出され、currentStudent変数はinputreamは(ある)ことを受け湖底保存に使用クリックすると、私はサービスオブジェクトで保存
private void businessOnSave() {
if (currentStudent.getId() == 0) {
try {
currentStudent.setIs(is);
currentStudent
.setGenger(buttonMale.isSelected() == true ? buttonMale.getText() : buttonFemale.getText());
if (!checkStudent(currentStudent)) {
service.saveStudent(currentStudent);
studentUnBind(currentStudent);
sweep();
listView.getItems().add(currentStudent.getNickname());
buttonNew.disableProperty().setValue(false);
is.close();
} else {
return;
}
} catch (ServiceException | IOException e) {
e.printStackTrace();
}
}
。 Everithingは生徒objが保存されるのに完璧です。あなたは、私がPreparedStatementオブジェクトにそのinpustream変数を渡していますし、それはokです見ることができるように
ここは、新しい学生を保存する方法
@Override
public void save(Student t) throws SQLException {
try (PreparedStatement ps = con.prepareStatement(INSERT)) {
ps.setString(1, t.getNickname());
ps.setString(2, t.getLastName());
ps.setString(3, t.getEmail());
ps.setString(4, t.getPhone());
ps.setString(5, t.getGenger());
ps.setDate(6, Date.valueOf(t.getBirthDate()));
ps.setBinaryStream(7, t.getIs());
ps.executeUpdate();
}
}
ですが、私はデータが存在するデータベースで確認してください。しかし、私はこのレコードをデータベースから持ってくるとUI上に画像を表示しません。
ここに、その拠点から生徒記録を返す方法があります。
public Student getStudentByName(String name) throws SQLException {
Student student = new Student();
try (PreparedStatement ps = con.prepareStatement(GET_STUDENT_BY_NAME)) {
ps.setString(1, name);
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
student.setId(rs.getInt("student_id"));
student.setNickname(rs.getString("nickname"));
student.setLastName(rs.getString("lastname"));
student.setEmail(rs.getString("email"));
student.setPhone(rs.getString("phone"));
student.setGenger(rs.getString("genger"));
student.setBirthDate(rs.getDate("birthdate").toLocalDate());
try(InputStream is = rs.getBinaryStream("photo")){
BufferedImage bg = ImageIO.read(is);
if(bg != null){
Image image = SwingFXUtils.toFXImage(bg, null);
student.setPhoto(image);
}
} catch (IOException e) {
e.printStackTrace(); }
}
}
}
return student;
}
bg objecはnullで、データベース上に画像のバイトがあるため、私は何の手がかりもありません。私はバイトを取得する別の方法を作って、生徒オブジェクトがどこに作成されたかを管理しますが、うまくいきませんでした。誰かがこの問題の解決策を知っていれば、私は満足しています。この質問を読んでいただきありがとうございます。
画像のエンコード方法によって... – fabian
申し訳ありません。しかし、私はそれを得ていませんでした。私はJavaの初心者です。私にコードを教えてください。 – yfabio
前のコメントに示されているように、結果セットから取得したバイナリデータにイメージがどのようにコード化されているかを知らなくても、これを行う方法は誰にも分かりません。そして、「うまくいきません」というのは問題の声明ではありません。 –