Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

andersonrc_

Erro ao atualizar campo de todos os registros com o path dos arquivos

Recommended Posts

Olá pessoal, a situação é a seguinte:

 

Estou fazendo a migração de arquivos armazenados no banco para sistemas de arquivos. No código como poderá ser visto abaixo, utilizo um algoritmo que gera o nome dos arquivos e os salvam em um diretório gerado através da data de inclusão do documento. Até aí tudo bem, pois os arquivos estão sendo salvos corretamente. Mas preciso também, armazenar o path destes arquivos na coluna path do database. O problema que está ocorrendo é que só estou conseguindo atualizar apenas o primeiro registro e de forma errada, pois ele salva com o path do último arquivo gerado.

 

Considerando que todos os registros estão com o campo path vazios.

Como passo atualizar todos os registros, associando o path correto para todos os arquivos?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue o código:

 

public class MigracaoDados {

    public static void main(String[] args) throws Exception {

        ResultSet rs = null;

        try {
            Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
            Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.102:1521:xe","teste","123456");
            System.out.println("Conectado!");
            Statement statement = connection.createStatement();

            String sql = "SELECT id, dthinclusao, path, documentoarquivo FROM processodocumento";
            rs = statement.executeQuery(sql);

            while (rs.next()) {    

                //obtendo o arquivo no banco
                int id = rs.findColumn("id");
                Blob blob = rs.getBlob("documentoarquivo");
                
                //stream para leitura
                InputStream is = blob.getBinaryStream();
                
                String data = rs.getString("dthinclusao");            
                //String s_data = data.substring(0, 10).replace("-", "");
                String s_ano = data.substring(0,4);
                String s_mes = data.substring(5,7);
                String s_dia = data.substring(8,10);
                System.out.println(s_dia + "/" + s_mes + "/" + s_ano);
                System.out.println("---------------");
                        
                //criacao do diretorio
                File novoDiretorio = new File("/home/phoenix/Documentos/workspace/files/" + "/"
                        + s_ano + "/"
                        + s_mes + "/"
                        + s_dia + "/");
                novoDiretorio.mkdirs();
                
                //geracao aleatoria dos nomes dos arquivos
                String descricaoArquivo = UUID.randomUUID().toString();

                //criacao do arquivo
                File file = new File(novoDiretorio, descricaoArquivo + ".pdf");
                System.out.println("Path: " + file);
                
                //atualizar campo path de acordo o nome do arquivo gerado
                String sqlInsere = "UPDATE processodocumento SET path=? WHERE id = ?";            
                PreparedStatement stmt = connection.prepareStatement(sqlInsere);
                String path = file.toString();
                
                stmt.setString(1, path);
                stmt.setInt(2, id);
                stmt.execute();
                
                //stream para escrita
                FileOutputStream fos = new FileOutputStream(file);    

                int b = 0;
                while ((b = is.read()) != -1)
                {
                    //efetuar a escrita no sistema de arquivos
                    fos.write(b);
                }
                fos.close();
                stmt.close();
            }
            statement.close();
            System.out.println("Todos os arquivos foram gravados no sistema de arquivos!");
            System.out.println("Desconectado!");

            
        } catch (SQLException e)
        {
            e.getMessage (); e.printStackTrace();
            System.out.println(e);
        }

    }


}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Silva Mateus
      Olá amigos do fórum. Hoje trago a seguinte questão: 
       
      Estou iniciando os estudos sobre conexões JAVA/Postgres. E me deparei com o seguinte problema: 
      Quando tento testar a minha classe chamada, "PoolDeConexoes", ela me retorna os seguintes erros: 

      "Exception in thread "main" java.lang.NullPointerException
          at BDAccess.PoolDeConexoes.<init>(PoolDeConexoes.java:13)
          at BDAccess.PoolDeConexoes.getInstance(PoolDeConexoes.java:21)
          at BDAccess.Main.main(Main.java:9)" 
       
      Porém, a IDE não me exibe nenhum erro semântico durante a digitação, então, o mais provável é que se trata de um erro lógico. 
      Abaixo estão as minhas classes, todas comentadas com o devido processo do pool de conexões, nos moldes solicitados pelo meu professor. 

       
      package BDAccess; import java.util.ArrayList; public class PoolDeConexoes { private static ArrayList<Conexao> conexoes; private static PoolDeConexoes pool; private PoolDeConexoes() { Conexao cn1 = new Conexao(); Conexao cn2 = new Conexao(); conexoes.add(cn1); conexoes.add(cn2); getConexao(); } public static PoolDeConexoes getInstance() { if(pool == null) { pool = new PoolDeConexoes(); } return pool ; } public Conexao getConexao() { if(conexoes == null) { Conexao c = new Conexao(); conexoes.add(c); return c; }else { for(Conexao s:conexoes) { if(s.isLivre()) { return s; } } } return null; } } Acima, a classe denominada: PoolDeConexoes.java

       
      package BDAccess; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class Conexao { private Connection cnx; private boolean livre; public Conexao() { this.livre = true; Parametros prm = Parametros.getInstance(); String driverJDBC = prm.getParametros("driverJdbc"); String urlBanco = prm.getParametros("urlBanco"); String nomeUsuario = prm.getParametros("nomeUsuario"); String senha = prm.getParametros("senha"); try { Class.forName(driverJDBC); System.out.println("Driver importado!"); cnx = DriverManager.getConnection(urlBanco, nomeUsuario, senha); System.out.println("Conexão estabelecida"); }catch (Exception e) { System.out.println("Conexão não estabelecida!"); } } public Connection getConnection() { return cnx; } public void reserva() { if(livre) { livre = false; }else { System.out.println("Esta conexão já está em uso!"); } } public void libera() { livre = true; } public boolean isLivre() { return livre; } } Acima, a classe com o objeto Conexão. 
      package BDAccess; import java.io.IOException; import java.util.ArrayList; public class Main { public static void main(String[] args) throws IOException{ PoolDeConexoes plc = PoolDeConexoes.getInstance(); System.out.println(plc.getConexao()); } } E aqui o meu método principal. 

      Agradeço desde já pelo auxílio de vocês sobre a minha questão. 
    • Por José Peixoto
      Olá, boa noite.
       
      Eu gostaria de saber como eu chamo uma função dentro da cláusula WHERE em jdbc. 
      Por exemplo:
       
      select * from tabela1 td1 WHERE obter_id(tb1.nr_sequencia) between in :dt_ini and :dt_fim; Como faço pra que o jdbc reconheça essa função como filtro?
       
      Obrigado desde já!
    • Por Stevens
      Estou com um problema aleatório ao realizar a conexão com o informix usando pool de conexão do tomcat, segue abaixo o erro:

      java.sql.SQLException: System or internal error java.io.IOException at com.informix.util.IfxErrMsg.getSQLException(Unknown Source) at com.informix.jdbc.IfxSqli.handleSocketException(Unknown Source) at com.informix.jdbc.IfxSqli.receiveMessage(Unknown enter code hereSource) at com.informix.jdbc.IfxSqli.executePrepare(Unknown Source) at com.informix.jdbc.IfxPreparedStatement.setupExecutePrepare(Unknown Source) at com.informix.jdbc.IfxPreparedStatement.processSQL(Unknown Source) at com.informix.jdbc.IfxPreparedStatement.(Unknown Source) at com.informix.jdbc.IfxSqliConnect.createPreparedStmt(Unknown Source) at com.informix.jdbc.IfxSqliConnect.prepareStatement(Unknown Source) at org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:291) at org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:291) at br.com.solcast.integrador.dao.sisdia.PedidoVendaDAO.carregar(PedidoVendaDAO.java:169) at br.com.solcast.integrador.service.sisdia.PedidoVendaService.carregar(PedidoVendaService.java:99) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161) at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:205) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99) at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389) at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347) at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102) at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) at org.glassfish.jersey.internal.Errors.process(Errors.java:315) at org.glassfish.jersey.internal.Errors.process(Errors.java:297) at org.glassfish.jersey.internal.Errors.process(Errors.java:267) at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473) at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at br.com.solcast.integrador.security.RestAuthenticationFilter.doFilter(RestAuthenticationFilter.java:43) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source) Caused by: java.io.IOException at com.informix.asf.IfxDataInputStream.readFully(Unknown Source) at com.informix.asf.IfxDataInputStream.readSmallInt(Unknown Source) ... 61 more

      Para realizar a conexão utilizo a seguinte classe:

      public class DAOManager { private DataSource src; private Connection con;

      public void open() throws SQLException { try { if(this.con==null || this.con.isClosed()) this.con = src.getConnection(); } catch(SQLException e) { throw e; } }

      public void close() throws SQLException { try { if(this.con!=null && !this.con.isClosed()) { this.con.close(); this.con = null; } } catch(SQLException e) { throw e; } finally { if (this.con != null) { try { this.con.close(); } catch (SQLException e) { ; } this.con = null; } } }

      public DAOManager() throws NamingException { Context initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:/comp/env"); this.src = (DataSource)envContext.lookup("jdbc/cortex-sisdia"); }

      public Object gerarDAO(DAO dao) throws SQLException { if (this.con == null || this.con.isClosed()) this.open();

      switch (dao) { case AGENDAMENTOOFICINA: return new AgendamentoOficinaDAO(this.con);

      case ESTOQUE: return new EstoqueDAO(this.con);

      case PEDIDOVENDA: return new PedidoVendaDAO(this.con);

      case PESSOA: return new PessoaDAO(this.con);

      case VEICULO: return new AgendamentoOficinaDAO(this.con);

      default: return null; } }

      @Override protected void finalize() { try{ this.close(); } catch (SQLException e) { e.printStackTrace(); } finally{ try { super.finalize(); } catch (Throwable e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }

      Alguém teria uma solução, aparentemente ocorre pela quantidade de pools ativos.

    • Por prf99
      Meu problema é o seguinte, vi que quando edito um registro , funciona, o cadastro é alterado, mas quando eu quero cadastrar um novo usuário, ele cai na condição de edição, ele edita as informações do cadastro que eu estava alterando anteriormente, não deixando cadastrar um novo usuário, porque isso acontece?
      Variável responsável por validar se está editando ou não.
      private int codigoEditar = 0; Método responsável por buscar o código do usuário na tabela.
      JButton button_3 = new JButton("Editar"); button_3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { tabbedPane.setSelectedIndex(0); // Variável responsável por capturar a linha selecionada int linhaSelecionada = -1; // Busca a linha selecionada e armazena na variável // linhaSelecionada(tr) // linhaSelecionada = tabela.getSelectedRow(); // Validar se uma linha foi selecionada if (linhaSelecionada >= 0) { // Armazena a informação da primeira coluna da linha // selecionada(td) //coluna 0 código do funcionário int codigoFuncionario = (int) tabela.getValueAt(linhaSelecionada, 0); buscarFuncionario(codigoFuncionario); } else { JOptionPane.showMessageDialog(null, "Selecione uma " + "linha para alterar o Funcionário!"); } } }); Método que recebe como parâmetro o código do funcionário, colocando as informações do usuário na tela de cadastro para alteração.
      //recebe como parâmetro o código do funcionário protected void buscarFuncionario(int codigoFuncionario) { control.Funcionarios func = new control.Funcionarios(); //laço foreach que percorre o arraylist referenciando o código do funcionário for (Funcionarios funcio : func.listarFuncionarios(codigoFuncionario + "", 1)) { /*Funcionarios funcio é o Dao, para setar(set) e pegar(get) * func.listarFuncionarios(codigoFuncionario + "", 1)) códigoFuncionário + "" concatena o código com o parametro texto da pesquisa da * classe control * 1 é a pesquisa por código do funcionário referenciando o parametro do código do funcionário */ // Setar informações na tela de cadastro nome.setText(funcio.getNome()); email.setText(funcio.getEmail()); endereco.setText(funcio.getEndereco()); telefone.setText(funcio.getTelefone()); cpf.setText(funcio.getCpf_funcionario()); //Variável que recebe o valor do codigo do usuário //importante para a alteração codigoEditar = funcio.getCodigo_funcionario(); } cadastro.setVisible(true); listagem.setVisible(false); } Método responsável por salvar ou alterar o funcionário.
      protected void salvar() { // Capturar informações que o usuário digitou String nome_funcionario = nome.getText(); String cpf_funcionario = cpf.getText(); String endereco_funcionario = endereco.getText(); String email_funcionario = email.getText(); String fone_funcionario = telefone.getText(); String senha_funcionario = senha.getText(); String rep_senha_funcionario= repsenha.getText(); if(email_funcionario.equals("")&& cpf_funcionario.equals("")&&fone_funcionario.equals("")&&nome_funcionario.equals("")){ JOptionPane.showMessageDialog(null, "Preencha os campos"); }else if(!rep_senha_funcionario.equals(senha_funcionario)){ JOptionPane.showMessageDialog(null, "As senhas são diferentes"); //validar se as senhas são iguais }else if(endereco_funcionario.equals("")){ JOptionPane.showMessageDialog(null, "O campo Endereço é Obrigatório!"); } Funcionarios func = new Funcionarios(); func.setNome(nome_funcionario); func.setEmail(email_funcionario); func.setTelefone(fone_funcionario); func.setSenha(senha_funcionario); func.setEndereco(endereco_funcionario); func.setCpf_funcionario(cpf_funcionario); func.setCodigo_funcionario(codigoEditar); control.Funcionarios manutencao = new control.Funcionarios(); if(codigoEditar == 0){ manutencao.inserir(func); }else{ manutencao.alterar(func); } limparInformacoes(); tabbedPane.setSelectedIndex(1); } } Classe Dao
      package dao; public class Funcionarios { private int codigo_funcionario; private String cpf_funcionario; private String email; private String endereco; private String nome; private String senha; private String telefone; public int getCodigo_funcionario() { return codigo_funcionario; } public void setCodigo_funcionario(int codigo_funcionario) { this.codigo_funcionario = codigo_funcionario; } public String getCpf_funcionario() { return cpf_funcionario; } public void setCpf_funcionario(String cpf_funcionario) { this.cpf_funcionario = cpf_funcionario; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getEndereco() { return endereco; } public void setEndereco(String endereco) { this.endereco = endereco; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getSenha() { return senha; } public void setSenha(String senha) { this.senha = senha; } public String getTelefone() { return telefone; } public void setTelefone(String telefone) { this.telefone = telefone; } } Método de salvar do pacote control da classe funcionários
      public void inserir(dao.Funcionarios func) { if (func != null) { // Variável de conexão de DB java.sql.Connection conn = null; try { conn = ConnectDB.conexaoDB(); java.sql.PreparedStatement pstm; pstm = conn.prepareStatement(INSERT); pstm.setString(1, func.getCpf_funcionario()); pstm.setString(2, func.getEmail()); pstm.setString(3, func.getSenha()); pstm.setString(4, func.getNome()); pstm.setString(5, func.getEndereco()); pstm.setString(6, func.getTelefone()); // Envia para o banco de dados Boolean teste; teste = pstm.execute(); // Validar inserção no banco de dados if (!teste) { JOptionPane.showMessageDialog(null, "Funcionario cadastrado com sucesso!"); } else { JOptionPane.showMessageDialog(null, "Erro ao cadastrar o Funcionario!"); } // Fecha a conexão com o banco de dados ConnectDB.fecharConexao(conn); } catch (Exception e) { JOptionPane.showMessageDialog(null, "Erro ao cadastrar o Funcionario!"); } } } Método de alterar do pacote control da classe funcionários
      public void alterar(dao.Funcionarios func) { java.sql.Connection conn = null; try { conn = ConnectDB.conexaoDB(); //prepara a query java.sql.PreparedStatement pstm; pstm = conn.prepareStatement(UPDATE); pstm.setString(1, func.getCpf_funcionario()); pstm.setString(2, func.getEmail()); pstm.setString(3, func.getNome()); pstm.setString(4, func.getEndereco()); pstm.setString(5, func.getTelefone()); pstm.setString(6, func.getSenha()); pstm.setInt(7, func.getCodigo_funcionario()); // Envia para o banco de dados Boolean teste; teste = pstm.execute(); // Validar inserção no banco de dados if (!teste) { JOptionPane.showMessageDialog(null, "Funcionario alterado com sucesso!"); } else { JOptionPane.showMessageDialog(null, "Erro ao alterar o funcionario!"); } // Fecha a conexão com o banco de dados ConnectDB.fecharConexao(conn); } catch (SQLException e) { JOptionPane.showMessageDialog(null, "Erro ao alterar o funcionario!"+e.getMessage()); } } } Peço ajuda de vocês para corrigir o problema.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.