Avatar billede motyl Nybegynder
28. november 2004 - 02:12 Der er 12 kommentarer og
1 løsning

NullPointerException og database connect

Hej Eksperter.

Jeg har nogle problemer med at håndtere en NullPointerException to steder i mit program, som refererer til hinanden.
Jeg tror at det har noget med mine try/catch at gøre, men er ikke helt sikker på sagen, så enhver hjælp efterspørges.

Det første sted er i linien " con.gemNyAnsat(ansat); " fra nedenstående metode:

    private class ButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            String command = event.getActionCommand();
            if (command.equals("Ny ansat")) {
                System.out.println("Der skal vist oprettes en ny ansat!");
                if (nyAnsatDialog.visDialog(ansat)) {
                    con.gemNyAnsat(ansat);
                }

            }
        }
    }
- - - - - - - - -
Det andet sted er i denne linie " dbAct.DBConn(); ":

    public void gemNyAnsat(Ansat ansat) {
        dbAct.DBConn();
        try {
            dbAct.DBBroke(
                "INSERT INTO Ansat VALUES ("
                    + ansat.getId()
                    + ","
                    + ansat.getNavn()
                    + ","
                    + ansat.getEmail()
                    + ","
                    + ansat.getAnsatType()
                    + ","
                    + ansat.getBrugernavn()
                    + ","
                    + ansat.getAdgangskode()
                    + ","
                    + ansat.getTelefonFast()
                    + ","
                    + ansat.getTelefonMobil()
                    + ","
                    + ansat.getTelefonLokal()
                    + ")");
        } catch (SQLException e) {
            System.err.println("Exception: " + e.getMessage());
        }
        try {
            dbAct.DBClose();
        } catch (SQLException e1) {
            System.err.println("Exception: " + e1.getMessage());
        }
    }
- - - - - - - - -

Min DBConn ser sådan ud:

    public void DBConn() {
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            conn =
                DriverManager.getConnection(
                    "jdbc:mysql://ishtar.imv.au.dk/g04f010",
                    "g04f010",
                    "Cothaem8");
            ;

            if (!conn.isClosed())
                System.out.println(
                    "Successfully connected to "
                        + "MySQL server using TCP/IP...");

        } catch (Exception e) {
            System.err.println("Exception: " + e.getMessage());
        }
    }
Avatar billede arne_v Ekspert
28. november 2004 - 10:09 #1
Hvordan får con en værdi i din actionPerformed ?
Avatar billede motyl Nybegynder
28. november 2004 - 13:06 #2
Hej Arne.
Her har du min actionPerformed. Con er en instans af klassen Controller.

    private class ButtonListener implements ActionListener {
                private Controller con = new Controller(); //instans af klassen Controller hvor jeg også har "gemNyAnsat(Ansat ansat)";
        public void actionPerformed(ActionEvent event) {
            String command = event.getActionCommand();
            if (command.equals("Vis uge")) {
                System.out.println(
                    "Programmet finder vagterne for den valgte uge!");
            } else if (command.equals("Ny ansat")) {
                System.out.println("Der skal vist oprettes en ny ansat!");
                if (nyAnsatDialog.visDialog(ansat)) {
                    con.gemNyAnsat(ansat); // ## Her anvendes con ##
                }
            }
        }
    }
Avatar billede arne_v Ekspert
28. november 2004 - 13:27 #3
Så ButtonListener con er ikke null.

DBConn skriver ikke en fejl ud ?

Og DBBroke bruger den samme conn som DBConn connecter med ?
Avatar billede motyl Nybegynder
28. november 2004 - 13:54 #4
Hej A.

Mht. DBConn så bliver den kaldt i metoden "gemNyAnsat(Ansat ansat)". Dernæst kalder jeg DBBroke som givet en SQL-sætning foretager en forespørgsel til databasen. Mener du at DBBroke skal have fat i conn fra DBConn?

Her er ellers hele min fejlliste fra konsollen:
java.lang.NullPointerException
    at Controller.gemNyAnsat(Controller.java:70)
    at mainGUI$ButtonListener.actionPerformed(mainGUI.java:178)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Avatar billede motyl Nybegynder
28. november 2004 - 13:55 #5
Her er min DBController klasse:

- - - - - - -

import java.sql.*;
import java.util.Vector;

public class DBController {

    private Connection conn = null;
    private ResultSet res;
    private Statement statement;

    public void DBConn() {
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            conn =
                DriverManager.getConnection(
                    "jdbc:mysql://ishtar.imv.au.dk/g04f010",
                    "g04f010",
                    "Cothaem8");
            if (!conn.isClosed())
                System.out.println(
                    "Successfully connected to "
                        + "MySQL server using TCP/IP...");

        } catch (Exception e) {
            System.err.println("Exception: " + e.getMessage());
        }
    }

    public ResultSet DBBroke(String theSql) throws SQLException {
        statement = conn.createStatement();
        res = statement.executeQuery(theSql);
        return res;
    }

    public void DBClose() throws SQLException {
        res.close();
        statement.close();
        conn.close();
    }
}
Avatar billede arne_v Ekspert
28. november 2004 - 13:55 #6
Hvad står der i linie 70 i Controller.java ?
Avatar billede arne_v Ekspert
28. november 2004 - 13:56 #7
Hvis det er:

dbAct.DBConn();

så er det dbAct som er null.
Avatar billede motyl Nybegynder
28. november 2004 - 14:06 #8
Jamen det har du ret i. Der står dbAct.DBConn(); i linie 70.
Kan det betyde at jeg skal lave en instansvariabel som der sådan ud:

private DBController dbAct = new DBController();

Hvis jeg skriver den for jeg en null-pointer for "res.close();" i metoden DBClose i klassen DBController. Res er ellers erklæret således: private ResultSet res;
Avatar billede arne_v Ekspert
28. november 2004 - 14:08 #9
Noget i den stil.
Avatar billede motyl Nybegynder
28. november 2004 - 14:10 #10
conn bliver ellers erklæret til null i klassen DBController. Det har betydning for det tjek jeg laver for om der er etableret en forbindelse til databasen.
Avatar billede arne_v Ekspert
28. november 2004 - 15:22 #11
Du kan også godt beholde:

private DBController dbAct null;

Men så skal du have en:

dbAct= new DBController();

inden du forsøger at bruge den!
Avatar billede arne_v Ekspert
12. december 2004 - 19:38 #12
OK ?
Avatar billede motyl Nybegynder
12. december 2004 - 19:59 #13
Jeps, det er helt iorden. Tak for hjælpen Arne.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester