线程异常 "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);