Java método

4 respostas
java
J

Pessoal bom dia!
Gostaria de saber como eu faço o método atualizar. Estou desenvolvendo (tarefa da faculdade) aplicação em java jdbc, e não estou conseguindo desenvolver o método update (atualizar). Até tentei mas deu um erro de executeQuery neste método, segue o código até onde eu fiz. Mandei o main e o repositório. Quem puder me ajudar mais uma vez, agradeço pela atenção desde já!

package br.com.certidoes.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import br.com.certidoes.classes.Certidao;

public class RepositorioCertidoesBD implements RepositorioCertidoes{

	private String nomeDriver;
	private String urlConexao;
	private String usuarioConexao;
	private String senhaConexao;
	private boolean indDriverCarregado;
	
	private static final String MSG_FALHA_CARGA_DRIVER =
		"Nome do driver JDBC usado não corresponde a uma classe válida";
	private static final String MSG_ERRO_CONEXAO =
		"Erro ao obter conexão com o banco de dados";
	
	private static final String MSG_ERRO_ACESSO_BD =
		"Erro de acesso ao banco de dados";
	
	private static final String MSG_CERTIDAO_CADASTRADA =
		"Certidao já cadastrada";
	
	private static final String MSG_ID_NAO_ENCONTRADO =
		"ID não encontrado";
	
	private static final String MSG_ID_INVALIDO =
		"ID inválido";

	private static final String INSERT_CERTIDAO =
		"INSERT INTO certidao (id, nome, DiasEmissao, Orgao_Emissor_id) VALUES (?,?,?,?)";

	private static final String PROCURA_CERT=
		"SELECT id, nome, DiasEmissao, Orgao_Emissor_id FROM certidao WHERE id = ?";
	
	private static final String LISTA_CERT =
		"SELECT id, nome, DiasEmissao, Orgao_Emissor_id FROM certidao";
	
	private static final String DELETE_CERT =
		"DELETE FROM certidao WHERE id = ?";
	
	private static final String ATUALIZAR_CERT =
			"UPDATE certidao SET nome = ? WHERE id = ?";
	
	
	public RepositorioCertidoesBD(
			
			String pNomeDriver,
			String pUrlConexao,
			String pUsuarioConexao,
			String pSenhaConexao) {
		
		super();
		
		nomeDriver = pNomeDriver;
		urlConexao = pUrlConexao;
		usuarioConexao = pUsuarioConexao;
		senhaConexao = pSenhaConexao;
		indDriverCarregado = false;
	}

	private Connection getConexao() {

		if (!indDriverCarregado) {
			try {
				Class.forName(nomeDriver);
				indDriverCarregado = true;
			} catch (ClassNotFoundException e) {
				System.err.print(MSG_FALHA_CARGA_DRIVER);
			}
		}
		try {
			return DriverManager.getConnection(
					urlConexao,
					usuarioConexao,
					senhaConexao);
		} catch (SQLException e) {
			System.err.print(MSG_ERRO_CONEXAO);
			return null;
		}
	}

	public void inserir (Certidao c) {

		if (c != null) {
			Connection con = getConexao();
			PreparedStatement psCert = null;
			PreparedStatement psEnd = null;
			
			try {
				psCert = con.prepareStatement(INSERT_CERTIDAO);
				psCert.setInt(1, c.getId());
				psCert.setString(2, c.getNome());
				psCert.setString(3, c.getDiasEmissao());
				psCert.setInt(4, c.getOrgao_Emissor_id());
				
	
				psCert.executeUpdate();
				
			} catch (SQLException e) {
				System.err.print(e.getMessage());
				
			} finally {
				fechaRecursos(con, psCert, null);
				fechaRecursos(con, psEnd, null);
			}
		}
	}
	
		public Certidao atualizar(int id) {
			if (id != 0) {
				Connection con = getConexao();
				PreparedStatement ps = null;
				int rs = null;
				try {
					ps = con.prepareStatement(ATUALIZAR_CERT);
					ps.setInt(1, id);
//					rs = ps.executeQuery();
              		rs = ps.executeUpdate();
              		
					if (rs.next()) {
						int bdId = rs.getInt(1);
						String bdNome = rs.getString(2);
						String bdDiasEmissao = rs.getString(3);
						int bdOrgao_Emissor_id = rs.getInt(4);
						
			
						Certidao cert = new Certidao();
						cert.setId(bdId);
						cert.setNome(bdNome);
						cert.setDiasEmissao(bdDiasEmissao);
						cert.setOrgao_Emissor_id(bdOrgao_Emissor_id);
					
						
						
						return cert;
						
						
					} else {
						System.err.print(MSG_CERTIDAO_CADASTRADA);
					}
				} catch (SQLException e) {
					System.err.println(MSG_ERRO_ACESSO_BD);
					System.err.println(e.getMessage());
					
				} finally {
					fechaRecursos(con, ps, rs);
				}
			} 
			return null;
		}
		
	
	public Certidao procurar (int id) {
		if (id != 0) {
			Connection con = getConexao();
			PreparedStatement ps = null;
			ResultSet rs = null;
			try {
				ps = con.prepareStatement(PROCURA_CERT);
				ps.setInt(1, id);
				rs = ps.executeQuery();
				if (rs.next()) {
					int bdId = rs.getInt(1);
					String bdNome = rs.getString(2);
					String bdDiasEmissao = rs.getString(3);
					int bdOrgao_Emissor_id = rs.getInt(4);
					
		
					Certidao cert = new Certidao();
					cert.setId(bdId);
					cert.setNome(bdNome);
					cert.setDiasEmissao(bdDiasEmissao);
					cert.setOrgao_Emissor_id(bdOrgao_Emissor_id);
				
					
					
					return cert;
					
					
				} else {
					System.err.print(MSG_CERTIDAO_CADASTRADA);
				}
			} catch (SQLException e) {
				System.err.println(MSG_ERRO_ACESSO_BD);
				System.err.println(e.getMessage());
				
			} finally {
				fechaRecursos(con, ps, rs);
			}
		} 
		return null;
	}
	
	public ResultSet listar() {
			Connection con = getConexao();
			PreparedStatement ps = null;
			ResultSet rs = null;
			try {
				ps = con.prepareStatement(LISTA_CERT);
				rs = ps.executeQuery();
				if (rs.next()){
					return rs;
				}
			} catch (SQLException e) {
				System.err.println(MSG_ERRO_ACESSO_BD);
				System.err.println(e.getMessage());
			} 
		return rs;
	}



	
	public void remover(int id) {
	if (id != 0) {
		Connection con = getConexao();
		PreparedStatement ps = null;
		try {
			ps = con.prepareStatement(DELETE_CERT);
			ps.setInt(1, id);
			int rows = ps.executeUpdate();
			if (rows <= 0) {
				System.err.println("ID não encontrado");
			}
		} catch (SQLException e) {
			System.err.println(MSG_ID_NAO_ENCONTRADO);
			System.err.println(e.getMessage());
		} finally {
			fechaRecursos(con, ps, null);
		}
	} else {
		System.err.println(MSG_ID_INVALIDO);
	}
}

	private void fechaRecursos(
			Connection con,
			PreparedStatement ps,
			ResultSet rs) {

		try {
			if (rs != null)
				rs.close();
		} catch (Exception e) {
		}
		try {
			if (ps != null)
				ps.close();
		} catch (Exception e) {
		}
		try {
			if (con != null)
				con.close();
		} catch (Exception e) {
		
		
	}

	}
	}




`
`package br.com.certidoes.jdbc;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import br.com.certidoes.classes.Certidao;

