Erro Before start of result

Essa é minha classe carro,

public class Carro {

    private int id;
    private String marca;
    private int ano;
    private String placa;
    private String modelo;
   private Cliente cliente;

Minha tabela Carro no WorkBench está com varias colunas, umas delas é uma chamada idCarro, que é a chave primaria
e está com auto increment.

Essa é a minha classe carro, você consegue ver que tem ali um private int id, que deveria ter o mesmo valor da chave idCarro que está no banco. Eu precisaria de um modo que sempre que eu adicionasse um Carro no banco, eu conseguisse fazer o long id ser o idCarro do WorkBench, as formas que eu tentei deram problema e nao achei nada na Interface PreparedStatement para resolver isso. Será que alguem poderia me dar alguma ajuda?

Essa é a classe CarroDAO, com o método adiciona,

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
public class CarroDAO {
	private Connection connection;
	
	public CarroDAO(){
		this.connection = new ConnectionFactory().getConnection();
	}

	public void adicionaCarro(Carro carro){

		try{
		
			
			String sql = "insert into carro " +
		             "(Marca,Ano,Placa,Modelo,Cliente_idCliente)" +
		             " values (?,?,?,?,?)";
			
			PreparedStatement stmt = connection.prepareStatement(sql);
			**PreparedStatement stmt2 = connection.prepareStatement("select idCarro from carro");
			
			
			stmt.setString(1, carro.getMarca());
			stmt.setInt(2, carro.getAno());
			stmt.setString(3, carro.getPlaca());
			stmt.setString(4, carro.getModelo());
			stmt.setObject(5, carro.getCliente().getCarroId());
			
			stmt.execute();
			
			
			
			
			**ResultSet rs = stmt2.executeQuery();
			**carro.setId(rs.getInt("idCarro"));
			
			
			stmt2.execute();
			stmt2.close();
			stmt.close();
			
			
		}catch(SQLException e){
	
			throw new RuntimeException(e);
	
		}
	}

Estou tendo o erro na parte do código que está com **, o que poderia estar errado?

Erro durante a execução ou antes? Qual o erro?

Executa a primeira parte do codigo que é inserir no banco, tudo que tem o stmt. ai quando ele vai executar a query do stmt2, ele da esse erro do result set. Eu quero que o id da classe carro do java seja igual ao idCarro na tabela do mysql, pra remover com mais facilidade. mas nao estou conseguindo.

Qual erro?

É o que ta no título do tópico.

O result set é como “um ponteiro” que aponta incialmente para um “vazio” antes do primeiro registo. Para fazer qualquer get (getInt neste caso) é necessário avançar o “ponteiro” para a primeira linha com um rs.next(). Cada vez que este método é invocado, avança uma linha e retorna true. Caso não existam mais linhas retorna false.

Se eu colocar um rs.next(). antes do carro.setID(), será que funciona?

Confesso que não olhei com atenção para o código

Se colocares o rs.next antes do carro.setId… vai devolver sempre o primeiro id que encontrar na Base de Dados (sem garantia de qualquer ordem). Como me parece que queres o id inserido, não precisas do select e deves obter o id do mesmo statement do insert:

    stmt.execute();

    ResultSet rs = stmt.getGeneratedKeys();
    rs.next();
    carro.setId(rs.getInt(1));

Essa parte do cogido que vc postou, deve ser colocado logo dps desse stmt.execute

Estava com o mesmo problema, graças a este post, o meu problema foi resolvido.

Segue o link
link

1 curtida

Caiu como uma luva! Obrigado ;D

1 curtida