Eita complicação... [RESOLVIDO]

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 ?

[code]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;
}[/code]

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

de novo,

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

e posta o erro.

[quote=foia]de novo,

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

e posta o erro.
[/quote]

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)

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

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)

[code]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();
}[/code]

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 !!

[quote=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 !![/quote]

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

está funcionando agora muiiitissimo grato