3

I'd like to use derby to manipulate my database in netbeans but I get this error:

java.lang.ClassNotFoundException: org.apach.derby.jdbc.ClientDriver

To add the derby library, I have done:

  1. Right click on "Libraries" then

  2. On the list, i selected Java DB Driver

Here is the code of my class ConnexionDB.java

public class ConnexionDB {

    private Connection conx = null;
    private final String urlBDD = "jdbc:derby://localhost:1527/tennis;create=true;user=tennis;password=tennis";

    private String MessageError = "No Errors ! ";

    public ConnexionDB() {
        this.openConnexion();
        this.createDataBase();
    }

    private String getMessageError() {
        return MessageError;
    }

    private void setMessageError(String MessageError) {
        this.MessageError = MessageError;
    }

    private void openConnexion() {
        try {
            Class.forName("org.apach.derby.jdbc.ClientDriver");
            this.conx = DriverManager.getConnection(urlBDD);
        } catch (Exception ex) {
            this.setMessageError("BD_Connexion:ouvrirConnexion:Erreur::: " + ex.getMessage());
            ex.printStackTrace();
        }
    }

    public void closeConnexion() {
        try {
            this.conx.close();
        } catch (SQLException ex) {
            this.setMessageErreur("BD_Connexion:fermerConnexion:Erreur::: " + ex.getMessage());
        }
    }

    public Object[][] selectExe(String requete) {
        Object[][] data = new Object[1][1];

        try {
            if (requete.toLowerCase().contains("select")) {
                Statement ReqExe = this.conx.createStatement();
                ResultSet ReqRes = ReqExe.executeQuery(requete);

                int nbreColonne = ReqRes.getMetaData().getColumnCount();
                int nbreLigne = this.nombreLigne(requete);

                data = new Object[nbreLigne + 1][nbreColonne];

                for (int i = 1; i <= nbreColonne; i++) {
                    data[0][i - 1] = ReqRes.getMetaData().getCatalogName(i);
                }

                int cmptr = 1;
                while (ReqRes.next()) {
                    for (int i = 1; i <= nbreColonne; i++) {
                        data[cmptr][i - 1] = ReqRes.getString(i);
                    }
                    cmptr++;
                }
                ReqRes.close();
                ReqExe.close();
            }
        } catch (Exception ex) {
            this.setMessageErreur("BD_Connexion:selectExe:Erreur::: " + ex.getMessage());
        }

        return data;
    }

    private int nombreLigne(String requete) {
        int nbreLigne = 0;

        try {
            if (requete.toLowerCase().contains("select")) {

                Statement ReqExe = this.conx.createStatement();
                ResultSet ReqRes = ReqExe.executeQuery(requete);
                //
                while (ReqRes.next()) {
                    nbreLigne++;
                }
                ReqRes.close();
                ReqExe.close();
            }
        } catch (Exception ex) {
            this.setMessageErreur("BD_Connexion:nombreLigne:Erreur::: " + ex.getMessage());
        }
        return nbreLigne;
    }

    public boolean updateExe(String requete) {
        boolean data = false;

        try {
            if (!requete.toLowerCase().contains("select")) {

                Statement ReqExe = this.conx.createStatement();

                int reqInfo = ReqExe.executeUpdate(requete);

                if (reqInfo > 0) {
                    data = true;
                }
                ReqExe.close();
            }
        } catch (Exception ex) {
            this.setMessageErreur("BD_Connexion:updateExe:Erreur::: " + ex.getMessage());
        }
        return data;
    }

    private void createDataBase() {
        try {
            Statement ReqExe = this.conx.createStatement();

            String tableAdherent = "CREATE TABLE IF NOT EXISTS ADHERENT\n"
                    + "(NUMEROADHERENT INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY\n"
                    + "(START WITH 1, INCREMENT BY 1),\n"
                    + "NOM VARCHAR(24) NOT NULL,\n"
                    + "PRENOM VARCHAR(24) NOT NULL,\n"
                    + "ADDRESSE VARCHAR(50),\n"
                    + "TELEPHONE VARCHAR(24),\n"
                    + "EMAIL VARCHAR(30) NOT NULL UNIQUE,\n"
                    + "PASSWORD VARCHAR(35) NOT NULL);";
            ReqExe.execute(tableAdherent);

            String tableTouroi = "CREATE TABLE IF NOT EXISTS TOURNOI\n"
                    + "(CODETOURNOI INTEGER PRIMARY KEY AUTOINCREMENT,\n"
                    + "NOM VARCHAR(24) NOT NULL,\n"
                    + "DATE VARCHAR(30) NOT NULL,\n"
                    + "LIEU VARCHAR(30));";
            ReqExe.execute(tableTouroi);

            String tableInscription = "CREATE TABLE IF NOT EXISTS INSCRIPTION\n"
                    + "(IDINSCRIPTION INTEGER PRIMARY KEY AUTOINCREMENT,\n"
                    + "NUMEROADHERENT INTEGER NOT NULL,\n"
                    + "CODETOURNOI INTEGER NOT NULL,\n"
                    + "DATEINSCRIPTION VARCHAR(30) NOT NULL,\n"
                    + "CONSTRAINT fk_numeroAdherent Foreign KEY (NUMEROADHERENT) references ADHERENT(NUMEROADHERENT),\n"
                    + "CONSTRAINT fk_codeTournoi Foreign KEY (CODETOURNOI) references TOURNOI(CODETOURNOI));";
            ReqExe.execute(tableInscription);

            ReqExe.close();

        } catch (SQLException ex) {
            System.out.println("Echecs : Creation des tables");
            Logger.getLogger(ConnexionDB.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Even if I change:

Class.forName("org.apach.derby.jdbc.ClientDriver");

to:

Class.forName("org.apach.derby.jdbc.client");

I always get an error!

rjdkolb
  • 10,377
  • 11
  • 69
  • 89
Jean-Paul
  • 127
  • 2
  • 15

2 Answers2

4

There's a typo in the class name you're loading.

Notice the e in apache:

"org.apache.derby.jdbc.ClientDriver"
Luciano van der Veekens
  • 6,307
  • 4
  • 26
  • 30
0

Class.forName is no longer required. Just adding the jar will add the JDBC driver. Just comment out this section of Code. Class.forName(JDBC_DRIVER) no longer needed?

Community
  • 1
  • 1
rjdkolb
  • 10,377
  • 11
  • 69
  • 89