2015-04-01 2 views
0

Я создал программное обеспечение, использующее netbeans. теперь я хочу добавить фотографии в свою базу данных. Я создал таблицу и изменил тип как «BLOB». Но, IDK, как закодировать в java, чтобы это сделать. с этим, я получаю изображение и устанавливаю его в jLabel. сейчас как сохранить эту фотографию в mysql?Как добавить фотографию в mysql из java?

try { 
      lbl_imge1.setIcon(null); 
      jFileChooser1.showOpenDialog(this); 
      BufferedImage upload = ImageIO.read(jFileChooser1.getSelectedFile()); 
      java.awt.Image photo = upload.getScaledInstance(lbl_imge1.getWidth(), lbl_imge1.getHeight(), java.awt.Image.SCALE_SMOOTH); 
      lbl_imge1.setIcon(new ImageIcon(photo)); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

Теперь я здесь,

try { 
      jLabel1.setIcon(null); 
      jFileChooser1.showOpenDialog(this); 
      BufferedImage upload = ImageIO.read(jFileChooser1.getSelectedFile()); 
      java.awt.Image photo = upload.getScaledInstance(jLabel1.getWidth(), jLabel1.getHeight(), java.awt.Image.SCALE_SMOOTH); 
      jLabel1.setIcon(new ImageIcon(photo)); 

      Class.forName("com.mysql.jdbc.Driver"); 
      Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/crazy", "root", "123"); 

      BufferedImage buffered = ImageIO.read(jFileChooser1.getSelectedFile()); 

      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      ImageIO.write(buffered, "jpg", baos); 
      byte[] imageInByte = baos.toByteArray(); 

      Blob blob = con.createBlob(); 
      blob.setBytes(1, imageInByte); 

      String query="INSERT INTO image VALUES ('"+jTextField1.getText()+"','"+blob+"')"; 
      PreparedStatement statement=con.prepareStatement(query); 

ответ

2
  1. Возьмите BufferedImage

    BufferedImage buffered= ImageIO.read(jFileChooser1.getSelectedFile()); 
    
  2. Получить байтовый массив из него (From this answer)

    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    ImageIO.write(buffered, "jpg", baos); 
    byte[] imageInByte = baos.toByteArray(); 
    
  3. Сохранить массив в блоб (From this answer) (возможно использовать подготовленное заявление)

    Blob blob = connection.createBlob(); 
    blob.setBytes(1, imageInByte); 
    

UPDATE: подключение ваш разъем базы данных, а именно:

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root"); 
+0

Можете ли вы описать 3-й шаг? что такое «соединение»? netbeans дает мне ошибки. – user271865

+0

Является ли ваше соединение с базой данных! IE: «Connection connection = DriverManager.getConnection (« jdbc: mysql: // localhost: 3306/test »,« root »,« root »);« Я обновил ответ;) –

+0

Это зависит от того, как вы управляете отношением btw ваши сущности и база данных ... есть ли у вас 'Hibernate Mappings' с' EntityManager'? возможно, для вас достаточно простого запроса «HQL», делайте это так же, как и в других случаях ... Если нет, 'PreparedStatement', как было предложено в ответ ...' String query = "insert into table (..... .) "; PreparedStatement ps = connection.prepareStatement (query); ' –

0

Вы может сохранить любой массив байтов в столбце blob. Я знаю, что это возможно с Oracle, и это также должно работать с MySql.
Вот небольшой пример того, как сделать вставку с Java кодом:

String sql = "insert into yourtable(id,binaryImage) values (?,?)"; 
PreparedStatement pstmt =dbConnection.prepareStatement(sql); 

ByteArrayInputStream bais = new ByteArrayInputStream(your_byte_array); 
pstmt.setString(1, "your_id"); 
pstmt.setBinaryStream(2, bais); 
pstmt.execute(); 
pstmt.close(); 
Смежные вопросы