Como salvar a imagem no banco de dados?

70 respostas
java
F

Eu tenho essa código para adicionar imagem:

private void jButtonAdicionarImagemActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser jfilechooser = new JFileChooser();
File file = new File(Imagens);
int option = jfilechooser.showOpenDialog(null);

if (option == JFileChooser.APPROVE_OPTION) {
    file = jfilechooser.getSelectedFile();

    ImageIcon image = new ImageIcon(file.getPath());

    int height = image.getIconHeight();
    int width = image.getIconWidth();

    jLabel1.setSize(width, height);
    jLabel1.setIcon(image);
    jLabel1.repaint();

} else {
    JOptionPane.showMessageDialog(null, "Você não selecionou nenhum diretorio.");
}
}

e ai como eu faço um botão para salvar imagem numa pasta dentro do banco de dados?

70 Respostas

Dragoon

Qual foi a solução tem como disponibilizar?

rodriguesabner
String caminho = file.getAbsolutePath();

Salva a String caminho

F

não teve solução ainda

F

como assim não entendi o que você falou???

rodriguesabner

Mantenha a calma, não precisa postar várias vezes.
Você quer salvar o caminho da imagem, certo? Sua pergunta está mal formulada. O que você quer fazer de fato?

F

é que postei sem querer varias vezes foi mal, e sobre o que quero saber é como eu faço para salvar a imagem junto com os dados que eu cadastrar no banco de dados ?

rodriguesabner

Então, é só adicionar o caminho da imagem junto ao preparedstatement, manda o código que vc insere no banco de novo, por favor

F

Aqui o código:

