SQL + Connection

19 respostas
ricardocomp

Olá pessoal,
eu gostaria de pedir uma opinão
e uma ajuda para vocês, pois estou
com muitas dúvidas na Injeção de Depedência
de Construtores usando Connection

SolicitacaoServico solicitacao = new SolicitacaoServico();

            //Crio uma conexão que será usada em cada construtor das minhas entidades.
            Connection conn = ConnectionFactory.getConnection();
            //usa o conn
            ProdutorDao produtorDao = new ProdutorDao(conn);
            solicitacao.setProdutor(produtorDao.procurarProdutor(1));
            //utiliza a mesma conexão
            TecnicoDao tecnicoDao = new TecnicoDao(conn);
            solicitacao.setTecnico(tecnicoDao.procurarTecnico(4));
            solicitacao.setNome("solic50");

            Calendar cal1 = Calendar.getInstance();
            String data = cal1.get(Calendar.YEAR) + "/" +
            (cal1.get(Calendar.MONTH)+1) + "/" + cal1.get(Calendar.DATE);
            solicitacao.setData(data);

            Calendar cal2 = Calendar.getInstance();
            String horario = cal2.get(Calendar.HOUR_OF_DAY) + ":" +
            cal2.get(Calendar.MINUTE) + ":" + cal2.get(Calendar.SECOND);
            solicitacao.setHora(horario);

            solicitacao.setNumeroAmostra(7); 
            //utiliza a mesma conexão
            SolicitacaoServicoDao solicitacaoDao = new SolicitacaoServicoDao(conn);
            solicitacaoDao.salvarSolicitacaoServico(solicitacao);
            conn.close();
            System.out.println("Solicitação Cadastrada com Sucesso!");

Mas toda hora aparece a seguinte Exception:

Exception in thread "main" java.lang.NoClassDefFoundError: dao/SolicitacaoServicoDao
        at dao.teste.SolicitacaoServicoTeste.cadastro(SolicitacaoServicoTeste.java:51)
        at dao.teste.SolicitacaoServicoTeste.main(SolicitacaoServicoTeste.java:20)
Caused by: java.lang.ClassNotFoundException: dao.SolicitacaoServicoDao
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        ... 2 more
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Eu posso usar uma conexão apenas do jeito que eu
estou fazendo?

Será que alguém pode me dar uma ajuda?

[]'s.

19 Respostas

xjunior
Exception in thread "main" java.lang.NoClassDefFoundError: dao/SolicitacaoServicoDao

Posta a classe completa aqui pra gente verificar (SolicitacaoServicoDao), e posta seu factory para complementar, ok?

xjunior

O que vc faz na sua conexão, um singleton?

ricardocomp

Na classe SolicitacaoDao eu estou fazendo da seguinte maneira
para listar as solicitações:

public class SolicitacaoServicoDao {

    private Connection conn;

    //O.K.!!!
    public SolicitacaoServicoDao(Connection conn) throws LAFQADaoException {
         this.conn = conn;
    }
    public List<SolicitacaoServico> listarSolicitacoesServicos() throws LAFQADaoException {
    ...
    while (rs.next()) {

                int protocolo = rs.getInt(1);
                int idProdutor = rs.getInt(2);
                int idTecnico = rs.getInt(3);
                String nome = rs.getString(4);
                String data = rs.getString(5);
                String hora = rs.getString(6);
                int numero_amostra = rs.getInt(7);

                ProdutorDao produtorDao = new ProdutorDao(conn);
                Produtor produtor = produtorDao.procurarProdutor(idProdutor);

                TecnicoDao tecnicoDao = new TecnicoDao(conn);
                Tecnico tecnico = tecnicoDao.procurarTecnico(idTecnico);

                AmostraDao amostraDao = new AmostraDao();
                List<Amostra> amostrasDestaSolicitacao = amostraDao.procurarAmostrasPorProtocolo(protocolo);

                list.add(new SolicitacaoServico(protocolo, produtor, tecnico, nome, data, hora, numero_amostra, amostrasDestaSolicitacao));
            }

            return list;
    }
}

