简体   繁体   中英

java.lang.NullPointerException Error when compiling jdbc

I'm trying to compile my jdbc for my gui, its goal is to grab the user input from the user and then select the table with the corresponding table, (not implemented yet) and then under that rows imagepath column get the string which is an image path from that row, and use this string to display an image. So far when I run my code I'm getting the following error.

java.lang.NullPointerException
    at Assignment.DisplaySearch.Search(Search.java:276)
    at Assignment.Search$4.actionPerformed(Search.java:123)

This error occurs when I press the following button.

ViewerButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    DisplaySearch.Search(jtfImagename1.getText(), jtfLocation1.getText(), jtfTimestamp1.getText());
                } catch (SQLException ex) {
                    ex.printStackTrace();
                }
                return;   
            }
        });

JDBC-

 class DisplaySearch {
        // database URL                              

        static final String DATABASE_URL = "jdbc:mysql://localhost:3306/mysql";
        static final String USERNAME = "root";
        static final String PASSWORD = "root";

        // launch the application
        public static void Search(String imageName, String DateStamp, String imageTag) throws SQLException {
            Connection connection = null; // manages connection
            Statement statement = null; // query statement
            ResultSet resultSet = null; // manages results

            // connect to database books and query database
            try {
                // establish connection to database
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                connection = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD);

                // query database 
                PreparedStatement pt = connection.prepareStatement(
                        "SELECT imageName, DateStamp, imageTag FROM images WHERE imageName=? AND DateStamp=? AND imageTag=?");
                pt.setString(1, "image-name");
                pt.setString(2, "date-stamp"); // maybe .setDate(...)
                pt.setString(3, "image-tag");
                resultSet = pt.executeQuery();

                while (resultSet.next()) {
                    // Position the cursor 
                    imageName = resultSet.getString(0);
                    DateStamp = resultSet.getString(1);
                    imageTag = resultSet.getString(2);
                    System.out.println("datas : " + imageName + " " + DateStamp + " " + imageTag);
                    if (imageName != "" || imageName != null) {
                        String Name = resultSet.getString(imageName);
                        System.out.print("Image Name: " + Name);
                        resultSet = statement.executeQuery("SELECT imageName, DateStamp, imageTag FROM images where imageName='"
                                + imageName + "'");
                    }

                    if (DateStamp != null) {
                        String Date = resultSet.getString(DateStamp);
                        System.out.print(", Date: " + Date);
                        resultSet = statement.executeQuery("SELECT imageName, DateStamp, imageTag FROM images where DateStamp='"
                                + DateStamp + "'");
                    }

                    if (imageTag != "" || imageTag != null) {
                        String Tag = resultSet.getString(imageTag);
                        System.out.print(", Tag: " + Tag);
                        resultSet = statement.executeQuery("SELECT imageName, DateStamp, imageTag FROM images where imageTag='"
                                + imageTag + "'");
                    }
                }// end while
            } // end try
            catch (Exception e) {
                e.printStackTrace();
            } // end catch                                                     
            try {
                resultSet.close();
                statement.close();
                connection.close();
            } // end try                                               
            catch (Exception exception) {
                exception.printStackTrace();
            } // end catch 
        } // end main

您正在PreparedStatement pt上操作,但关闭statement为null。

You are closing the Statement object which points to null which inturn gives a NullPointerException.

Change Your code as follows...

class DisplaySearch {
        // database URL                              

        static final String DATABASE_URL = "jdbc:mysql://localhost:3306/mysql";
        static final String USERNAME = "root";
        static final String PASSWORD = "root";

        // launch the application
        public static void Search(String imageName, String DateStamp, String imageTag) throws SQLException {
            Connection connection = null; // manages connection
            PreparedStatement  pt = null; // query statement
            ResultSet resultSet = null; // manages results

            // connect to database books and query database
            try {
                // establish connection to database
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                connection = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD);

    //            resultSet = statement.executeQuery(
    //                    "SELECT imageName, DateStamp, imageTag FROM images WHERE imageName='*' AND DateStamp='*' AND imageTag='*'");
    //

                // query database 
                pt = connection.prepareStatement(
                        "SELECT imageName, DateStamp, imageTag FROM images WHERE imageName=? AND DateStamp=? AND imageTag=?");
                pt.setString(1, "image-name");
                pt.setString(2, "date-stamp"); // maybe .setDate(...)
                pt.setString(3, "image-tag");
                resultSet = pt.executeQuery();

                while (resultSet.next()) {
                    // Position the cursor 
                    imageName = resultSet.getString(0);
                    DateStamp = resultSet.getString(1);
                    imageTag = resultSet.getString(2);
                    System.out.println("datas : " + imageName + " " + DateStamp + " " + imageTag);
                    if (imageName != "" || imageName != null) {
                        String Name = resultSet.getString(imageName);
                        System.out.print("Image Name: " + Name);
                        resultSet = statement.executeQuery("SELECT imageName, DateStamp, imageTag FROM images where imageName='"
                                + imageName + "'");
                    }

                    if (DateStamp != null) {
                        String Date = resultSet.getString(DateStamp);
                        System.out.print(", Date: " + Date);
                        resultSet = statement.executeQuery("SELECT imageName, DateStamp, imageTag FROM images where DateStamp='"
                                + DateStamp + "'");
                    }

                    if (imageTag != "" || imageTag != null) {
                        String Tag = resultSet.getString(imageTag);
                        System.out.print(", Tag: " + Tag);
                        resultSet = statement.executeQuery("SELECT imageName, DateStamp, imageTag FROM images where imageTag='"
                                + imageTag + "'");
                    }
                }// end while
            } // end try
            catch (Exception e) {
                e.printStackTrace();
            } // end catch                                                     
            try {
                resultSet.close();
                pt.close();
                connection.close();
            } // end try                                               
            catch (Exception exception) {
                exception.printStackTrace();
            } // end catch 
        } // end main`enter code here`

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM