Solucionado (ver solução)
Solucionado
(ver solução)
19
respostas

erro no "import com.mchange.v2.c3p0.ComboPooledDataSource;" o erro diz que ele não esta acessível, alguém teve esse problema?

package lojaVirtualRepository;

import java.sql.Connection;
import java.sql.DriverManager;  
import java.sql.SQLException;
import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class ConnectionFactory {
    public ConnectionFactory() {
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource (); 
    }

    public Connection recuperarConexao() throws SQLException {
        return DriverManager.getConnection("jdbc:mysql://localhost/loja_virtual?useTimezone=true&serverTimezone=UTC", "root","");    
    }
}
19 respostas

Opa Caique, tudo bem com você?

Confere pra mim se a biblioteca está disponível no Build Path do projeto. Para acessar o Build Path, basta dar um clique direito do mouse no projeto, depois seleciona Properties (última opção) > Java Build Path > clica na aba "Libraries" e confere se a biblioteca mchange-commons-java-0.2.16 está embaixo de Classpath como mostrado no vídeo no mínuto 1:28.

Fico no aguardo!

Sim, esta o mchange e o c3po

Olá Caique, isso é bem estranho mesmo, o seu projeto deveria ter acesso às bibliotecas no classpath.

Poderia mandar o mensagem de erro que aparece no console? E poderia checar se as bibliotecas estão sendo referenciadas no Referenced Libraries dentro seu projeto do lado esquerdo do Eclipse?

ola thiago, muito esquisito. na REFERENCED LIBRARIES estão o mysql-connector, mchange e o c3p0 o erro no import é: the type com.mchange.v2.c3p0.ComboPooledDataSource is not acessible

erro no commando: ComboPooledDataSource can't be resolved to a type

Opa Caique, tudo bem... minha hipótese é que o jar está corrompido.

Vai em Referenced Libraries e clica na setinha que fica do lado esquerdo do nome do jar c3p0-0.9.5.4.jar. Clicando deve aparecer um pacote, uma pasta META-INF e um arquivo .txt.

Imgur

Vamos procurar pela classe comboPooledDataSource que está dentro do pacote. Para isso, vamos navegar pelos pacotes que contém o nome do caminho para essa classe. No nosso caso, a classe está dentro dos pacotes com.mchange.v2.c3p0.ComboPooledDataSource. Depois que expandimos todas os pacotes, confere se a classe comboPooledDataSource se encontra mesmo dentro do pacote c3p0.

Imgur

Se estiver tudo de acordo, então minha única sugestão é deletar esses jars e baixá-los novamente. Na hora que for importar eles, não arraste e jogue dentro do projeto, faça como o instrutor fez nessa aula e adicione eles através do Build Path. Depois me avisa se funcionou!

Fico no aguardo. Abraços!

fiz tudo mencionado, exclui. Baixei novamente da plataforma alura, e adicionei jar externo. Mas continua dando o mesmo erro. Dentro do com.mchange contem apenas a debug.class;

Opa Caique, então vamos fazer o seguinte. Você poderia subir o seu projeto no Github para que possamos testá-lo e encontrar o que tem de errado aí?

Caso não saiba como fazer isso, dá uma olhada nesse tutorial que mostra o passo a passo de como fazer isso!

Peço desculpas por não conseguir ajudar sem ter acesso ao projeto, realmente não consigo descobrir o que está causando isso já que mesmo reimportando todos os jars, eles continuam aparecendo sem alguns recursos no projeto...

Se tiver qualquer dúvida ou problema, por favor me me avise!

Abraços!!

subi um arquivo .rar https://github.com/CaiqueAlves/lojaVirtualRepository

Olá Caique, você precisa disponibilizar o projeto no Github. Não precisa estar compactado.

Com o Git na sua máquina:

Dá um git init no projeto > git add . > git commit -m "Mensagem do commit" > git push no repositório remoto

Dá uma olhada nesse tutorial de como fazer upload de seus projetos sem usar as linhas de comando. Ou segue os passos nesse outro tópico.

Olá Caique, tudo tranquilo?

Olha, vendo o seu projeto, acredito que possam haver duas soluções:

  1. Deletar o arquivo module-info.java. Essa é uma novidade que surgiu no Java 9, pode ser um pouco avançado no momento. Mas temos um curso que aborda essa tecnologia.

  2. Declarar a dependência requires c3p0; dentro do arquivo module-info.java e depois ir até o Build Path e mover o jar do c3p0 para o Modulepath.

Arquivo module-info.java:

module lojaVirtualRepository {
    requires java.sql;
    requires c3p0;
}

Enfim, espero que uma dessas alternativas te ajude! Se não conhecer muito bem sobre o sistema de módulos em Java, eu recomendo apenas remover o arquivo module-info.java e da próxima vez que for criar um novo projeto, simplesmente recusar a criação desse arquivo. Pelo menos até conhecer melhor a motivação por trás desse sistema.

Testa aí e depois me avisa se funcionou!

Grande abraço e bons estudos!!

Boa noite, tudo ok? O erro saiu do código, mas quando executo as classes, não faz conexão com o banco https://github.com/CaiqueAlves/LojaVirtualRepository1 Subi um novo projeto.

Opa Caique, tudo bem?

Eu testei o seu código aqui e, aparentemente, os testes estão funcionando. Aparece alguma mensagem de erro no console?

Confere aí se você está se conectando na porta correta do localhost, caso você tenha mais de um banco de dados instalado pode ser que você precise definir a porta também. Aproveita e confere também se você está conseguindo acessar o banco pela linha de comando do MySQL.

Fico no aguardo!

nov. 05, 2020 8:25:11 AM com.mchange.v2.log.MLog INFO: MLog clients using java 1.4+ standard logging. nov. 05, 2020 8:25:12 AM com.mchange.v2.c3p0.C3P0Registry INFO: Initializing c3p0-0.9.5.4 [built 23-March-2019 23:00:48 -0700; debug? true; trace: 10] nov. 05, 2020 8:25:12 AM com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource INFO: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, dataSourceName -> 1hge0yzad167tg0red1hba|23bb8443, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> null, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, forceUseNamedDriverClass -> false, identityToken -> 1hge0yzad167tg0red1hba|23bb8443, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, jdbcUrl -> jdbc:mysql://localhost/loja_virtual?useTimezone=true&serverTimezone=UTC, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 15, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, numHelperThreads -> 3, preferredTestQuery -> null, privilegeSpawnedThreads -> false, properties -> {password=**, user=**}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ] nov. 05, 2020 8:25:42 AM com.mchange.v2.resourcepool.BasicResourcePool WARNING: com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@27983edd -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:827) at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:447) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:237) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199) at c3p0@0.9.5.4/com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175) at c3p0@0.9.5.4/com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220) at c3p0@0.9.5.4/com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206) at c3p0@0.9.5.4/com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203) at c3p0@0.9.5.4/com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1176) at c3p0@0.9.5.4/com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1163) at c3p0@0.9.5.4/com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44) at c3p0@0.9.5.4/com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1908) at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)

Como faço pra ver se esta certo no localhost e definir a porta?

solução!

Opa Caique! Conferindo a mensagem, o que me chamou a atenção foi a linha java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES). Isso significa que houve algum problema na autenticação do banco, o que pode estar relacionado à senha. Por isso é bom conferir se a senha que você está usando no seu código é a mesma senha que você usa para acessar o banco pelo terminal do MySQL.

Dá uma olhada nesse tutorial que mostra como descobrir quais aplicações estão rodando em uma porta específica no Windows. No nosso caso, queremos saber o que está na porta padrão 3306. Isso é mais relevante quando sabemos que tem mais de um SGBD (Sistema de Gerenciamento de Banco de Dados) instalado na sua máquina além do MySQL. Para definir a porta que você quer usar, basta colocar dois pontos e o número da porta depois de localhost: DriverManager.getConnection("jdbc:mysql://localhost:3307/loja_virtual?useTimezone=true&serverTimezone=UTC", "root",""), nessa caso especifiquei a porta 3307 pois é nela que eu rodo um outro SGBD chamado MariaDB, porém como eu deixei o MySQL associado à porta padrão (3306) eu posso simplesmente omitir o número da porta após o localhost.

antes funcionava, eu vi o tutorial mas não entendi a questão da porta. Antes eu não especificava porta e funcionava. Vi o tutorial e não consta nenhum serviço na porta 3306

resolvi instalar o sql server, e vai usar a porta 3306

Opa Caique, beleza? Então, isso é no caso de você ter mais de um banco além do MySQL instalado. A outra opção seria o caso da senha errada.

Minha outra hipótese seria o module-info a causa desse problema de conexão, mas confere aí se é o banco e depois retorna aqui, por favor!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software