ciao a tutti, sto facendo un piccola applicazione java con un database derby. Non riesco a fare il login dell'utente quando lancio l'applicazione, credo di aver problemi quando faccio la query o addirittura sbaglio nella crezione del database. Vi posto il codice.
classe per la creazione del database
codice:package db; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Db { public Db(){ creaDB(); } private void creaDB(){ try {//è una versione embedded quindi va chiusa quando l'applicazione termina java.sql.Connection con = null; Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); try { con = DriverManager.getConnection("jdbc:derby:Negozio"); } catch (java.sql.SQLException sqle) { try { con = DriverManager.getConnection("jdbc:derby:Negozio;create=true"); con.createStatement().executeUpdate("CREATE TABLE UTENTE (IDUtente INT NOT NULL, login VARCHAR(20), password VARCHAR(8), nome VARCHAR(20), cognome VARCHAR(20))"); con.createStatement().executeUpdate("CREATE TABLE PRODOTTI (IDProdotto INT NOT NULL, nome VARCHAR(20))"); inserisciUtente(con); } catch (SQLException ex) { System.out.println("Errore nella creazione delle tabelle o inserimento dati"); } } try { //è una versione embedded quindi va chiusa quando l'applicazione termina DriverManager.getConnection("jdbc:derby:Negozio;shutdown=true"); } catch (SQLException se) { //Stato = 08006 chiusura OK, altrimenti si è verificato un errore if (!se.getSQLState().equals("08006")) { throw se; } } } catch (SQLException ex) { // } catch (ClassNotFoundException ex) {//Stato = 08006 chiusura OK, altrimenti si è verificato un errore // } } private static void inserisciUtente(java.sql.Connection con){ try { con.setAutoCommit(false); PreparedStatement s = con.prepareStatement("INSERT INTO UTENTE (IDUtente, login, password, nome, cognome) VALUES(?,?,?,?,?)"); s.setInt(1, 0); s.setString(2, "admin"); s.setString(3, "admin"); s.setString(4, "Prova"); s.setString(5, "Prova"); s.executeUpdate(); } catch (SQLException sqle) { if (con != null) { try { con.rollback(); } catch (SQLException sqle2) { //log error } } } } private static void inserisciProdotto(java.sql.Connection con){ try { con.setAutoCommit(false); PreparedStatement s = con.prepareStatement("INSERT INTO PRODOTTI (IDProdotto, nome) VALUES(?,?)"); s.setInt(1, 13); s.setString(2, "Prova1"); s.executeUpdate(); } catch (SQLException sqle) { if (con != null) { try { con.rollback(); } catch (SQLException sqle2) { //log error } } } } }
classe che uso per il controllo
infine questo è il frame dove c'è il logincodice:package db; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Connection; public class Crud { private Connection con = null; public Crud(){ } public void createCon() throws ClassNotFoundException{ Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); try { con = DriverManager.getConnection("jdbc:derby:Negozio"); } catch (java.sql.SQLException sqle) { } } public void closeCon() throws SQLException{ try { //è una versione embedded quindi va chiusa quando l'applicazione termina DriverManager.getConnection("jdbc:derby:Negozio;shutdown=true"); } catch (SQLException se) { //Stato = 08006 chiusura OK, altrimenti si è verificato un errore if (!se.getSQLState().equals("08006")) { throw se; } } } public boolean checkUser (String login, String password) throws ClassNotFoundException, SQLException{ createCon(); Utente u = null; ResultSet rs =con.createStatement().executeQuery("SELECT login,password FROM UTENTE WHERE login ='"+login+"AND password ='"+password+"'"); if(rs.next() == false){ closeCon(); return false; } closeCon(); return true; } }
codice:package gui; import db.*; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; public class PannelloLogin extends javax.swing.JPanel implements Finestra{ public PannelloLogin() { initComponents(); } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { Accedi = new javax.swing.JButton(); login = new javax.swing.JLabel(); pass = new javax.swing.JLabel(); user = new javax.swing.JTextField(); parola = new javax.swing.JPasswordField(); Cancella = new javax.swing.JButton(); setPreferredSize(new java.awt.Dimension(800, 600)); setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); Accedi.setText("Accedi"); Accedi.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { AccediActionPerformed(evt); } }); add(Accedi, new org.netbeans.lib.awtextra.AbsoluteConstraints(420, 330, -1, -1)); login.setText("Username:"); add(login, new org.netbeans.lib.awtextra.AbsoluteConstraints(280, 270, -1, -1)); pass.setText("Password:"); add(pass, new org.netbeans.lib.awtextra.AbsoluteConstraints(280, 300, -1, -1)); add(user, new org.netbeans.lib.awtextra.AbsoluteConstraints(350, 260, 148, -1)); add(parola, new org.netbeans.lib.awtextra.AbsoluteConstraints(350, 290, 148, -1)); Cancella.setText("Cancella"); Cancella.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { CancellaActionPerformed(evt); } }); add(Cancella, new org.netbeans.lib.awtextra.AbsoluteConstraints(310, 330, -1, -1)); }// </editor-fold> private void AccediActionPerformed(java.awt.event.ActionEvent evt) { String username = user.getText(); String password = parola.getText(); if (username.equals("") || password.equals("")) JOptionPane.showMessageDialog(null,"Compila tutti i campi!"); else{ Crud c = new Crud(); try { if (c.checkUser(username, password) == false) { JOptionPane.showMessageDialog(null, "Accesso negato"); } else { contenitore.remove(this); contenitore.add(new PannelloAmministratore()); frame.pack(); } } catch (ClassNotFoundException ex) { Logger.getLogger(PannelloLogin.class.getName()).log(Level.SEVERE, null, ex); } catch (SQLException ex) { Logger.getLogger(PannelloLogin.class.getName()).log(Level.SEVERE, null, ex); } } frame.setVisible(true); } private void CancellaActionPerformed(java.awt.event.ActionEvent evt) { user.setText(""); parola.setText(""); } // Variables declaration - do not modify private javax.swing.JButton Accedi; private javax.swing.JButton Cancella; private javax.swing.JLabel login; private javax.swing.JPasswordField parola; private javax.swing.JLabel pass; private javax.swing.JTextField user; // End of variables declaration }

Rispondi quotando