views:

351

answers:

7

Hi, I have a database class which has this method and it will be called in the other bean class (when I choose an image)(imagin I work with name and family,... not with id)

my method:

public static void insertImageToBirthTable(String name, String family, String fatherName, String motherName, String dateOfBirth, String placeOfBirth, String pathFile) {
        Statement stmt = null;

        try {
            File file = new File(pathFile);
            FileInputStream input = new FileInputStream(file);

            stmt.executeUpdate("UPDATE birthtable SET image = '" + input + "' WHERE name = '" + name + "'AND family ='" + family + "'AND fatherName = '" + fatherName + "'AND motherName ='" + motherName + "' AND dateOfBirth = '" + dateOfBirth + "' AND placeOfBirth = '" + placeOfBirth + "'");


        } catch (Exception e) {
            e.printStackTrace();
        }
    }

stacktrace:

java.lang.NullPointerException
        at database.Manager.insertImageToBirthTable(Manager.java:415)
        at AdminGUI.AddNewBornInformation.addphotoActionPerformed(AddNewBornInformation.java:300)
        at AdminGUI.AddNewBornInformation.access$1000(AddNewBornInformation.java:28)
        at AdminGUI.AddNewBornInformation$11.actionPerformed(AddNewBornInformation.java:145)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6038)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5803)
        at java.awt.Container.processEvent(Container.java:2058)
        at java.awt.Component.dispatchEventImpl(Component.java:4410)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
        at java.awt.Container.dispatchEventImpl(Container.java:2102)
        at java.awt.Window.dispatchEventImpl(Window.java:2429)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
+2  A: 

Because stmt is initialized to null?

Wesho
It *is* initialized, but it's initialized to `null`. If it weren't initialized, you'd get a compiler error.
Jesper
You're technically correct, I edited my answer. I meant to say 'not initialized to something meaningful'.
Wesho
+4  A: 

Statement stmt = null; and you never change it.

Then you're invoking stmt.executeUpdate() on this null reference.

See Connection.createStatement() or use Connection.prepareStatement() which returns a PreparedStatement instance.

Note:

java.lang.NullPointerException
        at database.Manager.insertImageToBirthTable(Manager.java:415)

The stack trace tells you where the exception is thrown: in the Manager.java file at line 415

Gregory Pakosz
+8  A: 
  1. Your Statement is null. You declared it null and never change it. A Statement is created from a Connection, using createStatement().
  2. Even if you create a statement, your query just won't work - you can't insert a stream like that. What you are going to get inserted (if it succeeds) will probably be "FileInputStream@xxxxxx"
Bozho
+9  A: 

It throws an NPE because your stmt variable is initialized to null.

netzwerg
@netzwerg: please read this: http://slash7.com/2006/12/22/vampires/
Ether
+12  A: 

Look at the line number 415 indicated in the stack trace. You will find a line where you're trying to call a method an a variable that is null. It is very, very simple and obvious in this case.

Please try figuring out errors on your own before coming to Stack Overflow. It is less work for yourself.

Michael Borgwardt
I need to create more users and give this one at least +7!
Bombe
A: 

It looks as though your Statement reference is null. You will need to get a statement reference from the connection:

stmt = connection.createStatement();
Joe
A: 

Take a look at some static code analysis tools like FindBugs. Heed the advice of the other comments/answers.

Droo