Oi gente
Estou tentando validar login de usuario e senha usando next();
Se os campos estiverem preenchidos corretamente, o jframe fecha. Se estiver errado, o os campos se limpam.
Mas mesmo se estiver errado, o jframe ta fechando. E o pior, não é erro de conexão nem de código… é lógica mesmo.
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con;
con = DriverManager.getConnection("jdbc:mysql://localhost/dbsf", "root", "");
try{
Statement st = con.createStatement();
String selectquery = "select usuario, senha from login";
ResultSet rs = st.executeQuery(selectquery);
boolean valida = false;
valida = rs.next();
if(valida == true){
JOptionPane.showMessageDialog(null, "Logado");
dispose();
}else{
JOptionPane.showMessageDialog(null, "Dados incorretos ou não cadastrados");
}
txtusu.setText("");
txtpass1.setText("");
}
catch(SQLException s){
System.out.println(s);
}
con.close();
}
catch (Exception e){
e.printStackTrace();
}
}
Onde to errando? 
O erro é que voce nao esta validando coisa alguma.
O código acima vc apenas selecionou todos os dados da tabela Login e esta mostrando somente os campos usuario e senha; tem alguma validação? rsrs
Isso sim é validação…
try{
Class.forName("com.mysql.jdbc.Driver").newInstance(); //Não faço ideia pq todos colocam isto aki, teoricamente esta sendo instanciado um objeto. mais não há nada armazenando a instancia deste objeto.
//O correto no meu ponto de vista seria // Object obj = Class.forName("com.mysql.jdbc.Driver").newInstance();// Desse modo o objeto instanciado poderá ser usado nas próximas linhas de código.
Connection con;
con = DriverManager.getConnection("jdbc:mysql://localhost/dbsf", "root", "");
try{
String SQL = "SELECT usuario,senha FROM login WHERE usuario = ? AND senha = ?";
PreparedStatement st = con.PreparedStatement(SQL);
st.setString(1, jTextUser.getText());
st.setString(2, jTextPassword.getText());
ResultSet rs = st.executeQuery();
if(rs.next()){
JOptionPane.showMessageDialog(null, "Logado");
dispose();
}else{
JOptionPane.showMessageDialog(null, "Dados incorretos ou não cadastrados");
}
}
catch(SQLException s){
System.out.println(s);
}
con.close();
}
catch (Exception e){
e.printStackTrace();
}
[quote=charleston10]O erro é que voce nao esta validando coisa alguma.
O código acima vc apenas selecionou todos os dados da tabela Login e esta mostrando somente os campos usuario e senha; tem alguma validação? rsrs
Isso sim é validação…
E SQL Injection …
nao comentei sobre isso pq na verdade o assunto era sobre validação.
mas se for levar em conta ensina ele usar PrepareStatement na boa, é q to sem tempo…
Sem bronca mano, so comentei tb, o foco é outro mesmo =D
O post já esta resolvido, agora se alguém poder me explicar pq todos colocam isto na hora de criar a conexão com o banco.
Teoricamente não serve pra nada.
Agora nesse esquema, ela já pode vir a servir para alguma coisa, pois o objeto instanciado poderá ser usado.
[quote=tsartori]O post já esta resolvido, agora se alguém poder me explicar pq todos colocam isto na hora de criar a conexão com o banco.
Teoricamente não serve pra nada.
Agora nesse esquema, ela já pode vir a servir para alguma coisa, pois o objeto instanciado poderá ser usado.
Na realidade o código certo é apenas
que é uma instrução para jvm procurar e carregar aquela classe.
Também existe um outro problema. Este código só deve ser chamado uma única vez na aplicação. Quando ela inicia, claro está.
Este código não é necessário se estiver usando jee ou webcontainers com jndi como o tomcat. Nesses casos o driver é configurado declarativamente e o application server é que vai dar o comando acima.
Dar o comando a toda a vez que usa a conexão é fazer a jvm procurar algo que ela já tem e portanto tempo desperdiçado.