gpt4 book ai didi

java - 我无法多次显示照片 Blob

转载 作者:行者123 更新时间:2023-12-01 04:18:43 27 4
gpt4 key购买 nike

我有一个包含每个人照片的数据库。我有一个类展示人们的照片。当该类首先运行时,它会将照片存储在本地,然后另一个方法获取它并显示它。问题是该类只能在第一次正确运行!每个其他名称选择都会显示第一张图片。请帮我确定这是在哪里发生的!

这是我的类(class):

public class Profile extends JFrame {

int x;
JLabel label;
Image img;
ImageIcon pic;
JPanel panel;
private JTextPane namepanel = new JTextPane();
private JLabel namelabel = new JLabel();
private JLabel lastnamelabel = new JLabel();
private JTextPane lastnamepanel = new JTextPane();
ResultSet resultSet;
private JButton add = new JButton();
private JButton remove = new JButton();

public Profile() {
try {

//getData(x);
//showImage();
//jbInit();
} catch (Exception e) {
e.printStackTrace();
}


}


public void getData(int p_id) throws Exception {



Login login = new Login();
String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
String username = login.getUsername();
String password = login.getPassword();
Connection conn = null;

try {

Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, username, password);
System.out.println("At the profile class id = " + p_id);
String sql = "SELECT foto, name, surname FROM criminals WHERE id = " + p_id;
System.out.println(sql);
PreparedStatement stmt = conn.prepareStatement(sql);
resultSet = stmt.executeQuery();

while (resultSet.next()) {
namepanel.setText(resultSet.getString(2));
lastnamepanel.setText(resultSet.getString(3));

File image = new File("java.jpg");
FileOutputStream fos = new FileOutputStream(image);
byte[] buffer = new byte[256];


// Get the binary stream of our BLOB data

InputStream is = resultSet.getBinaryStream(1);
int bytes = 0;
while ((bytes = is.read(buffer)) > 0) {


fos.write(buffer, 0, bytes);
}
showImage();

fos.close();

}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null && !conn.isClosed()) {
conn.close();
}
}


}


public void showImage() throws Exception {

this.getContentPane().removeAll();
img = null;
img = new ImageIcon("java.jpg").getImage();
pic = null;
pic = new ImageIcon(img);
label = new JLabel("", pic, JLabel.CENTER);
panel = new JPanel(new BorderLayout());
panel.setBounds(new Rectangle(0, 0, 340, 310));
namepanel.setBounds(new Rectangle(340, 30, 295, 35));
namelabel.setText("Name");
namelabel.setBounds(new Rectangle(340, 0, 295, 30));
lastnamelabel.setText("Surname");
lastnamelabel.setBounds(new Rectangle(340, 65, 295, 30));
lastnamepanel.setBounds(new Rectangle(340, 105, 295, 35));
add.setText("add");
add.setBounds(new Rectangle(440, 175, 255, 40));
remove.setText("remove");
remove.setBounds(new Rectangle(440, 240, 255, 35));
panel.add(label, null);
panel.add(label, BorderLayout.CENTER);
this.getContentPane().setLayout(null);
this.setSize(new Dimension(1148, 336));
this.getContentPane().add(remove, null);
this.getContentPane().add(add, null);
this.getContentPane().add(lastnamepanel, null);
this.getContentPane().add(lastnamelabel, null);
this.getContentPane().add(namelabel, null);
this.getContentPane().add(namepanel, null);
this.getContentPane().add(panel, null);


}

最佳答案

您使用的方式不是使用准备好的语句的方式。使用这种方式

        String sql = "SELECT foto, name, surname FROM criminals WHERE id = ?" ;

PreparedStatement stmt = conn.prepareStatement(sql);

stmt.setInt(1,p_id);

关于java - 我无法多次显示照片 Blob ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19194790/

27 4 0
文章推荐: jquery - 使用 jQuery 创建后