Ξέρουμε ότι η Java είναι η δημοφιλέστερη πλατφόρμα ανάπτυξης εφαρμογών αντικειμενοστρεφή προγραμματισμού. Απλό την άλλη, γνωρίζουμε ότι η SQL είναι η γλώσσα δημιουργίας Data Base, Βάσεων Δεδομένων. Τι γίνεται όταν η Java συναντά την SQL ; Η απάντηση είναι: Θαύματα!

Στην ανάπτυξη μεγάλης κλίμακας εφαρμογών αλλά και σε μικρότερης είναι απαραίτητη η δημιουργία μιας ή και περισσοτέρων Βάσεων Δεδομένων. Σε αυτές θα αποθηκεύσουμε την πληροφορία για περαιτέρω χρήση από το σύστημα που έχουμε σκοπό να σχεδιάσουμε.

Αν για παράδειγμα έχουμε να υλοποιήσουμε μια εφαρμογή που απαραίτητα οι χρήστες της, θα πρέπει να συνδεθούν με το σύστημα και να αλληλεπιδράσουν με αυτό , αλλά με διαφορετικές λειτουργίες ο καθένας τότε μια DataBase επιβάλλεται. Με άλλα λόγια σε μια εφαρμογή ο ρόλος της βάσης δεδομένων είναι να "κρατά" πληροφορίες από τις εργασίες του συστήματος, και αποτελεί ένα σημείο αναφοράς όταν αυτές μέσα από την διαδικασία της ανάκλησης θελήσουμε να επεξεργαστούμε.


Έτσι από την μια έχουμε την Java που πάνω σε αυτή θα βασιστεί η υλοποίηση της εφαρμογής μας και από την άλλη την SQL που θα χρησιμοποιηθεί για αποθήκευση και ανάκληση των πληροφοριών που γεννά η Java. για να γίνει το "πάντρεμα" αυτών των δύο υπάρχουν πολλοί τρόποι, αλλά εδώ θα δώσουμε έναν απλό ώστε να μην μπούμε από την αρχή σε βαθιά νερά. Σημειώνουμε δε ότι η βάση δεδομένων υλοποιείται μέσα στο NetBeans και όχι σε κάποια άλλη εφαρμογή, για λόγους απλότητας και συντομίας.

Έστω ότι έχουμε να καλύψουμε το προαναφερόμενο παράδειγμα, δηλαδή την συνδεσιμότητας χρηστών με το σύστημα έχοντας διαφορετικά δικαιώματα πρόσβασης και αλληλεπίδρασης με αυτό. Γίνεται κατανοητό ότι οι χρήστες θα πρέπει να αποθηκευτούν κάπου μετά την δημιουργία τους  ώστε να έχουμε πρόσβαση σε αυτούς όποτε ζητηθεί από το σύστημα.
Συνηθισμένο λοιπόν είναι οι κλάσεις του συστήματος να γίνονται και πίνακες στην βάση δεδομένων. Αν έχω για παράδειγμα μια κλάση USERS στην java τότε θα έχω και ένα πίνακα USERS στη βάση. Τα πεδία του πίνακα θα είναι τα attributes της κλάσης.

class USERS{
String id;
String name;
String ability;
String password;
......
//μέθοδος
public String getUsetype(){
return ability;
}
Table USERS και εγγραφές
idUserNameAbilityPassword
1adminadmin123
2employee1employee234
3visitor1visitor345
............

Σύνδεση Java με SQL

Για να γίνει η σύνδεση και να υπάρξει "επικοινωνία", για παράδειγμα θα πρέπει να αποθηκεύετε ο κάθε χρήστης που δημιουργούμε στην java μέσα στον πίνακα USERS, θα πρέπει να υλοποιήσουμε μαι κλάση διασύνδεσης, την DataBaseManager. Μέσα σε αυτή την κλάση θα υπάρξουν εκτός από τις μεθόδους ή εντολές επικοινωνίας και οι μέθοδοι ενημέρωσης- αποθήκευσης και εκτέλεσης ερωτήματος- ανάκλησης,  εντολές δηλαδή της SQL.

Έτσι στο παράδειγμά μας θα είναι

public class DBManager {
    final private String database = "LoginUsers"; //Όνομα βάσης
    final private String user = "user"; //username βάσης
    final private String password = "pass"; //password βάσης
    final private String driver = "org.apache.derby.jdbc.ClientDriver"; //driver
    final private String connString = "jdbc:derby://localhost:1527/"; //connection string
    private Connection connection;//εδώ θα γίνει η σύνδεση με τη βάση
 
    public DBManager() {//κατασκευαστής
        try {
        // τοπική διεύθυνση  database driver 
            Class.forName(driver);
            // διασύνδεση με  database
            connection = DriverManager.getConnection(connString + database, user, password);
            System.out.println(connection);// μήνυμα σύνδεσης
        } catch (Exception ex) {
            System.out.println("Exception: " + ex);
        }
    }

Τώρα μέσα στην κλάση αυτή ας  προσθέσουμε μια μέθοδο ανάγνωσης του πίνακα USERS της βάσης δεδομένων και εύρεσης συγκεκριμένου χρήστη με βάση το username και to password

public USERS getUser(String username, String password) {
        try {//Εντολές SQL
            String query= " SELECT * "
                         +" FROM APP.APPUSER "
                         +" WHERE USERNAME='"+username+"'"
                         +" AND PASSWORD='"+password+"'";
            ResultSet rs = connection.createStatement().executeQuery(query);
//επιστροφή αποτελέσματος ερωτήματος
            while (rs.next()) {
/**/                USERS user = new USERS(rs.getString("USERNAME"), rs.getString("PASSWORD"), rs.getString("ABILITY"));//ΔΗΜΙΟΥΡΓΙΑ ΝΕΟΥ ΧΡΗΣΤΗ

                return user;//επιστροφή χρήστη αν βρεθεί. Δηλαδή ολοκλήρωση login
            }
        }
        catch (SQLException ex) {
            System.out.println("Exception: " + ex);
        }

        return null;//ΑΛΛΙΩΣ ΜΗΝ ΕΠΙΣΤΡΕΨΕΙ ΤΙΠΟΤΑ
    }

Η κλήση της μεθόδου γίνετε από την "κεντρική" κλάση του συστήματος με την τοποθέτηση απλά του παρακάτω κώδικα σε μια μέθοδο

public class CENTRAL{
        DBManager db;
        USERS user;
...................

Στον κατασκευαστή της κλάσης προσθέτουμε την εντολή  db =new DBManager(); ώστε να ξεκινά την σύνδεση. και σε μια μέθοδο π.χ. ενός κουμπιού

 try {
             user=db.getUser(jTextField1.getText(), jPasswordField1.getText());//παίρνουμε τις τιμές από κάποιο παράθυρο διαλόγου 
          }
        catch (NullPointerException ex) {
            System.out.println("Exception: " + ex);
        }
                   
        if (user==null){//αν δεν υπάρχει 
            JOptionPane.showMessageDialog(null, "No such user", "Error",                             JOptionPane.WARNING_MESSAGE);// μήνυμα σφάλματος
        }
        else{
         
            if(user.getUsetype().equals("admin")){//αν ο τύπος είναι admin
                κάνε κάτι ......
            }
            else if(user.getUsetype().equals("visitor")){//αν ο τύπος είναι visitor
                κάνε κάτι.....
            }        
        }    .....................................
    }
 
                

Έτσι ανάλογα με το τι κείμενο υπάρχει στο όρισμα Ability ξεκινούν και οι αντίστοιχες ενέργειες του χρήστη, τα παράθυρα διαλόγου, οι φόρμες κτλ.