Problemas com o método SELECT em JDBC

7 respostas
arthurgon

Olá gente;

Estou com problemas para vizualizar os campos da tabela no console.
Tenho tres chaves primarias...que essas aparecem de boa...mas os demais atributos não estão aparecendo.
Alguem poderia me ajudar? Eles me retornam um valo NULL.
Este é o Main:

public static void main(String[] args) {
		
		
		
		TurnoVO turnoVO = new TurnoVO();
		
                //PRIMARY KEYs
               turnoVO.setEmpresa(1);
		turnoVO.setFilial(300);
		turnoVO.setCodigo(4);
			
		TurnoDAO turnoDAO = new TurnoDAO();
		
		try {
			
			turnoDAO.selecionar(turnoVO);
			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println("Selecionado com sucesso!!");
		System.out.println("Empresa:"+ turnoVO.getEmpresa());
		System.out.println("Filial:" + turnoVO.getFilial());
		System.out.println("Codigo do Turno:"+ turnoVO.getCodigo());
		System.out.println("Descricao do Turno:"+ turnoVO.getDescricao());
		System.out.println("Horario de Entrada:"+ turnoVO.getHoraEntrada());
		System.out.println("Horario de Saida:"+ turnoVO.getHoraSaida());
		


	}
Se alguem puder me ajudar.... Obrigado.

7 Respostas

W

:?: Como você está fazendo o select?

T

tem como vc colocar o conteúdo do metodo selecionar do turnoDAO.

arthurgon

O SELECT to fazendo dessa forma:

public TurnoDAO(Connection connection) {
		super(connection);
		
		StringBuffer stringBuffer = new StringBuffer();

if(SELECT == null){
			stringBuffer.delete(0, stringBuffer.length());
			stringBuffer.append("select * from TUR_RPT ");
			stringBuffer.append("where CD_EMPGCB = ? AND ");
			stringBuffer.append(" CD_FIL = ? AND ");
			stringBuffer.append(" CD_TURRPT = ? ");
			SELECT = stringBuffer.toString();
		}
		
	}

public TurnoVO selecionar(TurnoVO turnoVO) throws SQLException{
		PreparedStatement preparedStatement = null;
		Connection conn = null;
		ResultSet rs = null;
		
		try{
			conn = getConnection();
			
			preparedStatement = conn.prepareStatement(SELECT);
			
			int index = 1;
			preparedStatement.setInt(index++, turnoVO.getEmpresa());
			preparedStatement.setInt(index++, turnoVO.getFilial());
			preparedStatement.setInt(index++, turnoVO.getCodigo());
			
			rs = preparedStatement.executeQuery();
			
			if(rs.next()){
				turnoVO = new TurnoVO();
				
				turnoVO.setEmpresa(rs.getInt("CD_EMPGCB"));
				turnoVO.setFilial(rs.getInt("CD_FIL"));
				turnoVO.setCodigo(rs.getInt("CD_TURRPT"));
				turnoVO.setDescricao(rs.getString("DS_TURRPT"));
				turnoVO.setHoraEntrada(sqlTimeTOutilDate(rs.getTime("HR_TURRPT_ENT")));
				turnoVO.setHoraSaida(sqlTimeTOutilDate(rs.getTime("HR_TURRPT_SAI")));
				
				return turnoVO;
			}else{
				return null;
			}
		} finally {
			close(null, preparedStatement, conn);
		}
	}
Deveria retornar os valores dos demais campos não é? Mas só retorna NULL nos campos que não são PRIMAY KEY. Obrigado.
T

Amigo, não use SELECT * em queries - explicite todos os campos que você espera obter.
É que se você fizer isso, é mais fácil descobrir se houve algum problema do tipo “eu usei uma string de conexão e estava apontando para uma base errada, onde as tabelas têm o mesmo nome mas não os mesmos campos” ou “eu sou descuidado e escrevi errado os nomes dos campos” ou “o FDP do DBA mudou os nomes das colunas e não me avisou”.
Eu sei que dá trabalho, mas é melhor você descobrir o problema que deixar ele acontecer silenciosamente.

PadrE

Uma dica eh colocar um

System.out.println(stringBuffer.toString())

antes do execute, assim vc pode pegar esse SELECT, ir no banco e fazer o mesmo… ai vai ver se tem informação na tabela ou não.

B

Já que o seleciona retorna um turnoVO, que tal fazer um:

turnoVO = turnoDAO.selecionar(turnoVO);

Só tome cuidado que ele tb retorna um null caso não encontrar nada na base, e sem tratamento isso pode levar à um NPE.

arthurgon

SUCESSO!!!

Valeu amigão…

Criado 2 de junho de 2008
Ultima resposta 2 de jun. de 2008
Respostas 7
Participantes 6