Erro de ResultSet, não está posicionado corretamente, talvez você precise chamar next.

18/06/2017

0

Estou com um problema de resultset assim como está citado acima. Estou desenvolvendo um sistema clinico em Java SE, para apresentação do meu tcc. Em um dos meus códigos estou tentando fazer um inner join entre tabelas, para pegar o código do paciente e retorna nos campos da tela para impressão. Mais não está retornando e fica dando esse erro, já conferi os nomes das tabelas e colunas e está tudo certo.
Desde já obrigado pela atenção, e aguardo respostas, quem puder me ajudar eu vou agradecer bastante.
Janailson

Janailson

Responder

Post mais votado

18/06/2017

Posta o código do método que tem o resultset que está lançando o erro.

Marcio Souza

Marcio Souza
Responder

Mais Posts

19/06/2017

Janailson

Boa noite.

public BeansAgenda buscarAgendaCodigo (int cod){
BeansAgenda agen = new BeansAgenda();

conectDB.conexao();
conectDB.executaSql("select *from agenda inner join pacientes on cod_pac_agenda=cod_paciente inner join medicos on cod_med_agenda=cod_medico where cod_agenda='"+cod+"'");
try {
conectDB.rs.first();
agen.setNomePacinte(conectDB.rs.getString("nome_paciente"));
agen.setNomeMedico(conectDB.rs.getString("nome_medico"));
agen.setObservacao(conectDB.rs.getString("observ_agenda"));
agen.setDtnascPaciente(conectDB.rs.getString("nascimento_paciente"));


} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro na busca do agendamento por codigo!"+ex);
}
return agen;

}


Esse é o codigo do metodo.
Responder

20/06/2017

Marcio Souza

Janilson, porque você decidiu usar o método first() do seu resultSet? Deveria usar next(). Faça assim:
public BeansAgenda buscarAgendaCodigo (int cod){
	BeansAgenda agen = new BeansAgenda();

	conectDB.conexao();
	ResultSet rs = conectDB.executaSql("select *from agenda inner join pacientes on cod_pac_agenda=cod_paciente inner join medicos on cod_med_agenda=cod_medico where cod_agenda='"+cod+"'");
	try {
	
		if (rs.next()) {
			agen.setNomePacinte(rs.getString("nome_paciente"));
			agen.setNomeMedico(rs.getString("nome_medico"));
			agen.setObservacao(rs.getString("observ_agenda"));
			agen.setDtnascPaciente(rs.getString("nascimento_paciente"));
		}

	} catch (SQLException ex) {
		JOptionPane.showMessageDialog(null, "Erro na busca do agendamento por codigo!"+ex);
	}
	return agen;
}

Uma dica. Se está usando Statement substitua por PreparedStatement que evita o SQLInjecton.
Responder

20/06/2017

Janailson

Boa tarde Ballem, desde já obrigado pela ajuda mais vou te alugar um pouco mais.


public class ConexaoBanco {
public Statement stm; // Prepara e realiza as pesquisas
public ResultSet rs; // Guarda as pesquisas realizadas
private String driver = "org.postgresql.Driver"; // Driver padrão do Postgresql
private String caminho = "jdbc:postgresql://localhost:5432/softclinic"; // Caminho de localização, porta e nome do BD
private String usuario = "postgres"; // Usuário padrão postgres
private String senha = "admin"; // Senha de acesso ao Banco
public Connection conDB; // Variavel de conexão

public void conexao(){ // Metodo de conexão com o banco de dados
try {
System.setProperty("jdbc.Drivers", driver);
conDB=DriverManager.getConnection(caminho, usuario, senha);
//JOptionPane.showMessageDialog(null, "A conexão com o Banco de Dados foi realizda!!");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Não foi possível efetuar a conexão:\\n"+ex.getMessage());
}
}

public void executaSql(String sql){
try {
stm = conDB.createStatement(rs.TYPE_SCROLL_INSENSITIVE,rs.CONCUR_READ_ONLY);
rs = stm.executeQuery(sql);
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro na execução do Sql:\\n"+ex.getMessage());
}
}

public void desconecta(){ // Metodo de incerramento de conexão com o banco de dados
try {
conDB.close();
//JOptionPane.showMessageDialog(null,"Sua conexão com o Banco de Dados foi finalizada com Sucesso");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Não foi possível finalizar sua conexão:\\n"+ex.getMessage());
}
}


Esse é o meu arquivo de conexão como seria, apenas trocar de metodo?
Responder

21/06/2017

Marcio Souza

No seu método executaSql() teria as seguintes mudanças:
	public void executaSql(String sql, Object... params) {//params recebe os parametros da consulta
	    try {
			pstm = conDB.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
			for (int i = 0; i < params.length; i++) {
                                pstm.setObject(i+1, params[i]); //adiciona os paramentros no pstm
                        }
			rs = pstm.executeQuery();
	    } catch (SQLException ex) {
	        	JOptionPane.showMessageDialog(null, "Erro na execução do Sql:\\\\n"+ex.getMessage());
	    }
	}


E no código que chama o executaSql():
conectDB.executaSql("select * from agenda inner join pacientes on cod_pac_agenda = cod_paciente inner join medicos on cod_med_agenda = cod_medico where cod_agenda = ?", cod);

Os parametros da consulta devem agora ser substituídos por um ponto de interrogação. Depois, coloque o paramentro como um argumento do método executaSql(). Se tiver mais paramentros em outra consulta, basta separa-los por virgula, obedecendo a ordem deles dentro da consulta, exemplo:
executaSql("select * from Pessoas where nome = ? and idade = ?", nome, idade)
Responder

22/06/2017

Janailson

Bom dia. Aquele primeiro código que você editou do ResultSet e mandou pra mim.
Ele tá dando um erro de "incompatible types void cannot be converted to ResultSet"
Responder

23/06/2017

Marcio Souza

Em qual linha está ocorrendo o erro, pode postar?
Responder

25/06/2017

Janailson

Boa tarde, desculpe a demora na postagem é que tava correndo com a parte teorica também do projeto.

ResultSet rs = conectDB.executaSql("select *from agenda inner join pacientes on cod_pac_agenda=cod_paciente inner join medicos on cod_med_agenda=cod_medico where cod_agenda='"+cod+"'");


É nessa parte do codigo que fica dando incompatibilidade
Responder

25/06/2017

Marcio Souza

Bem, então deve ser porque o método executaSql que não retorna um ResultSet.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar