Executando verificação de segurança...
2

ResultSet dá algum erro [JAVA/SQL]

Fala pessoal, tô aprendendo sobre sql e estou criando um CRUD usando a Interface Gráfica do Java.

Nesse ponto, está dando um erro. Ao debugar, ele para de executar exatamente na linha "rs.first();" e então pula para o catch e retorna null.


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import conexao.Conexao;
import eclipse.Curso;

public class CursoDAO {
	
	private Conexao conexao;
	private Connection conn;
	
	public CursoDAO() { //DATA ACESS OBJECT - Objeto de Acesso as Dados
		
		this.conexao = new Conexao(); //Instanciou a classe para ter acesso ao método de gerar a conexao
		this.conn = this.conexao.getConexao(); //Jogou a criacao para a variavel conn.
	}
	
	//Inserir um novo curso dentro da tabela
	public void inserir(Curso curso) {
		
		String sql = "INSERT INTO cursos (nomecurso, nivel, duracao) VALUES "
				+ "(?, ?, ?)"; //Essas interrogações chamam-se parâmetros e servem para prevenir "sql inject", ou/e códigos maliciosos
		
		try {
		//PreparedStatement deve estar dentro de um trycatch
		PreparedStatement stmt = this.conn.prepareStatement(sql); //Esse método já recebe o código sql que queremos executar
		stmt.setString(1, curso.getNomecurso()); //Setando os parametros que serão passados para o banco
		stmt.setString(2, curso.getNivel());
		stmt.setInt(3, curso.getDuracao());
		stmt.execute(); //Executando o comando dentro do mysql
		
		} catch (Exception e) {
			System.out.println("Erro ao inserir curso:" + e.getMessage());
		}
	}
	
	public Curso getCurso(int id) {
		
		String sql = "SELECT * FROM cursos WHERE id = ?";
		
		try {
			
			PreparedStatement stmt = this.conn.prepareStatement(sql);
			stmt.setInt(1, id);
			ResultSet rs = stmt.executeQuery(); //Retorna os dados do tipo ResultSet
			Curso curso = new Curso();
			
			//Primeiramente posiciona o ResultSet na primeira posição
   ACONTECE O ERRO>>    rs.first(); 
			//Colocar as informaçoes para dentro da variavel curso
			curso.setId(id);
			curso.setNomecurso(rs.getString("nomecurso"));
			curso.setNivel(rs.getString("nivel"));
			curso.setDuracao(rs.getInt("duracao"));
			
			return curso;
			
		} catch (Exception e) {
			
			return null; //Deixa para o formulário dar o retorno da mensagem
		}
		
		
	}

}

O primeiro método, inserir curso, está funcionando perfeitamente.

Fiz o teste fora da interface gráfica, criei outra classe e deu o mesmo erro. Curso == null.

Se puderem me dar uma ajuda, agradeço.

Carregando publicação patrocinada...
3

Não é garantido que há dados na tabela, também não é garantido que todos os dados irão atender a condição WHERE.
Antes de ler o ResultSet tem que verificar com o método .next()

if( rs.next() )
{
    curso.setId(id);
    curso.setNomecurso(rs.getString("nomecurso"));
    curso.setNivel(rs.getString("nivel"));
    curso.setDuracao(rs.getInt("duracao"));
} //end if

Quando tiver a necessidade de percorrer todos os registros

while( rs.next() )
{
} //end while

Outra coisa, você não está fechando o PreparedStatement com o seu método .close() isso pode drenar recursos com o tempo.

1