public void Salvar(BeansMoradores mod){
        conex.conecta();
        try {
            PreparedStatement pat = conex.con.prepareStatement("INSERT INTO morador(nome, rg, cpf, nomedoveiculo, númerodoapartamento, númerodacasa, placa) VALUES(?,?,?,?,?,?,?)");
            pat.setString(1, mod.getNome());
            pat.setString(2, mod.getRG());
            pat.setString(3, mod.getCPF());
            pat.setString(4, mod.getNomeDoVeiculo());
            pat.setString(5, mod.getNúmeroDoApartamento());
            pat.setString(6, mod.getNúmeroDaCasa());
            pat.setString(7, mod.getPlaca());
            pat.execute();
            
            JOptionPane.showConfirmDialog(null, "Dados Inseridos Com Sucesso!");
            
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        conex.desconecta();
        
    }
rodriguesabner

Certo, vc tem a coluna que faz referencia a imagem que vai ser salva?

Exemplo, coluna foto, ou, coluna imagem

F

sim tenho e agora?

rodriguesabner

Faz o getter e setter da String Imagem/Foto e depois passa pra query:

INSERT INTO morador(nome, rg, cpf, nomedoveiculo, númerodoapartamento, númerodacasa, placa, imagem) VALUES(?,?,?,?,?,?,?,?)"

pat.setString(8, mod.getImagem());

E na hora de setar a imagem vc faz:

String caminho = file.getAbsolutePath();
....setImagem(caminho);
F

o código na hora de setar é pro colocar nesse meu código:

public void setImagem(String Imagem) {
    this.Imagem = Imagem;
}
staroski

Adiciona uma coluna do tipo BLOB na sua tabela, transforma a imagem em um array de bytes e adiciona nessa coluna.

F

eu não entendi o que você falou, você pode explicar melhor por favor???

staroski

Você quer salvar uma imagem no banco de dados certo?
Uma imagem é um arquivo contando vários bytes correspondentes aos pixels que compõe a imagem, certo?

Pois bem, você não vai salvar uma imagem numa coluna do tipo TEXTO.
Você vai usar uma coluna do tipo BLOB - Binary Large OBject.

Para isso você vai ler os bytes do seu arquivo de imagem e salvar nessa coluna que você criou.

F

mais no banco de dados a imagem é bytea

F

deixa eu perguntar uma coisa aonde eu vou setar a imagem que você falou pra mim eu estou um pouco perdida.

staroski

Perfeito
Também funciona
É só setar o array de bytes no seu PreparedStatement

rodriguesabner

vc seta a imagem no mesmo lugar que faz o .setNome, .setRg

F

Assim:

public void Salvar(BeansMoradores mod){
        conex.conecta();
        try {
            PreparedStatement pat = conex.con.prepareStatement("INSERT INTO morador(nome, rg, cpf, nomedoveiculo, númerodoapartamento, númerodacasa, placa, imagem) VALUES(?,?,?,?,?,?,?<?)");
            pat.setString(1, mod.getNome());
            pat.setString(2, mod.getRG());
            pat.setString(3, mod.getCPF());
            pat.setString(4, mod.getNomeDoVeiculo());
            pat.setString(5, mod.getNúmeroDoApartamento());
            pat.setString(6, mod.getNúmeroDaCasa());
            pat.setString(7, mod.getPlaca());
            pat.setString(8, mod.getImagem());
            pat.execute();
            
            JOptionPane.showConfirmDialog(null, "Dados Inseridos Com Sucesso!");
            
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        conex.desconecta();
        
    }
F

assim:

public BeansMoradores buscaMoradores(BeansMoradores mod){
        conex.conecta();
        conex.executaSql("SELECT *FROM morador WHERE nome like'%"+mod.getPesquisa()+"%'");
        try{
         conex.rs.first();
         
         mod.setCodigo(conex.rs.getInt("codigo"));
         mod.setNome(conex.rs.getString("nome"));
         mod.setRG(conex.rs.getString("rg"));
         mod.setCPF(conex.rs.getString("cpf"));
         mod.setNomeDoVeiculo(conex.rs.getString("nomedoveiculo"));
         mod.setNúmeroDoApartamento(conex.rs.getString("númerodoapartamento"));
         mod.setNúmeroDaCasa(conex.rs.getString("númerodacasa"));
         mod.setPlaca(conex.rs.getString("placa"));
         mod.setImagem(conex.rs.getString("imagem"));
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        
        conex.desconecta();    
                
        return mod;
    
    
    }
F

oi esqueceu de responder pra mim.

rodriguesabner

vc mandou o código que busca e não o que salva.

F

esta aqui o que salva então.

public void Salvar(BeansMoradores mod){
    conex.conecta();
    try {
        PreparedStatement pat = conex.con.prepareStatement("INSERT INTO morador(nome, rg, cpf, nomedoveiculo, númerodoapartamento, númerodacasa, placa, imagem) VALUES(?,?,?,?,?,?,?<?)");
        pat.setString(1, mod.getNome());
        pat.setString(2, mod.getRG());
        pat.setString(3, mod.getCPF());
        pat.setString(4, mod.getNomeDoVeiculo());
        pat.setString(5, mod.getNúmeroDoApartamento());
        pat.setString(6, mod.getNúmeroDaCasa());
        pat.setString(7, mod.getPlaca());
        pat.setString(8, mod.getImagem());
        pat.execute();
        
        JOptionPane.showConfirmDialog(null, "Dados Inseridos Com Sucesso!");
        
    } catch (SQLException ex) {
        ex.printStackTrace();
    }
    conex.desconecta();
    
}
rodriguesabner

ok, agora é só passar a imagem no mod.setImagem…

F

assim:
mod.setImagem(conex.rs.getString(“imagem”));

rodriguesabner

nao, onde vc coloca o nome da pessoa cadastrada???

F

no botão salvar

rodriguesabner

então é la, vc seta o mod.setImagem lá

F

nesse código olha:

private void jButtonSalvarActionPerformed(java.awt.event.ActionEvent evt) {

if(jTextFieldNome.getText().isEmpty()){

JOptionPane.showMessageDialog(null,preencha o nome para continuar);

jTextFieldNome.requestFocus();

}else if(jTextFieldRG.getText().isEmpty()){

JOptionPane.showMessageDialog(null,preencha o rg para continuar);

jTextFieldRG.requestFocus();

}else if(jTextFieldCPF.getText().isEmpty()){

JOptionPane.showMessageDialog(null,preencha o cpf para continuar);

jTextFieldCPF.requestFocus();

}else if(jTextFieldNomeDoVeiculo.getText().isEmpty()){

JOptionPane.showMessageDialog(null,preencha o nomedoveiculo para continuar);

jTextFieldNomeDoVeiculo.requestFocus();

}else if(jTextFieldNúmeroDoApartamento.getText().isEmpty()){

JOptionPane.showMessageDialog(null,preencha o númerodoapartamento para continuar);

jTextFieldNúmeroDoApartamento.requestFocus();

}else if(jTextFieldNúmeroDaCasa.getText().isEmpty()){

JOptionPane.showMessageDialog(null,preencha o númerodacasa para continuar);

jTextFieldNúmeroDaCasa.requestFocus();

}else if(jTextFieldPlaca.getText().isEmpty()){

JOptionPane.showMessageDialog(null,preencha a placa para continuar);

jTextFieldPlaca.requestFocus();

}else
if(salvar==true){
        mod.setNome(jTextFieldNome.getText());
        mod.setRG(jTextFieldRG.getText());
        mod.setCPF(jTextFieldCPF.getText());
        mod.setNomeDoVeiculo(jTextFieldNomeDoVeiculo.getText());
        mod.setPlaca(jTextFieldPlaca.getText());
        mod.setNúmeroDoApartamento(jTextFieldNúmeroDoApartamento.getText());
        mod.setNúmeroDaCasa(jTextFieldNúmeroDaCasa.getText());
        control.Salvar(mod);
        jTextFieldNome.setText("");
        jTextFieldRG.setText("");
        jTextFieldCPF.setText("");
        jTextFieldNomeDoVeiculo.setText("");
        jTextFieldPlaca.setText("");
        jTextFieldNúmeroDoApartamento.setText("");
        jTextFieldNúmeroDaCasa.setText("");
        jTextFieldNome.setEnabled(false);
        jTextFieldRG.setEnabled(false);
        jTextFieldCPF.setEnabled(false);
        jTextFieldNomeDoVeiculo.setEnabled(false);
        jTextFieldPlaca.setEnabled(false);
        jTextFieldNúmeroDoApartamento.setEnabled(false);
        jTextFieldNúmeroDaCasa.setEnabled(false);
        jButtonSalvar.setEnabled(true);
        jButtonCancelar.setEnabled(false);
        preencherTabela("SELECT *FROM morador ORDER BY nome");

    }else{
        mod.setCodigo(Integer.parseInt(jTextFieldCOD.getText()));
        mod.setNome(jTextFieldNome.getText());
        mod.setRG(jTextFieldRG.getText());
        mod.setCPF(jTextFieldCPF.getText());
        mod.setNomeDoVeiculo(jTextFieldNomeDoVeiculo.getText());
        mod.setPlaca(jTextFieldPlaca.getText());
        mod.setNúmeroDoApartamento(jTextFieldNúmeroDoApartamento.getText());
        mod.setNúmeroDaCasa(jTextFieldNúmeroDaCasa.getText());
        control.Editar(mod);
        jTextFieldCOD.setText("");
        jTextFieldNome.setText("");
        jTextFieldRG.setText("");
        jTextFieldCPF.setText("");
        jTextFieldNomeDoVeiculo.setText("");
        jTextFieldPlaca.setText("");
        jTextFieldNúmeroDoApartamento.setText("");
        jTextFieldNúmeroDaCasa.setText("");
        jTextFieldNome.setEnabled(false);
        jTextFieldRG.setEnabled(false);
        jTextFieldCPF.setEnabled(false);
        jTextFieldNomeDoVeiculo.setEnabled(false);
        jTextFieldPlaca.setEnabled(false);
        jTextFieldNúmeroDoApartamento.setEnabled(false);
        jTextFieldNúmeroDaCasa.setEnabled(false);
        jButtonSalvar.setEnabled(true);
        jButtonNovo.setEnabled(true);
        jButtonCancelar.setEnabled(false);
        preencherTabela("SELECT *FROM morador ORDER BY nome");

    }
}
rodriguesabner

Quando for enviar o código aqui, seleciona ele todo e clica em </>.

mod.setNúmeroDaCasa(jTextFieldNúmeroDaCasa.getText());

coloca o mod.setImagem aqui, depois do numerodacasa, eu te passei o código nas respostas acima

F

assim:
mod.setImagem(caminho);

rodriguesabner

Fabiana, vc quer salvar a imagem ou o caminho da imagem???

F

quero salvar a imagem

rodriguesabner

https://www.roseindia.net/jdbc/save_image.shtml

File image = new File("C:\\imagem.jpg");
  FileInputStream inputStream = new FileInputStream(image);
  statement.setBinaryStream(x, (InputStream) inputStream, (int)(image.length()));

Vc tem que ter uma coluna do tipo Blob no seu banco, como o @staroski falou.

F

então eu tenho que colocar aqui nesse código:

public Connection conecta(){ // metodo responsavel por realizar conexao com a base dados 
    System.setProperty("jdbc.Drivers", driver);
      try {
          con = DriverManager.getConnection(caminho, usuario, senha);
          //JOptionPane.showMessageDialog(null,"Conexão Efetuada com Sucesso!!");
      } catch (SQLException ex) {
          JOptionPane.showMessageDialog(null,"Erro ao se conectar com o banco de dados:\n"+ex.getMessage());
      }
      return con;      
    
  }
  
  public void executaSql(String sql){
      try {
          stm = con.createStatement(rs.TYPE_SCROLL_INSENSITIVE, rs.CONCUR_READ_ONLY);
          rs = stm.executeQuery(sql);
      } catch (SQLException ex) {
          JOptionPane.showMessageDialog(null,"Erro ExecutaSql:\n"+ex.getMessage());
      }
       
  }
  
  public void desconecta(){
     try{
      con.close();
      //JOptionPane.showMessageDialog(null,"BD Desconectado com sucesso:");
     } catch (SQLException ex){
      JOptionPane.showMessageDialog(null,"Erro ao fechar conexao com BD:\n"+ex.getMessage());
     } 
  }
rodriguesabner

Pq vc não assiste umas vídeo aulas no youtube primeiro? Vc tá perdida tanto em Java quanto em Banco de Dados…

Vc tem que colocar a coluna na tabela X do seu banco (MySQL/Postgres).

F

ok vou ver então

F

assim:

public class SaveImageToDatabase {
    public static void main(String[] args) throws SQLException {
      String caminho = "jdbc:postgresql://localhost:5432/projetocadastro";
      String usuario = "postgres";
      String senha ="fabi2019";
      String sql = "INSERT INTO morador(nome, rg, cpf, nomedoveiculo, númerodoapartamento, númerodacasa, placa, imagem) VALUES(?,?,?,?,?,?,?,?)";

      try (Connection conn = DriverManager.getConnection(caminho, usuario, senha );){
         File image = new File("images.jpg");
         try (FileInputStream inputStream = new FileInputStream(image);
               PreparedStatement stmt = conn.prepareStatement(sql);) {

            stmt.setString(1, "fabiana");
            stmt.setBinaryStream(2, inputStream, image.length());
            stmt.executeUpdate();
            System.out.println("Image saved successfully.");
         } catch (FileNotFoundException ex) {    
              ex.printStackTrace();
          } catch (IOException ex) {
              ex.printStackTrace();
          }    
        }  
      }
   }
F

o que seria esse resposta dele no projeto?

rodriguesabner

Vc ta testando isso numa classe a parte?

Não entendi.

F

sim

rodriguesabner

OK, mas não vai funcionar.

Faz assim:

String sql = INSERT INTO morador(nome, imagem) VALUES (?,?);

E testa de novo

F

deu a mesma coisa da foto que eu passei pra você antes

rodriguesabner

impossível, vc não disse que está testando numa classe à parte???

Enfim, vc fez a condição que precisa passar alguns dados antes de salvar, só prestar atenção na mensagem.

"Preencha o nome para continuar"
F

deu esse erro olha:

org.postgresql.util.PSQLException: ERROR: syntax error at or near WHERE

Posição: 125

at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2310)

at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2023)

at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:217)

at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:421)

at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:166)

at org.postgresql.jdbc.PgPreparedStatement.execute(PgPreparedStatement.java:159)

at modeloDao.DaoMoradores.Editar(DaoMoradores.java:57)

at telas.TelaMoradores.jButtonSalvarActionPerformed(TelaMoradores.java:653)

at telas.TelaMoradores.access$000(TelaMoradores.java:20)

at telas.TelaMoradores$1.actionPerformed(TelaMoradores.java:134)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)

at java.awt.Component.processMouseEvent(Component.java:6533)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)

at java.awt.Component.processEvent(Component.java:6298)

at java.awt.Container.processEvent(Container.java:2236)

at java.awt.Component.dispatchEventImpl(Component.java:4889)

at java.awt.Container.dispatchEventImpl(Container.java:2294)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)

at java.awt.Container.dispatchEventImpl(Container.java:2280)

at java.awt.Window.dispatchEventImpl(Window.java:2746)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)

at java.awt.EventQueue.access$500(EventQueue.java:97)

at java.awt.EventQueue$3.run(EventQueue.java:709)

at java.awt.EventQueue$3.run(EventQueue.java:703)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)

at java.awt.EventQueue$4.run(EventQueue.java:731)

at java.awt.EventQueue$4.run(EventQueue.java:729)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
rodriguesabner

