2016-12-21 3 views
0

Я столкнулся с проблемой, насколько я знаю, весь этот код работает до pst.executeQuery. Я просто не могу понять, почему это проблема. У меня есть метод обновления/вставки и никаких проблем, связанных с ними. Я использую ярлык для отображения изображения, так что бы это было photoLabel.setIcon();, или я просто полностью внедорожник. У меня есть одна кнопка для выбора файла, которая загружает изображение в метку, кнопка сохранения (эта функция) должна просто написать в базу данных в 12 столбцах/области под названием «Изображения».Java - JDBC/Swing - executeUpdate Не работает с BLOB

Пожалуйста Примечание - System.out.Println для целей тестирования, просто

System.out.println("Working 5"); 

не будет показывать, следовательно, почему я знаю, что это что-то делать с pst.executeQuery(). Я пробовал искать в Интернете, использовал разные методы .execute, я пытался зафиксировать соединение и так далее. Увы, не повезло.

@Override 
public void actionPerformed(ActionEvent e) { 
    Connection connection = null; 

    Statement statement = null; 
    ResultSet rs = null; 
// String s = null; 
    try { 

     Class.forName("org.sqlite.JDBC"); 
     connection = DriverManager.getConnection("jdbc:sqlite:employeeDatabase.sqlite"); 
     //connection.setAutoCommit(false); 
     System.out.println("Working 1"); 
     InputStream is = new FileInputStream(new File(s)); 
     System.out.println("Working 2"); 
     String sql = "insert into employees(Images) values(?)"; 
     PreparedStatement pst = connection.prepareStatement(sql); 
      System.out.println("Working 3"); 
      pst.setBlob(12, is); 

      System.out.println("Working 4"); 


      pst.executeQuery(); 
      connection.commit(); 
     System.out.println("Working 5"); 
      JOptionPane.showMessageDialog(null, "Data Inserted"); 


} 
    } 

     catch (Exception e1) { 


      JOptionPane.showMessageDialog(null, "Error"); 

     } 
}}); 

Это метод, чтобы выбрать изображение с помощью использования JFileChooser

uploadImage.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e){ 
       JFileChooser fileChooser = new JFileChooser(); 
       fileChooser.setCurrentDirectory(new File(System.getProperty("user.home"))); 
       FileNameExtensionFilter filter = new FileNameExtensionFilter("*.JPG", "jpg","gif","png");  
       fileChooser.addChoosableFileFilter(filter); 
       fileChooser.addChoosableFileFilter(filter); 
       fileChooser.setMultiSelectionEnabled(false); 
       int result = fileChooser.showSaveDialog(null); 
       if(result == JFileChooser.APPROVE_OPTION){ 
        File selectedFile = fileChooser.getSelectedFile(); 
        String path = selectedFile.getAbsolutePath(); 
        photoLabel.setIcon(ResizeImage(path)); 
        s = path; 
         } 


       else if(result == JFileChooser.CANCEL_OPTION){ 
        System.out.println("No Data"); 
       } 
      } 
      }); 

Edit -

К не работает Я имею в виду, я не получаю ошибки, программа не нарушает , Только изображение не будет загружаться в базу данных, а код System.out.println("Working 5"); не печатает на консоль. Так что, похоже, он застрял/замерз в тот момент.

+0

определить * не работает * –

+0

@ScaryWombat Я не получаю ошибки, программа не сломается. Просто не загружайте изображение в базу данных и код System.out.println («Working 5»); не печатает на консоль. – TheNotoriousCoder

+0

В вашем коде у вас есть 'try' - вы игнорируете улов? –

ответ

2

Во-первых, дважды проверьте структуру таблицы для таблицы employees и столбца Images с правильного типа

Затем, установить правильный заполнитель для ввода в подготовленном заявлении, есть только один

pst.setBlob(1, ... 

Затем, использовать этот подход вместо

private byte[] readFile(String file) { 
    ByteArrayOutputStream bos = null; 
    try { 
     File f = new File(file); 
     FileInputStream fis = new FileInputStream(f); 
     byte[] buffer = new byte[1024]; 
     bos = new ByteArrayOutputStream(); 
     for (int len; (len = fis.read(buffer)) != -1;) { 
      bos.write(buffer, 0, len); 
     } 
    } catch (FileNotFoundException e) { 
     System.err.println(e.getMessage()); 
    } catch (IOException e2) { 
     System.err.println(e2.getMessage()); 
    } 
    return bos != null ? bos.toByteArray() : null; 
} 

С

pst.setBytes(1, readFile(s)); 

Наконец, вызовите

pst.executeUpdate(); 

Источник: http://www.sqlitetutorial.net/sqlite-java/jdbc-read-write-blob/

+0

Хорошо, вы потеряли меня с Первым, установите правильный заполнитель для ввода в подготовленном сообщении, есть только один. Но спасибо за ваш ответ. :) – TheNotoriousCoder

+0

Прочтите это http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html, это зависит от #of? в заявлении. первая - 1 секунда - 2 и так далее. –

+0

Я добавил код, но получаю сообщение об ошибке с приватным байтом [] readFile (Stringfile) = Синтаксическая ошибка на токене «readFile», ожидается AnnotationName – TheNotoriousCoder

Смежные вопросы