Im avoir un léger problème où ma requête sql ne fonctionne pas, car il ne cesse de me donner cet erro où il est dit attendu, même si j'ai mis un semi-collan là. Im assez nouveau à Java donc toute aide serait appriticated.Requête SQL attendue ';'
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
public class Manager {
Connection con;
Statement st;
ResultSet rs;
JFrame f = new JFrame("User Login");
JLabel U = new JLabel("Username");
JLabel P = new JLabel("Password");
JTextField t = new JTextField(10);
JTextField t1 = new JTextField(10);
JButton b = new JButton("Login");
public Manager()
{
connect();
frame();
}
public void connect()
{
try
{
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver);
String db = "jdbc:odbc:db1";
con = DriverManager.getConnection(db);
st = con.createStatement();
}
catch(Exception ex)
{
}
}
public void frame()
{
f.setSize(600,400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
JPanel p = new JPanel();
p.add(U);
p.add(t);
p.add(P);
p.add(t1);
p.add(b);
f.add(p);
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
try
{
String User = t.getText().trim();
String Password =t1.getText().trim();
String sql = "select User,Password from Table1 where User = '" + User +"'and Password='"+ Password"'";
rs = st.executeQuery(sql);
int count = 0;
while(rs.next())
{
count = count + 1;
}
if(count == 1)
{
JOptionPane.showMessageDialog(null,"User found, Acces");
}
else if(count > 1)
{
JOptionPane.showMessageDialog(null,"Duplicated User, Access denied");
}
else
{
JOptionPane.showMessageDialog(null,"User Not found");
}
}
catch(Exception ex)
{
}
}
});
}
public static void main(String[] args) {
new Manager();
}
}
Vous devriez envisager d'utiliser 'PreparedStatement' au lieu de créer toute la requête dans une chaîne – Dazak
Tout d'abord: * utilisez des requêtes paramétrées *! Vous avez probablement des guillemets de fermeture dans votre champ, ce qui provoque la rupture de la requête.L'utilisation de requêtes paramétrées empêche cela d'être un problème avec la prévention de l'injection SQL (que votre code est * ouvert * à). Deuxièmement: NE PAS ENREGISTRER LES MOTS DE PASSE EN TEXTE. – Siyual
Quel est le message d'exception/trace de pile? En outre, le 'sql' est ouvert à l'attaque SQL Injection - pensez à utiliser' PreparedStatement'. –