Será que alguém pode me dar uma ajuda?

[]'s.

ricardocomp

Jóia xjunior?

A minha classe ConnectionFactory está da seguinte forma;

public class ConnectionFactory {

    public static Connection getConnection() throws SQLException{

        try {
                Class.forName("com.mysql.jdbc.Driver");
                return DriverManager.getConnection("jdbc:mysql://localhost:3306/lafqa", "root", "85246710");

        } catch (Exception e) {

           throw new SQLException(e.getMessage());

        }

    }

    private static void close(PreparedStatement ps, ResultSet rs, Statement stmt) throws SQLException {

        try {

            if (ps != null) {

                ps.close();

            }

            if (rs != null) {
                
                rs.close();

            }

            if (stmt != null) {

                stmt.close();

            }

        }
        catch (Exception e) {

            throw new SQLException(e.getMessage());

        }

    }

    public static void closeconnection(PreparedStatement ps) throws SQLException{
        close(ps, null, null);
    }

    public static void closeconnection(PreparedStatement ps, ResultSet rs) throws SQLException {
        close(ps, rs, null);
    }

    public static void closeconnection(Statement stmt, ResultSet rs) throws SQLException {
        close(null, rs, stmt);
    }

}

Será que vc xjunior ou alguém pode me dar uma ajuda? :smiley:

[]'s.

xjunior

em um primeiro momento, a classe está no mesmo pacote?
vc adicionou a classe no seu classpath?
Pois o erro é de classe não encontrada…

ricardocomp

Olá xjunior,
Obrigado pela ajuda, essa Exception eu já arrumei,
agora estou com um NullPointer que eu estou tentando descobrir aonde:

exception.LAFQADaoException: exception.LAFQADaoException: java.lang.NullPointerException
        at dao.SolicitacaoServicoDao.listarSolicitacoesServicos(SolicitacaoServicoDao.java:116)
        at dao.teste.SolicitacaoServicoTeste.listar(SolicitacaoServicoTeste.java:78)
        at dao.teste.SolicitacaoServicoTeste.main(SolicitacaoServicoTeste.java:21)
Caused by: exception.LAFQADaoException: java.lang.NullPointerException
        at dao.AmostraDao.procurarAmostrasPorProtocolo(AmostraDao.java:252)
        at dao.SolicitacaoServicoDao.listarSolicitacoesServicos(SolicitacaoServicoDao.java:108)
        ... 2 more
Caused by: java.lang.NullPointerException
        at dao.AmostraDao.procurarAmostrasPorProtocolo(AmostraDao.java:224)
        ... 3 more
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Será que vc ou alguém pode me dar uma ajuda?

[]'s.

xjunior

Bom amigo, este erro pode ser por diversas coisas, olha se encaixa entre elas pois sem o código completo fica difícil definir o erro com exatidão, ok…

veja:
pode ser por:

Chamando o método de instância de um objeto null

Acessar ou modificar o campo de um objeto null

Tomando o comprimento null como se fosse uma matriz.

Acessar ou modificar os slots de null como se fosse uma matriz.

Throwing null como se fosse um valor Throwable

No mais, vc deve estar com uma variável ou um objeto que não pode ser nulo na sua aplicação, ou chamando um método onde a classe ainda não foi instanciada, ok?

xjunior

Vejo que vc é iniciante no java,
tem um aplicativo destes que fiz correndo e postei pra resolver um problema em um post,
agora, se vc achar interessante visualiza-lo, acessa esse link e copia a aplicação completa do meu post, roda e vê como funciona, ok?

o link é:

http://www.guj.com.br/posts/list/148642.java#804938

ricardocomp

Olá xjunior, :smiley:
Obrigado pelas dicas, acabei encontrando os NullPointer nas conexões,
mas agora apareceu a seguinte mensagem:

