Salve, galera!
Estava procurando por aqui e achei algumas coisas sobre o PostgreSQL, mas não consegui assimilar com meu problema.
Estou fazendo um sistema que vai ter autenticação. Criei o banco, as tabelas e colunas no PostgreSQL e consegui estabelecer uma conexão com o banco, mas (até por ser iniciante em Java com Banco de Dados) não consigo fazer a consulta.
Gostaria de uma ajuda, se possível. 
Vamos lá! Essa é minha classe ‘conectaBanco’ (nome auto-explicativo):
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class conectaBanco{
public Connection conectaAgora(){
String url = "jdbc:postgresql://localhost:5432/Projeto";
String usuario = "postgres";
String senha = "admin01";
try{
Class.forName("org.postgresql.Driver").newInstance();
Connection conn = DriverManager.getConnection(url, usuario, senha);
return conn;
}
catch(SQLException ex){
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
return null;
}
catch(Exception e){
System.out.println("Problemas ao tentar conectar com o banco de dados: " + e);
return null;
}
}
}
Daí eu tenho a interface com um JTextField, um JPasswordField e um JButton. Aquela clássica interface para inserir usuário, senha e entrar no sistema.
Enfim, o evento do meu botão entrar é esse:
import java.awt.event.*;
import java.sql.*;
(...)
entrar.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent entrarSistema)
{
try {
String user = TFieldUser.getText();
String pass = TFieldPass.getText();
String consulta = "SELECT id_usuario, usuario, senha FROM autentica WHERE usuario ='" + user + "' and senha = '" + pass + "'";
Connection conn = new conectaBanco().conectaAgora();
// testa se a conexão foi efetuada com sucesso
if (conn != null) {
System.out.println("Conexão efetuada com sucesso!");
} else {
System.out.println("Problemas!");
}
Statement stm = (Statement) conn.createStatement();
stm.executeQuery(consulta);
} catch (SQLException ex) {
Logger.getLogger(interface1.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
Ele estabelece a conexão com sucesso!
Agora a dúvida: O código está correto?
Se sim, como eu faço a comparação para saber se foi digitado corretamente o usuário e senha?
Obrigado!
no string da consulta use o caracter scape quando quiser representar aspas, segue o exemplo:
[code]String query = "select atributo from tabela t where t.atributo =
Espero ter ajudado…" + valor + “’”;[/code]
Espero ter ajudado…
Olá!
o método executeQuery() da classe java.sql.Statement retorna um objeto ResultSet (que é a consulta do banco).
vc pode fazer assim:
ResultSet rs = stm.executeQuery(consulta);
Depois fazer como manda o tutorial do GUJ:
http://www.guj.com.br/article.show.logic?id=7
Abraços
[quote=Carlos_ds_jar]no string da consulta use o caracter scape quando quiser representar aspas, segue o exemplo:
[code]String query = "select atributo from tabela t where t.atributo =
Espero ter ajudado…[/quote]
Quando vc usa ’ (aspas simples) dentro de " ’ " (aspas duplas), não é necessário o uso de caracteres de escape.
Até mais" + valor + “’”;[/code]
Espero ter ajudado…[/quote]
Quando vc usa ’ (aspas simples) dentro de " ’ " (aspas duplas), não é necessário o uso de caracteres de escape.
Até mais
Vc ta certa, eu uso pouco sql uso mais ejbql, mas se não me engano antigamente precisava…
Desculpa aí a todos…
Não tinha encontrado esse tutorial. :?
Mas enfim, agora deu quase certo.
O evento do meu botão entrar ficou assim:
entrar.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent entrarSistema)
{
String user = TFieldUser.getText();
String pass = TFieldPass.getText();
Connection conn = new conectaBanco().conectaAgora();
// testa se a conexão foi efetuada com sucesso
if(conn != null)
{
try {
System.out.println("Conexão efetuada com sucesso!");
Statement estado = conn.createStatement();
ResultSet resultado = estado.executeQuery("SELECT id_usuario, usuario, senha FROM autentica WHERE usuario ='" + user + "' and senha = '" + pass + "'");
int id_usuario_bd = 0;
String usuario_bd = null;
String senha_bd = null;
while (resultado.next()) {
id_usuario_bd = resultado.getInt("id_usuario");
usuario_bd = resultado.getString("usuario");
senha_bd = resultado.getString("senha");
}
if ((user == usuario_bd)&&(pass == senha_bd))
{
System.out.println("Autenticado com sucesso! id = " + id_usuario_bd);
} else { System.out.println("Usuário incorreto! Você digitou: " + user + " " + pass + " - O correto é: " + usuario_bd + " " + senha_bd); }
} catch (SQLException ex) {
Logger.getLogger(interface1.class.getName()).log(Level.SEVERE, null, ex);
}
} else {
System.out.println("Problemas!");
}
}
});
Ele estabelece a conexão, faz a consulta correta, mas não autentica. Deve ser algo no if que não consigo enxergar. Estou comparando o usuário e senha digitado com o usuário e senha do banco, caso sejam iguais é para entrar no sistema, mas mesmo sendo iguais ele sai do if e vai pro else. O resultado é esse:
[color=green]“Conexão efetuada com sucesso!
Usuário incorreto! Você digitou: root root - O correto é: root root
CONSTRUÍDO COM SUCESSO (tempo total: 13 segundos)”[/color]
Alguma ideia? :?:
Obrigado!
Galera, valeu pela ajuda!
Agora deu certo.
Segue código com as modificações que realizei:
entrar.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent entrarSistema)
{
String user = TFieldUser.getText();
String pass = TFieldPass.getText();
Connection conn = new conectaBanco().conectaAgora();
// testa se a conexão foi efetuada com sucesso
if(conn != null)
{
try {
System.out.println("Conexão efetuada com sucesso!");
Statement estado = conn.createStatement();
ResultSet resultado = estado.executeQuery("SELECT id_usuario, usuario, senha FROM autentica WHERE usuario ='" + user + "' and senha = '" + pass + "'");
boolean achou = false;
while (resultado.next() && !achou)
{
if (resultado.getString("usuario").equals(user))
if (resultado.getString("senha").equals(pass))
achou = true;
}
if (!achou)
{
System.out.println("Incorreto! Você digitou: " + user + " " + pass);
}
else {System.out.println("Autenticado com sucesso!"); }
} catch (SQLException ex) {
Logger.getLogger(interface1.class.getName()).log(Level.SEVERE, null, ex);
}
} else {
System.out.println("Problemas!");
}
}
});
[color=green]“Conexão efetuada com sucesso!
Autenticado com sucesso!
CONSTRUÍDO COM SUCESSO (tempo total: 10 segundos)”[/color]

