Oi pessoal, tô com um problema ao seguir esse tutorial aqui:
Acontece que em lugar do MySQL, quero usar o PostgreSQL. Baixei o driver e, até onde eu sei, coloquei no classpath.
Vou deixar aqui o código da ConnectionFactory e o erro que tá apresentando.
packagebr.com.agenda.factory;importjava.sql.Connection;importjava.sql.DriverManager;publicclassConnectionFactory{//nome de usuario postgresprivatestaticfinalStringusername="caiomvital";//senha do banco postgresprivatestaticfinalStringpassword="1234";//caminho do banco de dados, porta, nome do banco de dadosprivatestaticfinalStringdatabaseURL="jdbc:postgresql://localhost:5432/caiomvital";//conexao com o banco de dadospublicstaticConnectioncreateConnectionToPostgreSQL()throwsException{//faz com que a classe seja carregada pela JVMClass.forName("com.postgresql.jdbc.driver");Connectionconnection=DriverManager.getConnection(databaseURL,username,password);returnconnection;}publicstaticvoidmain(String[]args)throwsException{//recuperar uma conexão com o banco de dadosConnectioncon=createConnectionToPostgreSQL();//testar se a conexão é nulaif(con!=null){System.out.println("Conexão obtida com sucesso");con.close();}}}
Parece que está tudo certinho, vc só errou o nome da classe.
Troque isto:
Class.forName("com.postgresql.jdbc.Driver");
Por isto:
Class.forName("org.postgresql.Driver");
Mas de qualquer forma, esta linha é completamente desnecessárias, vc pode até removê-la que vai funcionar perfeitamente.
Carregar o driver usando Class.forName era como a gente fazia antes do JDBC 4.0. A partir da versão 4.0, o driver utiliza outro mecanismo para encontrar o driver.
Fonte: Loading the Driver (Neste link ele até explica que These older methods of loading the driver are still supported but they are no longer necessary.).
A tabela contatos já está criada, dentro do schema Agenda, sob o usuário caiomvital, então não sei por que ele não reconhece a tabela.
W
wldomiciano1 like
Só pelo erro eu também não sei dizer o que poderia ser.
Vc poderia me mostrar a classe ContatoDAO e o SQL que vc usou para criar as tabelas?
C
caiomvital
Bom dia!
Essa é a classe ContatoDAO
packagebr.com.agenda.dao;importjava.sql.Connection;importjava.sql.Date;importjava.sql.PreparedStatement;importjava.time.LocalDate;importbr.com.agenda.factory.ConnectionFactory;importbr.com.agenda.model.Contato;publicclassContatoDAO{/* CRUD * C CREATE * R READ * U UPDATE * D DELETE */publicvoidsave(Contatocontato){Stringsql="INSERT INTO contatos (nome, idade) VALUES (?, ?)";Connectionconn=null;PreparedStatementpstm=null;try{//criar uma conexão com o banco de dadosconn=ConnectionFactory.createConnectionToPostgreSQL();//criamos uma PreparedStatement para executar uma querypstm=(PreparedStatement)conn.prepareStatement(sql);//adicionar os valores que são que são esperados pela queryLocalDatelocalDate=LocalDate.now();PreparedStatementst=conn.prepareStatement("INSERT INTO contatos VALUES (?)");pstm.setString(1,contato.getNome());pstm.setInt(2,contato.getIdade());//executar a querypstm.execute();}catch(Exceptione){e.printStackTrace();}finally{//fechar as conexõestry{if(pstm!=null){pstm.close();}if(conn!=null){conn.close();}}catch(Exceptione){e.printStackTrace();}}}}
O SQL que usei pra fazer a tabela foi
create table contatos(
id SERIAL PRIMARY KEY,
nome varchar(40),
idade int
);
Considerando que apaguei o DataCadastro e tentei novamente, agora só com 2 atributos.
W
wldomiciano1 like
Fiz o teste aqui invocando o método save do seu DAO.
Primeiro eu testei antes de criar a tabela contatos e deu aquele mesmo erro que vc mostrou “ERROR: relation “contatos” does not exist”.
Em seguida eu fiz outro teste. Criei a tabela contatos usando o SQL que vc mostrou e depois invoquei o método save e funcionou normalmente.
Verifique no seu banco se a tabela contatos realmente foi criada, pelos meus testes é só isso mesmo que está faltando.
C
caiomvital1 like
Foi, eu testei o INSERT direto no SQL e rodou. Talvez eu esteja com problema na conectividade com o banco, considerando que estou usando o DBeaver pra conectar.