Vc assistiu alguma vídeo aula? Tentou entender como funcionam as coisas?

F

sim eu vi varias aulas sobre isso, mais não estão me ajudando

rodriguesabner

Vc tem que entender desde o básico, até chegar onde está. Pq vc não sabe nem o que está fazendo, isso não vai te ajudar, vc tem que aprender passo a passo.

Mas vamos lá, o que tem nessa linha:

at modeloDao.DaoMoradores.Editar(DaoMoradores.java:57)
F

é esse comando:
pat.execute();

rodriguesabner

onde vc ta usando o WHERE???

F

editar

PreparedStatement pat = conex.con.prepareStatement("UPDATE  morador SET nome=?, rg=?, cpf=?, nomedoveiculo=?, númerodoapartamento=?, númerodacasa=?, placa=?, imagem=?, WHERE codigo=?");

excluir

PreparedStatement pat = conex.con.prepareStatement("DELETE FROM morador WHERE codigo=?");

buscar

conex.executaSql("SELECT *FROM morador WHERE nome like'%"+mod.getPesquisa()+"%'");
rodriguesabner

Mas como vc fez um projeto desses se não sabe nem como salva no banco?? Desculpa Fabiana, mas vc realmente precisa pegar as coisas do zero.

Você está me passando uma coisa e está, no fim, fazendo outra… O código que eu te passei nem WHERE tem, é inviavel te ajudar assim. Não pula etapas, isso vai te complicar mais!!!

