Постановка проблем stmt netbeans - PullRequest
0 голосов
/ 29 мая 2020

Я работаю над этим исходным кодом:

public class AuthentificationClient extends javax.swing.JFrame {

  connexion maconn; 
  Statement stmt1;  

    public AuthentificationClient() {
        initComponents();
    }

    private void numcompteActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // TODO add your handling code here:
    }                                         

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        Bienvenue ret = new  Bienvenue  () ;
        ret.setVisible(true);
        this.dispose();
    }                                        

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        String requete ="Select * from Compte where numcompte='"+numcompte.getText()+"' and codec = '"+Arrays.toString(code.getPassword())+"'";
        try {
            Statement stmt1 = maconn.Obtenirconnexion().createStatement();
            ResultSet rs= stmt1.executeQuery(requete);
        } catch (SQLException ex) {
            Logger.getLogger(AuthentificationPharmacien.class.getName()).log(Level.SEVERE, null, ex);
        }
        OpClient oc = new  OpClient  () ;
        oc.setVisible(true);
        this.dispose();
    }                                        

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new AuthentificationClient().setVisible(true);
            }
        });
    }

Ошибок нет, но когда я выполняю, это работает неправильно! Это сообщение об ошибке, которое я получаю: enter image description here

Ответы [ 2 ]

0 голосов
/ 29 мая 2020
  1. Используйте PreparedStatement вместо Statement, чтобы избежать атаки SQL инъекций, а также для упрощения кода, например, вам не нужно заключать строковые литералы в ' ', когда вы используете PreparedStatement.

  2. Выполните null проверку объекта (например, maconn) перед доступом к любому члену (методу / переменной), использующему его.

    Сделайте это следующим образом:

    String requete ="Select * from Compte where numcompte = ? and codec = ?";
    PreparedStatement pstmt;
    ResultSet rs;
    try {
        if(maconn!=null && maconn.Obtenirconnexion()!=null) {
            pstmt = maconn.Obtenirconnexion().prepareStatement(requete);
            pstmt.setString(1, numcompte.getText());
            pstmt.setString(2, Arrays.toString(code.getPassword()));
            rs = pstmt.executeQuery(requete);
            //...
        }
    }
    
0 голосов
/ 29 мая 2020

Переменная maconn никогда не назначается, по крайней мере, в предоставленном вами коде, поэтому вы можете вызывать метод для нулевого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...