public class TesteCertidoes {

//	@SuppressWarnings("deprecation")
	public static void main(String[] args) {
		Certidao c = new Certidao();
		c.setId(1);
		c.setNome("Licença de Operação do Conama");
		c.setDiasEmissao("4");
		c.setOrgao_Emissor_id(5);
		
	
		ConexionJDBC.obterInstancia().atualizar(1); 

//		ConexionJDBC.obterInstancia().inserir(c);
		ResultSet rs = ConexionJDBC.obterInstancia().listar();
		

		
		ResultSetMetaData mdata;
		try {
			mdata = rs.getMetaData();
			int colCount = mdata.getColumnCount();
			String[] colNames = new String[colCount];
			for (int i = 1; i <= colCount; i++) {
				colNames[i - 1] = mdata.getColumnName(i);
			}
			rs.beforeFirst();
			while (rs.next()) {
				String[] rowData = new String[colCount];
				for (int i = 1; i <= colCount; i++) {
					rowData[i - 1] = rs.getString(i);
					System.out.println(rowData[i - 1]);
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

4 Respostas

R

Não entendi porque você faz:

rs = ps.executeUpdate();

logo depois de ter setado só o int.

S

Olá abaixo tem um exemplo de um método que uso em uma aplicação que fiz e funciona normalmente, tente seguir este padrão

public void alterarCliente(Cliente cliente) throws SQLException, Exception {

Conexao co = new Conexao();
       
        String sql = " UPDATE CLIENTE  "
                + " SET "
                + " nome_cliente  = ?, "
                + " nome_apelido_cliente  = ?, "
                + " in_pessoa = ?, "
                + " cpf_cliente  = ?, "
                + " rg_cliente = ?, "
                + " cnpj_cliente  = ?, "
                + " insc_est_cliente  = ?, "
                + " data_nasc_cliente  = ?, "
                + " endereco_cliente  = ?,"
                + " numero_cliente =?,"
                + " complemento= ?, "
                + " bairro_cliente  = ?, "
                + " cidade_cliente  = ?, "
                + " estado_cliente = ?, "
                + " cep_cliente = ?, "
                + " telefone_cliente = ?, "
                + " celular_cliente = ?, "
                + " celular_cliente2= ?,"
                + " operadora_cliente =?, "
                + " operadora_cliente2 =? ,"
                + " email_cliente = ?, "
                + " last_update_date  = ? "
                + " WHERE id_cliente = ? ";
        co.conectar();

        PreparedStatement stmt = co.con.prepareStatement(sql);

        stmt.setString(1, cliente.getNomeCliente().toUpperCase());
        stmt.setString(2, cliente.getNomeApelidoCliente().toUpperCase());
        stmt.setString(3, cliente.getInPessoa().toUpperCase());
        stmt.setString(4, cliente.getCpfCliente().toUpperCase());
        stmt.setString(5, cliente.getRgCliente().toUpperCase());
        stmt.setString(6, cliente.getCnpjCliente().toUpperCase());
        stmt.setString(7, cliente.getInscEstCliente().toUpperCase());
        stmt.setDate(8, Util.sqlToUtil(cliente.getDataNasCliente())); //usando o metodo sqlToUtil para converter a data
        stmt.setString(9, cliente.getEnderecoCliente().toUpperCase());
        stmt.setString(10, cliente.getNumeroCliente().toUpperCase());
        stmt.setString(11, cliente.getComplemento().toUpperCase());
        stmt.setString(12, cliente.getBairroCliente().toUpperCase());
        stmt.setString(13, cliente.getCidadeCliente().toUpperCase());
        stmt.setString(14, cliente.getEstadoCliente().toUpperCase());
        stmt.setString(15, cliente.getCepCliente().toUpperCase());
        stmt.setString(16, cliente.getTelefoneCliente().toUpperCase());
        stmt.setString(17, cliente.getCelularCliente().toUpperCase());
        stmt.setString(18, cliente.getOperadoraCliente().toUpperCase());
        stmt.setString(19, cliente.getCelularCliente2().toUpperCase());
        stmt.setString(20, cliente.getOperadoraCliente2().toUpperCase());
        stmt.setString(21, cliente.getEmailCliente().toUpperCase());
        stmt.setTimestamp(22, cliente.getDataAtualizacao());
        stmt.setLong(23, cliente.getIdCliente());
 
         System.out.println(stmt);
        stmt.executeUpdate();
        stmt.close();

      
        co.fecharConexao();
    }
J

Obrigada vou tentar!

I

E também, isola em uma factory sua classe de conexão, não é responsabilidade do seu repositorio saber se o driver foi carregado ou nao.
No seu método de fechar recursos, vc pode usar sobrecarga pra não ficar passando nulo.
E quando der exception para obter a conexão, lança uma runtime.
Atualmente se der erro na hora que vc chama o getConnection do DriverManager, vc vai tomar um nullpointer tentando acessar o prepared statement, já que retornou null no getConexao.

Criado 18 de novembro de 2016
Ultima resposta 18 de nov. de 2016
Respostas 4
Participantes 4