F

eu te falei aonde eu estou usando o meu where só isso
mais o código que você falou eu não entendi aonde eu coloco ele

rodriguesabner

Pq o seu erro está dando no WHERE!!

Mas vc que me passou o código, eu só pedi pra vc consertar um negocio kkkkkk

F

eu quis dizer esse código:

File image = new File("C:\\imagem.jpg");
FileInputStream inputStream = new FileInputStream(image);
statement.setBinaryStream(x, (InputStream) inputStream, (int)(image.length()));
rodriguesabner

mas vc fez isso aqui /\ /\ /\ /\

F

e que eu fui testar esse codigo mais nao gostei

eu tenho essa de conexao com o banco

public Connection conecta(){ // metodo responsavel por realizar conexao com a base dados 
    System.setProperty("jdbc.Drivers", driver);
      try {
          con = DriverManager.getConnection(caminho, usuario, senha);
          //JOptionPane.showMessageDialog(null,"Conexão Efetuada com Sucesso!!");
      } catch (SQLException ex) {
          JOptionPane.showMessageDialog(null,"Erro ao se conectar com o banco de dados:\n"+ex.getMessage());
      }
      return con;      
    
  }
  
  public void executaSql(String sql){
      try {
          stm = con.createStatement(rs.TYPE_SCROLL_INSENSITIVE, rs.CONCUR_READ_ONLY);
          rs = stm.executeQuery(sql);
      } catch (SQLException ex) {
          JOptionPane.showMessageDialog(null,"Erro ExecutaSql:\n"+ex.getMessage());
      }
       
  }
  
  public void desconecta(){
     try{
      con.close();
      //JOptionPane.showMessageDialog(null,"BD Desconectado com sucesso:");
     } catch (SQLException ex){
      JOptionPane.showMessageDialog(null,"Erro ao fechar conexao com BD:\n"+ex.getMessage());
     } 
  }
