PRECISO DE UMA AJUDA:
Bom, eu ja criei o Jform, o jtexfieldLogin, JpassSenha e dois botões Gravar e Cancelar,
Ja criei uma Classe conexão, pois bem preciso que depois que o usuário digitar o login e senha
faça uma verificação no banco (SQLServer) se o usuário existe ou não se existir chama a tela de menu
senão aparece uma mensagem de usuário invalido e volta para a tela login.
AGRADEÇO DESDE JÁ PELA FORÇA.
import br.com.fba.conexao.Conexao_banco;
/**
* @author Fogaca
*/
public class Login extends javax.swing.JFrame {
Conexao_banco con_login;
//===================================================================================
public String url ;
public String texto;
public String caminho1 = "jdbc:jtds:sqlserver://localhost:1433/db_oficial";
public String caminho2 = "jdbc:jtds:sqlserver://localhost:1433/db_teste";
public String titulo1 = "BASE OFICIAL";
public String titulo2 = "BASE TESTE";
//===================================================================================
/** CONSTRUTOR */
public Login() {
initComponents();
}
//MEU COMBOBOX QUE ME SELECIONA QUAL CAMINHO/BANCO MINHA APLICAÇÃO VAI SE CONECTAR
private void ComboBancoLoginActionPerformed(java.awt.event.ActionEvent evt) {
if(evt.getActionCommand().equals("comboBoxChanged"))
{
if(ComboBancoLogin.getSelectedItem().equals("BASE OFICIAL")){
this.texto = titulo1;
this.url = caminho1;
lbLoginLogin.setText(texto);
}else if(ComboBancoLogin.getSelectedItem().equals("BASE TESTE")){
this.texto = titulo2;
this.url = caminho2;
lbLoginLogin.setText(texto);
}else if(ComboBancoLogin.getSelectedItem().equals("Selecionar Base...")){
this.url = "";
}
}
}
//BOTÃO CANCELA LOGIN
private void btCancelaLoginActionPerformed(java.awt.event.ActionEvent evt) {
dispose();
}
/*
PRECISO VAZER A VALIDAÇÃO NESTE BOTÃO APÓS DEFINIR QUAL CAMINHO ELE IRÁ SE CONECTAR.
*/
//BOTÃO QUE CONFIRMA LOGIN, PASSA O CAMINHO DO BANCO E CHAMA A TELA DE MENU PRINCIPAL
private void btConfirmaLoginActionPerformed(java.awt.event.ActionEvent evt) {
new Principal(this.url, this.texto).show();//PARAMETROS QUE A TELA PRINCIPAL IRA RECEBER
dispose();
}
//METODO MAIN DA MINHA TELA LOGIN
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Login().setVisible(true);
}
});
}
}
Você precisa ter um UsuarioDAO e nele fazer a consulta para ver se esse usuário existe lá no seu SQLServer, não faça esse tipo de consulta na camada de apresentação do seu sistema, faça isso no DAO e retorne um objeto Usuario ou null, fica mais “limpo”.
Algo assim:
[code] public Usuario login(String login, String senha) throws SQLException {
Usuario usuario = null;
String sql = “SELECT * FROM Usuario WHERE login=? AND senha=?”;
PreparedStatement ps = conn.prepareStatement(sql);
ps.setObject(1, login);
ps.setObject(2, senha);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
usuario = new Usuario();
usuario.setNomeUsuario(rs.getString(“NOME”));
/// …
}
return usuario;
}[/code]
Nesse caso ou ele retorna um objeto Usuario completo ou retorna null.
Na camada de apresentação:
Usuario usuario = new UsuarioDAO().login("fulano", "senha123");
if(usuario==null){
System.out.println("Não existe ou dados incorretos");
}
Dica: use as nomeclaturas padrões do Java, ex: ao invés de [color=red]con_login[/color] use [color=darkblue]conexaoLogin[/color]
Estou enfrentando um problema para validar Login e Senha no JAVA Desktop, poderiam me auxilia nessa tarefa.
O erro é aquele típico te Objecto não Instanciado, mas não estou usando nenhum Objecto que não esteja Instanciado. erro e Código Abaixo.
Erro.
Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at Classes.UsuarioDAO.localizar(UsuarioDAO.java:30)
at Classes.GuiLogin$1.actionPerformed(GuiLogin.java:54)
Codigo.
Parte da Classe GuiLogin
private void definirEventos() {
btLogar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
[b] if(checarLogin.localizar(tfLogin.getText())){ //Chamo o método localizar, e passo por parâmetro o que o usuário digitar no campo login.[/b]
frame.setVisible(false);
Classes.MenuPrincial tela = new Classes.MenuPrincial();
tela.setVisible(true);
}
else{
JOptionPane.showMessageDialog(null,"Login ou Senha incorretas!");
}
}
});
btCancelar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
Classe UsuarioDAO - Metodo localizar
public boolean localizar(String Login){
mensagem = “Gravado com Exito”;
boolean verificado = true;
try{
sql = “select Login from Tcc.Usuarios where Login = ‘?’”;
System.out.println(Login);
statement = bd.connection.prepareStatement(sql);\ O erro ocorre nesta linha, pois tem um print com o login e está normal.
statement.setString(1, Login);
statement.executeQuery();
resultSet = statement.executeQuery();
if (resultSet.next()){
String LoginBanco = resultSet.getString(“Login”);
System.out.println(LoginBanco);
if(LoginBanco.equals(Login)){
verificado = true;
statement.close();
}else{
JOptionPane.showMessageDialog(null, “Usuario não Confere!”);
}
}
}
catch (SQLException erro){
mensagem = “Falha na Operação!!” + erro.toString();
import java.sql.*;
import javax.swing.*;
//METODO DE CONEXÃO COM O BANCO DE DADOS SQLSERVER
public class Conexao{
final private String driver = "net.sourceforge.jtds.jdbc.Driver";
final private String url = "jdbc:jtds:sqlserver://servidor:1433/banco";
final private String usuario = "usuario";
final private String senha = "senha";
private Connection conexao;
public Statement statment;
public ResultSet resultset;
public boolean conecta(){
boolean result = true;
try{
Class.forName(driver);
conexao = DriverManager.getConnection(url, usuario, senha);
JOptionPane.showMessageDialog(null, "Conectou no Banco");
}
catch(ClassNotFoundException Driver){
JOptionPane.showMessageDialog(null, "Conexão não Localizada"+Driver);
result = false;
}
catch(SQLException Fonte){
JOptionPane.showMessageDialog(null, "Deu erro na conexão "+"Com a Fonte de Dados: " +Fonte);
result = false;
}
return result;
}
//METODO DESCONECTA
public void desconecta(){
boolean result = true;
try{
conexao.close();
JOptionPane.showConfirmDialog(null, "Banco Fechado");
}
catch(SQLException erroSQL){
JOptionPane.showConfirmDialog(null, "Não Foi Possivel" +
"fechar o banco de dados: "+erroSQL.getMessage());
result = false;
}
}
//METODO EXECUTA SQL
public void executeSQL(String sql){
try{//Statement navegavel
statment = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);//CAMINHO DA CONEXÃO
resultset = statment.executeQuery(sql);// SQL QUE SERA EXECUTADO
}
catch(SQLException sqlex){
JOptionPane.showConfirmDialog(null,"Não foi possivel"+
" executar o Comando SQL, "+sqlex+", o sql passado foi o.: "+sql);
}
}
}
// CLASSE QUE VALIDA CONEXÃO
private void btConfirmaLoginActionPerformed(java.awt.event.ActionEvent evt) {
String CadastroSQL = "SELECT COUNT(*) "
+ "FROM cad_Operador "
+ "WHERE nome_operador= '"+tfUsuarioLogin.getText()+"' "
+ "AND nome_password= '"+jPassSenhaLogin.getText()+"' ";
con_login = new Conexao_banco();
con_login.conecta(url);
con_login.executeSQL(CadastroSQL);
try{
if(this.url.equals("")){
JOptionPane.showMessageDialog(null, "Selecionar Base...");
}else
con_login.resultset.next(); //ERRO SE NÃO RETORNAR NADA !
if (con_login.resultset.getInt(1) >= 1) {
//JOptionPane.showMessageDialog(null, "Usuário e Senha Correto!");
new Principal(this.url, lbLoginLogin.getText()).show();
dispose();
// LOGIN ENCONTADO E CORRETO
} else {
JOptionPane.showMessageDialog(null, "USUÁRIO OU SENHA INCORRETO!", "ATENÇÃO!",JOptionPane.WARNING_MESSAGE);
// USUÁRIO NÃO ENCONTRADO E SENHA INCORRETA.
}
}catch(SQLException erro){
JOptionPane.showMessageDialog(null, erro);
}
}