Buscar dados específicos no postgre.[RESOLVIDO]

4 respostas
harlequinn

Boa tarde galera,
bom, sou novo no java, e por isso estou com uma dúvida e não consigo resolvê-lo.
A seguir o código da minha classe DAO.

package DB;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import Classes.Empresa;

public class EmpresaDAO {

	private Connection con;
	
	public EmpresaDAO(){
		try {

			con = DriverManager.getConnection(
					"jdbc:postgresql://localhost:5432/WebEstoque", "postgres",
					"122222");

		} catch (SQLException e) {

			throw new RuntimeException(e);

		}
		
	}

	public void adicionar(Empresa empresa){
		
		String sql = "insert into empresa (nom_empresa,nom_responsavel,cnpj,rg_responsavel,endereco,cep,complemento," +
				"bairro,cidade,sigla_uf,ddd_empresa,telefone_empresa,email_empresa,pagina_web_empresa," +
				"nom_fornecedor,ddd_fornecedor,celular_fornecedor) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
				
		try {
			// prepared statement para inserção
			PreparedStatement stmt = con.prepareStatement(sql);
			// seta os valores
			
			stmt.setString(1,empresa.getNomeEmpresa());	
			stmt.setString(2,empresa.getNomeResponsavel());
			stmt.setLong(3,empresa.getCnpj());
			stmt.setInt(4,empresa.getRgResponsavel());
			stmt.setString(5,empresa.getEnderecoEmpresa());
			stmt.setInt(6,empresa.getCepEmpresa());
			stmt.setString(7,empresa.getComplementoEmpresa());
			stmt.setString(8,empresa.getBairroEmpresa());
			stmt.setString(9,empresa.getCidadeEmpresa());
			stmt.setString(10,empresa.getUfEmpresa());
			stmt.setInt(11,empresa.getDddEmpresa());
			stmt.setInt(12, empresa.getTelefoneEmpresa());
			stmt.setString(13,empresa.getEmailEmpresa());
			stmt.setString(14,empresa.getPaginaWeb());
			
			stmt.setString(15,empresa.getNomeFornecedor());
			stmt.setInt(16,empresa.getDddFornecedor());
			stmt.setInt(17,empresa.getCelularFornecedor());
	
			stmt.execute();
			stmt.close();
		} catch (SQLException e) {

			throw new RuntimeException(e);
			
		} finally {

			try {

				con.close();

			} catch (SQLException e) {

				e.printStackTrace();

			}
		}
	}
	public void alterar(Empresa empresa){
		
		String sql = "update empresa set nom_empresa=?,nom_responsavel=?,cnpj=?,rg_responsavel=?,endereco=?,cep=?,complemento=?," +
				"bairro=?,cidade=?,sigla_uf=?,ddd_empresa=?,telefone_empresa=?,email_empresa=?,pagina_web_empresa=?," +
				"nom_fornecedor=?,ddd_fornecedor=?,celular_fornecedor=? where num_empresa = ?";

		try{
			
			// prepared statement para inserção
			PreparedStatement stmt = con.prepareStatement(sql);
			// seta os valores
			stmt.setString(1,empresa.getNomeEmpresa());	
			stmt.setString(2,empresa.getNomeResponsavel());
			stmt.setLong(3,empresa.getCnpj());
			stmt.setInt(4,empresa.getRgResponsavel());
			stmt.setString(5,empresa.getEnderecoEmpresa());
			stmt.setInt(6,empresa.getCepEmpresa());
			stmt.setString(7,empresa.getComplementoEmpresa());
			stmt.setString(8,empresa.getBairroEmpresa());
			stmt.setString(9,empresa.getCidadeEmpresa());
			stmt.setString(10,empresa.getUfEmpresa());
			stmt.setInt(11,empresa.getDddEmpresa());
			stmt.setInt(12, empresa.getTelefoneEmpresa());
			stmt.setString(13,empresa.getEmailEmpresa());
			stmt.setString(14,empresa.getPaginaWeb());
			stmt.setString(15,empresa.getNomeFornecedor());
			stmt.setInt(16,empresa.getDddFornecedor());
			stmt.setInt(17,empresa.getCelularFornecedor());
			stmt.setInt(18,empresa.getNumEmpresa());

			stmt.execute();
			stmt.close();
		
		} catch (SQLException e) {

			throw new RuntimeException(e);
			
		}finally{
			
			try {

				con.close();

			} catch (SQLException e) {

				e.printStackTrace();

			}
			
		}
		
	}
	public void excluir(Empresa empresa){
		
		String sql = "delete from empresa where num_empresa = ?";
		
		try{
			
			// prepared statement para inserção
			PreparedStatement stmt = con.prepareStatement(sql);
			// seta os valores
			stmt.setInt(1, empresa.getNumEmpresa());

			stmt.execute();
			stmt.close();
			
		} catch (SQLException e) {

			throw new RuntimeException(e);
			
		}finally{
			
			try {

				con.close();

			} catch (SQLException e) {

				e.printStackTrace();

			}
			
		}
		
	}
	
