线程异常 "AWT-EventQueue-0" java.lang.AbstractMethod
Exception in thread "AWT-EventQueue-0" java.lang.AbstractMethod
Error in saving blob in database . Error : Exception in thread
"AWT-EventQueue-0" java.lang.AbstractMethod Error:
org.sqlite.PrepStmt.setBlob(ILjava/io/InputStream;)
使用 JFileChooser
上传文件,上传图像后出现 Jlabel
,但每当我尝试保存图像时,它都会给我错误。
这是代码
Connection con=null;
private JTextField id;
public ImageIcon ResizeImage(String imgPath){
ImageIcon MyImage = new ImageIcon(imgPath);
Image img = MyImage.getImage();
Image newImage = img.getScaledInstance(image.getWidth(), image.getHeight(),Image.SCALE_SMOOTH);
ImageIcon image = new ImageIcon(newImage);
return image;
}
private void initialize() {
con=dB.Connect();
frame = new JFrame();
frame.setBounds(100, 100, 643, 444);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JButton browse = new JButton("Browse");
browse.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File(System.getProperty("user.home")));
FileNameExtensionFilter filter = new FileNameExtensionFilter("*.IMAGE", "jpg","gif","png");
fileChooser.addChoosableFileFilter(filter);
int result = fileChooser.showSaveDialog(null);
if(result == JFileChooser.APPROVE_OPTION){
File selectedFile = fileChooser.getSelectedFile();
String path = selectedFile.getAbsolutePath();
image.setIcon(ResizeImage(path));
s = path;
}
else if(result == JFileChooser.CANCEL_OPTION){
System.out.println("No Data");
}
}
});
browse.setBounds(270, 282, 89, 23);
frame.getContentPane().add(browse);
JButton save = new JButton("Save");
save.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try{
PreparedStatement ps = con.prepareStatement("insert into image(id,image) values(?,?)");
InputStream is = new FileInputStream(new File(s));
ps.setString(1, id.getText());
ps.setBlob(2,is);
ps.executeUpdate();
JOptionPane.showMessageDialog(null, "Data Inserted");
}catch(Exception c)
{
c.printStackTrace();
}
}
});
save.setBounds(270, 316, 89, 23);
frame.getContentPane().add(save);
image = new JLabel("New label");
image.setBounds(236, 141, 168, 130);
frame.getContentPane().add(image);
id = new JTextField();
id.setBounds(206, 60, 232, 23);
frame.getContentPane().add(id);
id.setColumns(10);
}
Error in saving blob in database . Error : Exception in thread
"AWT-EventQueue-0" java.lang.AbstractMethod Error:
org.sqlite.PrepStmt.setBlob(ILjava/io/InputStream;)
方法 setBlob()
未在 sqlite-jdbc
中实现。所以得到上面的错误。
还有什么选择,使用
ps.setBytes(2, data);//in bytes
而不是
ps.setBlob(2,is);
Error in saving blob in database . Error : Exception in thread "AWT-EventQueue-0" java.lang.AbstractMethod Error: org.sqlite.PrepStmt.setBlob(ILjava/io/InputStream;)
使用 JFileChooser
上传文件,上传图像后出现 Jlabel
,但每当我尝试保存图像时,它都会给我错误。
这是代码
Connection con=null;
private JTextField id;
public ImageIcon ResizeImage(String imgPath){
ImageIcon MyImage = new ImageIcon(imgPath);
Image img = MyImage.getImage();
Image newImage = img.getScaledInstance(image.getWidth(), image.getHeight(),Image.SCALE_SMOOTH);
ImageIcon image = new ImageIcon(newImage);
return image;
}
private void initialize() {
con=dB.Connect();
frame = new JFrame();
frame.setBounds(100, 100, 643, 444);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JButton browse = new JButton("Browse");
browse.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File(System.getProperty("user.home")));
FileNameExtensionFilter filter = new FileNameExtensionFilter("*.IMAGE", "jpg","gif","png");
fileChooser.addChoosableFileFilter(filter);
int result = fileChooser.showSaveDialog(null);
if(result == JFileChooser.APPROVE_OPTION){
File selectedFile = fileChooser.getSelectedFile();
String path = selectedFile.getAbsolutePath();
image.setIcon(ResizeImage(path));
s = path;
}
else if(result == JFileChooser.CANCEL_OPTION){
System.out.println("No Data");
}
}
});
browse.setBounds(270, 282, 89, 23);
frame.getContentPane().add(browse);
JButton save = new JButton("Save");
save.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try{
PreparedStatement ps = con.prepareStatement("insert into image(id,image) values(?,?)");
InputStream is = new FileInputStream(new File(s));
ps.setString(1, id.getText());
ps.setBlob(2,is);
ps.executeUpdate();
JOptionPane.showMessageDialog(null, "Data Inserted");
}catch(Exception c)
{
c.printStackTrace();
}
}
});
save.setBounds(270, 316, 89, 23);
frame.getContentPane().add(save);
image = new JLabel("New label");
image.setBounds(236, 141, 168, 130);
frame.getContentPane().add(image);
id = new JTextField();
id.setBounds(206, 60, 232, 23);
frame.getContentPane().add(id);
id.setColumns(10);
}
Error in saving blob in database . Error : Exception in thread "AWT-EventQueue-0" java.lang.AbstractMethod Error: org.sqlite.PrepStmt.setBlob(ILjava/io/InputStream;)
方法 setBlob()
未在 sqlite-jdbc
中实现。所以得到上面的错误。
还有什么选择,使用
ps.setBytes(2, data);//in bytes
而不是
ps.setBlob(2,is);