Exception in thread "main" java.lang.StackOverflowError
        at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188)
        at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2428)
        at com.mysql.jdbc.MysqlIO.nextRowFast(MysqlIO.java:1483)
        at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1398)
        at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2805)
        at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:467)
        at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:2510)
        at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1746)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2135)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)
        at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1885)
        at dao.UsuarioSistemaDao.procurarUsuarioSistema(UsuarioSistemaDao.java:185)
        at dao.ProdutorDao.procurarProdutor(ProdutorDao.java:197)
        at dao.SolicitacaoServicoDao.procurarSolicitacaoServico(SolicitacaoServicoDao.java:186)
        at dao.AmostraDao.procurarAmostrasPorProtocolo(AmostraDao.java:243)
        at dao.SolicitacaoServicoDao.procurarSolicitacaoServico(SolicitacaoServicoDao.java:192)
        at dao.AmostraDao.procurarAmostrasPorProtocolo(AmostraDao.java:243)
        at dao.SolicitacaoServicoDao.procurarSolicitacaoServico(SolicitacaoServicoDao.java:192)
        at dao.AmostraDao.procurarAmostrasPorProtocolo(AmostraDao.java:243)
        at dao.SolicitacaoServicoDao.procurarSolicitacaoServico(SolicitacaoServicoDao.java:192)
        at dao.AmostraDao.procurarAmostrasPorProtocolo(AmostraDao.java:243)
        at dao.SolicitacaoServicoDao.procurarSolicitacaoServico(SolicitacaoServicoDao.java:192)
        at dao.AmostraDao.procurarAmostrasPorProtocolo(AmostraDao.java:243)
        at dao.SolicitacaoServicoDao.procurarSolicitacaoServico(SolicitacaoServicoDao.java:192)
        at dao.AmostraDao.procurarAmostrasPorProtocolo(AmostraDao.java:243)
        at dao.SolicitacaoServicoDao.procurarSolicitacaoServico(SolicitacaoServicoDao.java:192)
        at dao.AmostraDao.procurarAmostrasPorProtocolo(AmostraDao.java:243)
        at dao.SolicitacaoServicoDao.procurarSolicitacaoServico(SolicitacaoServicoDao.java:192)
        ...

Será que vc xjunior ou alguém pode me dar uma ajuda?

[]'s.

xjunior

erro na sua conexão jdbc

ricardocomp

Olá xjunior,
mas o que há de errado na minha conexão jdbc?
Será que vc ou alguém pode me dizer?

[]'s.

xjunior

Experimenta tirar o número da porta da conexão…

ricardocomp

vc diz assim xjunior:

//Tirei o 3306 do localhost:3306
DriverManager.getConnection("jdbc:mysql://localhost:/lafqa", "root", "85246710");

continuo dando o mesmo erro.

xjunior

bom, era de se esperar, pois o numero não atrapalha em nada a conexão, acessa o link q te mandei pra vc ver uma implementação, creio q vai tirar muitas dúvidas suas vendo ela funcionando e debugando ela, o código é pequeno, testa ele, se vc num encontrar o erro ou o código não ajudar, posta aqui d novo q a gente te ajuda, ok?

ricardocomp

Jóia xjnuior, muito obrigado mesmo pela sua ajuda e pela sua atenção,
eu estou com esse problema pois o meu sistema tem 2 partes a primeira parte
já está pronta mas estou tendo difuldades de integrar com a segunda parte
acredito que todos somos iniciantes perto da linguagem Java e para sempre
seremos eterno aprendizes.
Pode deixar que eu vou testar e debugar o código seu de exemplo sim
para ver aonde eu errei, blz?
E qq coisa eu volto aqui, tranquilo?

Um Forte Abraço Amigo e Boa Noite.

ricardocomp

Um forte abraço amigo e Boa Noite.

xjunior

Deu certo mano???

xjunior

mano, boa noite, realmente, somos eternos aprendizes em tudo…
agora, em relação à isso, te aconselho usar uma framework de persistência tipo hibernate, fraga, num sei se vai ser complicado integrar com sua aplicação, mas boa sorte e boa noite, com Deus!

xjunior

Conseguiu? Se tiver conseguido, muda o status do tópico para resovido, flw mano…

Criado 11 de janeiro de 2010
Ultima resposta 12 de jan. de 2010
Respostas 19
Participantes 2