Olá a todos,
Sou novo no JDBC e no PostgreSQL, e não estou conseguindo fazer a conexão com um banco de dados PostgreSQL.
Estou usando o NetBeans 5.5, JDK 1.6 e PostgreSQL 7.4.
Primeiro eu crio um usuário ‘emacao’, com senha ‘emacao’, e crio tambem um banco de dados para ele, ‘perfilemacao’.
Depois eu crio uma tabela dentro do banco de dados ‘perfilemacao’. O banco está na mesma máquina de onde estou tentando me conectar.
Mostro aqui o que fiz:
[code]william@apolo:~$ sudo su postgres
Password:
postgres@apolo:/home/william$ psql template1
Bem-vindo ao psql 7.4.19, o terminal iterativo do PostgreSQL.
Digite: \copyright para mostrar termos de distribuição
\h para ajuda com comandos SQL
? para ajuda com comandos internos
\g ou terminar com ponto-e-vírgula para executar a consulta
\q para sair
template1=# \l
Lista dos bancos de dados
Nome | Dono | Codificação
-----------±---------±------------
template0 | postgres | UNICODE
template1 | postgres | UNICODE
(2 registros)
template1=# CREATE USER emacao CREATEDB PASSWORD ‘emacao’;
CREATE USER
template1=# CREATE DATABASE perfilemacao OWNER emacao;
CREATE DATABASE
template1=# GRANT ALL PRIVILEGES ON DATABASE perfilemacao TO emacao;
GRANT
template1=# \l
Lista dos bancos de dados
Nome | Dono | Codificação
--------------±---------±------------
perfilemacao | emacao | UNICODE
template0 | postgres | UNICODE
template1 | postgres | UNICODE
(3 registros)
template1=# \q
postgres@apolo:/home/william/workspace$ cd EmAcao
postgres@apolo:/home/william/workspace/EmAcao$ psql perfilemacao
Bem-vindo ao psql 7.4.19, o terminal iterativo do PostgreSQL.
Digite: \copyright para mostrar termos de distribuição
\h para ajuda com comandos SQL
? para ajuda com comandos internos
\g ou terminar com ponto-e-vírgula para executar a consulta
\q para sair
perfilemacao=# \i create_db_emacao.sql
psql:create_db_emacao.sql:43: NOTA: CREATE TABLE / UNIQUE criará índice implícito “dadospessoais_cpf_key” para tabela “dadospessoais”
CREATE TABLE
perfilemacao=# GRANT ALL PRIVILEGES ON TABLE dadospessoais TO emacao;
GRANT
perfilemacao=# ALTER TABLE dadospessoais OWNER TO emacao;
ALTER TABLE
perfilemacao=# \d
Lista de relações
Esquema | Nome | Tipo | Dono
---------±--------------±-------±-------
public | dadospessoais | tabela | emacao
(1 registro)
perfilemacao=# \q[/code]
E esse é o conteúdo do arquivo ‘create_db_emacao.sql’, que uso para criar a tabela:
[code]–Criando tabela que contém dados pessoais de cada novo cadastro.
CREATE TABLE dadospessoais (
ano CHAR(4) NOT NULL,
numinscricao CHAR(10) NOT NULL,
nome CHAR(50) NOT NULL,
cpf CHAR(11) UNIQUE NOT NULL, --UNIQUE garante que este dado é unico em toda a tabela
rg CHAR(9) NOT NULL,
datanasc CHAR(10) NOT NULL,
endereco CHAR(70) NOT NULL,
bairro CHAR(30) NOT NULL,
cidade CHAR(30) NOT NULL,
uf CHAR(2) NOT NULL,
telres CHAR(14) DEFAULT '000000',--VALOR DEFAULT CASO ESTA DADO NÃO EXISTA, SO VALE PARA UM TIPO PADRAO
telcel CHAR(14) DEFAULT '000000',
telrec CHAR(14) DEFAULT '000000',
email CHAR(50) DEFAULT 'NÃO CONSTA',
cep CHAR(10) NOT NULL,
quest01 INTEGER NOT NULL,
q01 CHAR(20) DEFAULT 'NÃO CONSTA',
quest02 INTEGER NOT NULL,
quest03 INTEGER NOT NULL,
quest04 INTEGER NOT NULL,
quest05 INTEGER NOT NULL,
quest06 INTEGER NOT NULL,
q06 CHAR(20) DEFAULT 'NÃO CONSTA',
quest07 INTEGER NOT NULL,
q07 CHAR(20) DEFAULT 'NÃO CONSTA',
quest08 INTEGER NOT NULL,
quest09 INTEGER NOT NULL,
quest10 INTEGER NOT NULL,
quest11 INTEGER NOT NULL,
quest12 INTEGER NOT NULL,
quest13 INTEGER NOT NULL,
quest14 INTEGER NOT NULL,
quest15 INTEGER NOT NULL,
q15 CHAR(20) DEFAULT 'NÃO CONSTA',
quest16 INTEGER NOT NULL,
quest17 INTEGER NOT NULL,
q17 CHAR(20) DEFAULT 'NÃO CONSTA'
);[/code]
O código que uso para conectar com o banco é o seguinte:
[code]public class Banco_de_Dados {
private String driver;
private String banco;
private String user;
private String passwd;
/** Creates a new instance of Banco_de_Dados */
public Banco_de_Dados() {
this.driver = new String("org.postgresql.Driver");
this.banco = new String("jdbc:postgresql:perfilemacao");
this.user = new String("emacao");
this.passwd = new String("emacao");
}
/**
* Estabelece uma conexao com a base de dados
* @return conexao com base de dados
*/
public Connection getConexao() {
try {
Class.forName(this.driver); // load the JDBC driver
Connection con = DriverManager.getConnection (this.banco, this.user,this.passwd);
return con;
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
catch(SQLException e){
e.printStackTrace();
}
return null;
}
}[/code]
A princípio, tentei usar o driver do PostgreSQL 8.2, e JDBC 4, disponível em http://jdbc.postgresql.org/download.html, e depois tentei usar vários outros drivers, como o do PostgreSQL 7.4 para JDBC 1, JDBC 2, JDBC 2 EE e JDBC 3, disponíveis no mesmo link, mas, não importa o driver que eu use, todos eles retornam o mesmo erro, dentro do NetBeans:
init:
deps-jar:
compile:
run:
org.postgresql.util.PSQLException: Conexão negada. Verifique se o nome da máquina e a porta estão corretos e se o postmaster está aceitando conexões TCP/IP.
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:122)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125)
at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:18)
at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24)
at org.postgresql.Driver.makeConnection(Driver.java:382)
at org.postgresql.Driver.connect(Driver.java:260)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at database.Banco_de_Dados.getConexao(Banco_de_Dados.java:41)
at Janela.janela.<init>(janela.java:31)
at emacao.Main.main(Main.java:30)
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:180)
at org.postgresql.core.PGStream.<init>(PGStream.java:59)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:77)
... 12 more
EXECUTADO COM SUCESSO (tempo total: 4 segundos)
Percebam que, para o PostgreSQL 8.2, esse procedimento funcionou, pois fiz exatamente assim no computador de um colega que usa o PostgreSQL 8.2. Só que, ao invés de usar o comando:
CREATE USER emacao CREATEDB PASSWORD 'emacao';
para criar o usuário ‘emacao’, eu usei:
CREATE ROLE emacao NOSUPERUSER CREATEDB PASSWORD 'emacao' INHERIT LOGIN;
Acontece, porém, que o PostgreSQL 7.4 não possui esse comando ‘CREATE ROLE’. Imagino que essa opção ‘INHERIT LOGIN’ é o que permite a conexão a partir de um aplicativo cliente, mas isso é só um palpite.
Se alguém tiver uma idéia de como posso me conectar usando o PostgreSQL 7.4, ma ajudaria muito.
Vlw ai e parabéns pelo fórum!!!