rodriguesabner

oxi, é só teste, é só pra ver se funciona.

QUANDO FOR POSTAR CÓDIGO FORMATA ELE, SELECIONA ELE TODO E APERTA EM </>

Não preicisamos do código do banco agora, vamos testar o código que vc mandou ali em cima pra cadastrar.

F

ok

F

da o mesmo erro

rodriguesabner

qual erro? o erro do WHERE?

F

ele deu aquele erro grande que eu passei pra voce antes

rodriguesabner

manda o código que vc ta usando…

F

o código que fala que esta errado é o ultimo pat

public void Salvar(BeansMoradores mod){
    conex.conecta();
    try {
        PreparedStatement pat = conex.con.prepareStatement("INSERT INTO morador(nome, rg, cpf, nomedoveiculo, númerodoapartamento, númerodacasa, placa, imagem) VALUES(?,?,?,?,?,?,?,?)");
        pat.setString(1, mod.getNome());
        pat.setString(2, mod.getRG());
        pat.setString(3, mod.getCPF());
        pat.setString(4, mod.getNomeDoVeiculo());
        pat.setString(5, mod.getNúmeroDoApartamento());
        pat.setString(6, mod.getNúmeroDaCasa());
        pat.setString(7, mod.getPlaca());
        pat.setString(8, mod.getImagem());
        pat.execute();
        
        JOptionPane.showConfirmDialog(null, "Dados Inseridos Com Sucesso!");
        
    } catch (SQLException ex) {
        ex.printStackTrace();
    }
    conex.desconecta();
    
}
rodriguesabner

O fabianinha, por favor…

é esse código aqui:

public class SaveImageToDatabase {
public static void main(String[] args) throws SQLException {
String caminho = jdbc:postgresql://localhost:5432/projetocadastro”;
String usuario = postgres;
String senha =fabi2019;
String sql = INSERT INTO morador(nome, rg, cpf, nomedoveiculo, númerodoapartamento, númerodacasa, placa, imagem) VALUES(?,?,?,?,?,?,?,?);

  try (Connection conn = DriverManager.getConnection(caminho, usuario, senha );){
     File image = new File("images.jpg");
     try (FileInputStream inputStream = new FileInputStream(image);
           PreparedStatement stmt = conn.prepareStatement(sql);) {

        stmt.setString(1, "fabiana");
        stmt.setBinaryStream(2, inputStream, image.length());
        stmt.executeUpdate();
        System.out.println("Image saved successfully.");
     } catch (FileNotFoundException ex) {    
          ex.printStackTrace();
      } catch (IOException ex) {
          ex.printStackTrace();
      }    
    }  
  }

}
F

ok

F

eu tentei usar esse codigo pra chama a imagem no banco, mais o codigo da conexao do banco é outro codigo

F

eu nao vou mais usar esse codigo nao vou usar o meu de conexao pro banco
que esse aqui olha:

public Connection conecta(){ // metodo responsavel por realizar conexao com a base dados 
        System.setProperty("jdbc.Drivers", driver);
          try {
              con = DriverManager.getConnection(caminho, usuario, senha);
              //JOptionPane.showMessageDialog(null,"Conexão Efetuada com Sucesso!!");
          } catch (SQLException ex) {
              JOptionPane.showMessageDialog(null,"Erro ao se conectar com o banco de dados:\n"+ex.getMessage());
          }
          return con;      
        
      }
      
      public void executaSql(String sql){
          try {
              stm = con.createStatement(rs.TYPE_SCROLL_INSENSITIVE, rs.CONCUR_READ_ONLY);
              rs = stm.executeQuery(sql);
          } catch (SQLException ex) {
              JOptionPane.showMessageDialog(null,"Erro ExecutaSql:\n"+ex.getMessage());
          }
           
      }
      
      public void desconecta(){
         try{
          con.close();
          //JOptionPane.showMessageDialog(null,"BD Desconectado com sucesso:");
         } catch (SQLException ex){
          JOptionPane.showMessageDialog(null,"Erro ao fechar conexao com BD:\n"+ex.getMessage());
         } 
      }
