Eita complicação... [RESOLVIDO]

7 respostas
ThomasCouto

Ae amigos, como vão ? Estou com um problema nesse método que faz a materialização do objeto... Ou seja, ele pega as informações no BD e cria o objeto... Eu tenho uma classe que se chama ENTRADA (abstrata) e 3 classes filhas: MANUTENCAO, GARANTIA E REVISAO... O método não funciona ele sempre entra na exception de "Código não encontrado"... Se alguem poder me dar uma dica eu fico muito agradecido... Se tiver, também, como deixar esse código mais enxuto, pode me dar alguma dica ?

public Entrada achaCodigo(int codigo) throws NaoEncontradoException {

        String clausula = "select * from oficina where codigo = " + "\'" + codigo + "\'";
        String cod;
        try {
            pstmt = con.prepareStatement(clausula);
            rs = pstmt.executeQuery();
            if (rs.next()) {
                cod = rs.getString("tipo");

                if (cod.equals("Manutencao"))
                    e = new Manutencao(rs.getInt("codigo"), rs
                            .getString("codigo"), rs.getString("placa"), rs
                            .getString("telefone"), rs
                            .getString("descricaoPecas"), rs
                            .getString("descricaoServicos"), rs
                            .getString("descricaoProblema"), rs
                            .getString("dataSaida"), rs
                            .getString("dataPrevista"), rs
                            .getString("dataEntrada"), rs
                            .getString("dataInicio"), rs
                            .getDouble("valorPecas"), rs
                            .getDouble("valorServicos"), rs
                            .getInt("qtdPecas"), rs
                            .getInt("qtdItens"));
                else if (cod.equals("Garantia"))
                    e = new Garantia(rs.getInt("codigo"), rs
                            .getString("codigo"), rs.getString("placa"), rs
                            .getString("telefone"), rs
                            .getString("descricaoPecas"), rs
                            .getString("descricaoServicos"), rs
                            .getString("descricaoProblema"), rs
                            .getString("dataSaida"), rs
                            .getString("dataPrevista"), rs
                            .getString("dataEntrada"), rs
                            .getString("dataInicio"), rs
                            .getDouble("valorPecas"), rs
                            .getDouble("valorServicos"), rs
                            .getInt("qtdPecas"), rs
                            .getInt("qtdItens"));
                else
                    e = new Revisao(rs.getInt("codigo"),
                            rs.getString("codigo"), rs.getString("placa"), rs
                                    .getString("telefone"), rs
                                    .getString("descricaoPecas"), rs
                                    .getString("descricaoServicos"), rs
                                    .getString("descricaoProblema"), rs
                                    .getString("dataSaida"), rs
                                    .getString("dataPrevista"), rs
                                    .getString("dataEntrada"), rs
                                    .getString("dataInicio"), rs
                                    .getDouble("valorPecas"), rs
                                    .getDouble("valorServicos"), rs
                                    .getInt("qtdPecas"), rs
                                    .getInt("qtdItens"));
            }
        } catch (SQLException err) {
            err.getStackTrace();
        }

        return e;
    }
NaoEncontradoException: Codigo nao encontrado.
	at OficinaSQL.achaCodigo(OficinaSQL.java:19)
	at InterOficina.<init>(InterOficina.java:32)
	at InterOficina.main(InterOficina.java:13)

7 Respostas

foia

de novo,

err.getStackTrace();
     err.printStackTrace();

e posta o erro.

ThomasCouto

foia:
de novo,

err.getStackTrace();
     err.printStackTrace();

e posta o erro.

java.sql.SQLException: No data found

at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7139)

at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3908)

at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5699)

at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:353)

at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:410)

at AccessOficinaDAO.achaCodigo(AccessOficinaDAO.java:70)

at OficinaSQL.achaCodigo(OficinaSQL.java:17)

at InterOficina.(InterOficina.java:32)

at InterOficina.main(InterOficina.java:13)

NaoEncontradoException: Codigo nao encontrado.

at OficinaSQL.achaCodigo(OficinaSQL.java:20)

at InterOficina.(InterOficina.java:32)

at InterOficina.main(InterOficina.java:13)
foia

hmm. se o db for access vc não pode fazer:

rs.getInt("codigo"), 
   rs.getString("codigo"),

ou seja, dar get 2 vezes no mesmo campo da tabela.

Tenta comentar uma dessas linhas ou usar:

con.prepareStatement(clausula, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

foia

ThomasCouto

Perfeito cara, era aquilo mesmo , brigadao!

Agora apareceu outro erro no meu pacote que converte datas.. A data do access está configurada assim: dd/mm/aaaa, não entendi o motivo do erro...

Exception in thread "main" java.lang.NumberFormatException: For input string: "2005-05-14 00:00:00"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
	at java.lang.Integer.parseInt(Integer.java:456)
	at java.lang.Integer.valueOf(Integer.java:553)
	at util.Util.string2Date(Util.java:18)
	at Revisao.<init>(Revisao.java:37)
	at AccessOficinaDAO.achaCodigo(AccessOficinaDAO.java:71)
	at OficinaSQL.achaCodigo(OficinaSQL.java:17)
	at InterOficina.<init>(InterOficina.java:32)
	at InterOficina.main(InterOficina.java:13)
public static long string2Date(String data) {

        StringTokenizer st = new StringTokenizer(data, "/");

        Integer dia = Integer.valueOf(st.nextToken());
        Integer mes = Integer.valueOf(st.nextToken());
        Integer ano = Integer.valueOf(st.nextToken());

        Calendar k = new GregorianCalendar(ano.intValue(), mes.intValue() - 1,
                dia.intValue());
        return k.getTimeInMillis();
    }
foia

Tarrrde,

A data está no formato "2005-05-14 00:00:00", então o teu metodo string2Date está errado. Eu usaria SimpleDateFormat

http://www.javaalmanac.com/egs/java.text/ParseDate.html
http://java.sun.com/j2se/1.5.0/docs/api/index.html

Flw me !!

ThomasCouto

foia:
Tarrrde,

A data está no formato "2005-05-14 00:00:00", então o teu metodo string2Date está errado. Eu usaria SimpleDateFormat [url]http://www.javaalmanac.com/egs/java.text/ParseDate.html[/url]

Flw me !!

valeu grande, vou dar um jeito aqui !! pra nao te enxer de peguntas ehehehe falow

ThomasCouto

está funcionando agora muiiitissimo grato

Criado 14 de maio de 2005
Ultima resposta 14 de mai. de 2005
Respostas 7
Participantes 2