Trazer max + 1 da tabela

5 respostas
M

Pessoal estou chamando o método add abaixo, que este chama returnTipoDocID, porém dá o erro:

java.sql.SQLException

Por que será que acontece isto?

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package mtsys.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import mtsys.db.DatabaseUtil;
import mtsys.db.TiposDocumentos;

/**
 *
 * @author Marlon Tiedt
 */
public class TiposDocumentosDAO extends DatabaseUtil{
    
    public TiposDocumentosDAO(){
        super();
    }


    public boolean add(TiposDocumentos td) throws ClassNotFoundException, SQLException {
        PreparedStatement ps = getPreparedStatement("INSERT INTO TiposDocumentos (TipoID, Descricao) values (?, ?)");

        ps.setInt(1, returnTipoDocID());
        ps.setString(2, td.getDescricao());
        return ps.execute();
    }

    public boolean set(TiposDocumentos td) throws ClassNotFoundException, SQLException {
        PreparedStatement ps = getPreparedStatement("UPDATE TiposDocumentos set Descricao = ? where TipoID = ?");

        ps.setString(1, td.getDescricao());
        ps.setInt(2, td.getTipoID());

        return ps.execute();
    }

    public boolean  delete(TiposDocumentos td) throws ClassNotFoundException, SQLException {
        PreparedStatement ps = getPreparedStatement("DELETE FROM TiposDocumentos where TipoID = ?");

        ps.setInt(1, td.getTipoID());
        return ps.execute();
    }

    public int returnTipoDocID() throws SQLException, ClassNotFoundException {
        ResultSet rs = getStatement().executeQuery("SELECT max(TipoID) + 1 as TipoID from TiposDocumentos");
        
        return rs.getInt(1);
    }

    public List<TiposDocumentos> getAllTiposDocumentos() throws SQLException, ClassNotFoundException {
        List<TiposDocumentos> toReturn = new LinkedList<TiposDocumentos>();
        ResultSet rs = getStatement().executeQuery("SELECT * FROM TiposDocumentos");

        while (rs.next()){
            TiposDocumentos td = new TiposDocumentos();

            td.setTipoID(rs.getInt("TipoID"));
            td.setDescricao(rs.getString("Descricao"));
            toReturn.add(td);
        }
        return toReturn;
    }

}

5 Respostas

davidbuzatto

Você está querendo obter o id do último registro salvo não é?
Dê uma olhada aqui: http://download.oracle.com/javase/6/docs/api/java/sql/Statement.html#getGeneratedKeys()

O método getGeneratedKeys de Statement retorna um ResultSet com o último valor gerado em campos que tem como propriedade geração automática (como os auto-incrementos).

[]´s

moacirjava

Você já viu qual o valor de ResultSet rs = getStatement() no momento em que você chama o seu método returnTipoDocID?

M

Consegui fazer funcionar desta maneira.

int toReturn = 0;
        ResultSet rs = getStatement().executeQuery("SELECT max(TipoID) + 1 as TipoID from TiposDocumentos");

        while (rs.next()){
            toReturn = rs.getInt("TipoID");
        }
        return toReturn;

Não sei por que tive que colocar o while.

[]s

Marlon

edu_merckx

Já tive esse problema e no meu entendimento o erro ocorre pq ao tentar atribuir rs.getInt() em toReturn nenhum item do ResultSet foi selecionado…

No meu caso o Rs também sempre retorna uma /nenhuma linha e ao invés de usar rs.next() dentro de um while eu uso rs.first(), tipo:

rs.first();
toReturn = rs.getInt("TipoID");

Até mais…

moacirjava

que doido…

Criado 11 de setembro de 2010
Ultima resposta 12 de set. de 2010
Respostas 5
Participantes 4