rodriguesabner

Olha, eu vou passar tudo o que vc tem que fazer nessa resposta, ok? Está testado e funcionando, se você não conseguir, infelizmente não tem como eu te ajudar, vc tem que começar a aprender do zero.

Pra testar é só criar duas classe e copiar esses códigos abaixo

SALVAR IMAGEM

public class InserirImagem {

    //var global
    ConectaBanco conecta = new ConectaBanco();

    public void inserirBanco(String nome, byte[] img) {
        conecta.conexao();
        try {
            PreparedStatement pst = conecta.conn.prepareStatement("INSERT INTO morador (nome, imagem) VALUES (?,?)");
            pst.setString(1, nome);
            pst.setBytes(2, img);
            pst.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            conecta.desconecta();
        }
    }

    private byte[] converterImagem(File file) throws FileNotFoundException {
        FileInputStream fis = new FileInputStream(file);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        byte[] buf = new byte[1024];
        try {
            for (int readNum; (readNum = fis.read(buf)) != -1;) {
                bos.write(buf, 0, readNum);
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        byte[] bytes = bos.toByteArray();

        return bytes;
    }

    private void enviarDados() {
        try {
            byte[] byteImage = converterImagem(new File("C:\\Imperium\\logonew (1).png"));
            inserirBanco("Abner Rodrigues", byteImage);
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new InserirImagem().enviarDados();
    }
}

MOSTRAR IMAGEM

public class MostrarImagem extends javax.swing.JFrame {

    public MostrarImagem() {
        initComponents();
        procurar_todos();
    }

    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        camponome = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        campoimagem = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        jPanel1.setBackground(new java.awt.Color(255, 255, 255));
        jPanel1.setLayout(null);
        jPanel1.add(camponome);
        camponome.setBounds(40, 320, 460, 20);

        jLabel1.setText("Nome");
        jPanel1.add(jLabel1);
        jLabel1.setBounds(40, 300, 27, 14);
        jPanel1.add(campoimagem);
        campoimagem.setBounds(140, 20, 270, 260);

        getContentPane().add(jPanel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, 540, 360));

        pack();
    }              

    public static void main(String args[]) {
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Windows".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(MostrarImagem.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MostrarImagem().setVisible(true);
            }
        });
    }
           
    private javax.swing.JLabel campoimagem;
    private javax.swing.JTextField camponome;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    // End of variables declaration                   

    ConectaBanco conecta = new ConectaBanco();

    Image image = null;

    public void procurar_todos() {
        conecta.conexao();
        try {
            conecta.executaSQL("SELECT * FROM morador ORDER BY id");
            conecta.rs.last();

            String nome = conecta.rs.getString("nome");
            getImage(conecta.rs.getBytes("imagem"));
            ImageIcon i = new ImageIcon(new ImageIcon("output.jpg").getImage().getScaledInstance(campoimagem.getWidth(), campoimagem.getHeight(), Image.SCALE_SMOOTH));
            
            camponome.setText(nome);
            campoimagem.setIcon(i);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            conecta.desconecta();
        }
    }

    public byte[] getImage(byte[] img) {
        try {
            ByteArrayInputStream bis = new ByteArrayInputStream(img);
            BufferedImage bImage2 = ImageIO.read(bis);
            ImageIO.write(bImage2, "jpg", new File("output.jpg"));
        } catch (IOException ex) {
            Logger.getLogger(MostrarImagem.class.getName()).log(Level.SEVERE, null, ex);
        }
        return img;
    }
}
Criado 7 de novembro de 2019
Ultima resposta 9 de nov. de 2019
Respostas 70
Participantes 4