	public List<Empresa> pesquisar(){
		Empresa empresa = new Empresa();
		String sql  = "select * from empresa where num_empresa = ?";
				
		try {
			PreparedStatement stmt = con.prepareStatement(sql);
			stmt.setInt(1, empresa.getNumEmpresa());
			ResultSet rs = stmt.executeQuery();
			
			while(rs.next()){
				
				empresa.setNomeEmpresa(rs.getString("nom_empresa"));
				empresa.setNomeResponsavel(rs.getString("nom_responsavel"));
				empresa.setCnpj(rs.getLong("cnpj"));
				empresa.setRgResponsavel(rs.getInt("rg_responsavel"));
				empresa.setEnderecoEmpresa(rs.getString("endereco"));
				empresa.setCepEmpresa(rs.getInt("cep"));
				empresa.setComplementoEmpresa(rs.getString("complemento"));
				empresa.setBairroEmpresa(rs.getString("bairro"));
				empresa.setCidadeEmpresa(rs.getString("cidade"));
				empresa.setDddEmpresa(rs.getInt("ddd_empresa"));
				empresa.setTelefoneEmpresa(rs.getInt("telefone_empresa"));
				empresa.setUfEmpresa(rs.getString("sigla_uf"));
				empresa.setEmailEmpresa(rs.getString("email_empresa"));
				empresa.setPaginaWeb(rs.getString("pagina_web_empresa"));
				
				empresa.setNomeFornecedor(rs.getString("nom_fornecedor"));
				empresa.setDddFornecedor(rs.getInt("ddd_fornecedor"));
				empresa.setCelularFornecedor(rs.getInt("celular_fornecedor"));
				
			}	
			List<Empresa> listaContato = new ArrayList<Empresa>();
			listaContato.add(empresa);
			
			rs.close();
			stmt.close();
			return listaContato;
		
		} catch (SQLException e) {

			throw new RuntimeException(e);
			
		}finally{
				
			try {
	
				con.close();
	
			} catch (SQLException e) {
	
				e.printStackTrace();
	
			}
				
		}
		
	}
	
}

Na linha 169, eu passo o comando SQL pedindo apenas a linha que eu quero, e na 173 é onde eu especifico essa linha.
Entretanto, quando eu faço essa pesquisa, são retornados valores nulos.
Alguém saberia me apontar o erro?
Valeu! =]

4 Respostas

fabiomedeirosf

Seguinte:

public List<Empresa> pesquisar(){  
         Empresa empresa = new Empresa();  
         String sql  = "select * from empresa where num_empresa = ?";  
                   
         try {  
             PreparedStatement stmt = con.prepareStatement(sql);  
             stmt.setInt(1, empresa.getNumEmpresa());  
             ResultSet rs = stmt.executeQuery();

Você cria um objeto de empresa ( Empresa empresa = new Empresa(); )

e no momento de passar o id da empresa que deseja obter, você fez assim:

stmt.setInt(1, empresa.getNumEmpresa());

como você criou o objeto e não setou nenhum valor, logo, o id que está sendo passando no momento de
construção da sintaxe SQL é vazio, logo, não consegue obter nenhum resultado.

sugiro:

//como está obtendo por id, logo deverá vir apenas um registro, pois o campo deverá ser pk no banco
//entao nao ha necessidade de se retornar uma lista.
public Empresa obterEmpresaPorId(Long idEmpresa){  
         Empresa empresaObtida = new Empresa();
         String sql  = "select * from empresa where num_empresa = ?";  
                   
         try {  
             PreparedStatement stmt = con.prepareStatement(sql);  
             stmt.setInt(1,idEmpresa);  
             ResultSet rs = stmt.executeQuery();

Ou seja, passe como parâmetro o id desejado.

harlequinn

Mais então fabiomedeirosf, o atributo num_empresa, está na minha classe javabens.
Tipo, eu passo o número que eu quero na minha página jsp, a servlet capitura os valores e passa para a javabens, entretanto, quando chega na minha classe DAO, ela simplismente não captura o valor que está em num_empresa.
Agora se eu faço desse jeito…

...
public List<Funcionario> pesquisar(){
		Funcionario funcionario = new Funcionario();
		String sql  = "select * from funcionario where num_funcionarios = 2";
...

ou seja, passando a linha que eu quero, sem pegar o valor que está na minha javabens, ela funciona normalmente.
Entretanto, se eu pedir para imprimir o valor que está no atributo num_empresa, vai imprimir o valor que eu digitei na minha jsp.
Ao meu ver, parece que nesse trecho…

try {
			PreparedStatement stmt = con.prepareStatement(sql);
			stmt.setInt(1, funcionario.getNumFuncionario());
			ResultSet rs = stmt.executeQuery();

quando eu seto a linha que eu quero para o banco, ela simplismente não captura esse valor, imprimindo apenas valores nulos para mim.
Porém, nos métodos excluir e alterar, o valor contido no método funcionario.getNumFuncionario() é passado normalmente.

pmlm
harlequinn

Ah! Valeu pmlm! Entendi agora!
Bom valeu pela solução, agora funcionou aqui.
E muito obrigado fabiomedeirosf!
Abraço a todos.

Criado 14 de novembro de 2010
Ultima resposta 15 de nov. de 2010
Respostas 4
Participantes 3