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
codice:
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;
}
}
infine questo è il frame dove c'è il login
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
}