Só uma dica, procure usar o PreparedStatement quando voce precisa setar parametros dentro de sua query com o PreparedStatement seu codigo ficaria da seguinte maneira:
[code]entrar.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent entrarSistema)
{
String user = TFieldUser.getText();
String pass = TFieldPass.getText();
Connection conn = new conectaBanco().conectaAgora();
// testa se a conexão foi efetuada com sucesso
if(conn != null)
{
try {
System.out.println("Conexão efetuada com sucesso!");
//voce coloca ? onde irao os seus parametros
String strSQL = "SELECT id_usuario, usuario, senha FROM autentica WHERE usuario = ? and senha = ?";
PreparedStatement estado = conn.prepareStatement(strSQL);
//aqui voce substitui o ? da query pelo parametro correspondente
estado.setString(1, user);
estado.setString(2, pass);
ResultSet resultado = estado.executeQuery();
boolean achou = false;
while (resultado.next() && !achou)
{
if (resultado.getString("usuario").equals(user))
if (resultado.getString("senha").equals(pass))
achou = true;
}
if (!achou)
{
System.out.println("Incorreto! Você digitou: " + user + " " + pass);
}
else {System.out.println("Autenticado com sucesso!"); }
} catch (SQLException ex) {
Logger.getLogger(interface1.class.getName()).log(Level.SEVERE, null, ex);
}
} else {
System.out.println("Problemas!");
}
}
});
[/code]
Dessa forma o codigo fica mais “elegante” alem de se livrar dos pequenos intemperies de concatenar strings, mas sao pequenas boas praticas que voce ira aprender com o tempo