0

运行程序时java.lang.NullPointerException出现错误。似乎错误似乎在 try 块内: 以下 Java 代码rs = st.executeQuery(query); 中的方法regcustomers。请查看我的代码并帮助我了解我做错了什么。

import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.vastika.serlvet.dao.ConnectionDb;

public class RegistrationServlet extends HttpServlet {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        // Read the data
        String name = req.getParameter("name");
        String email = req.getParameter("email");
        String line1 = req.getParameter("addressline1");
        String city = req.getParameter("city");
        String state = req.getParameter("state");
        String country = req.getParameter("country");
        String userid = req.getParameter("username");
        String password = req.getParameter("password");
        insertToDatabase(name, email, line1, city, state, country, userid,
                password);
        // Forward to Shopping page
        req.getRequestDispatcher("shop.html").forward(req, res);
    }

    private void insertToDatabase(String name, String email, String line1,
            String city, String state, String country, String userid,
            String password) {

        ConnectionDb con = new ConnectionDb();
        Statement st = con.makeConnection();
        ResultSet rs = null;
        String query = "insert into regcustomers (Name, Email, Address, City, State, Country, Username, Password) values("+"'"+name+"'"+","+"'"+email+"'"+","+"'"+line1+"'"+","+"'"+city+"'"+","+"'"+state+"'"+","+"'"+country+"'"+","+"'"+userid+"'"+","+"'"+password+"'"+");";

        System.out.println(query);

        try {
            rs = st.executeQuery(query);
            System.out.println(rs.getRow());
            } 
        catch (SQLException e) {
            e.printStackTrace();        
            }

    }
}

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class ConnectionDb {
    public Statement makeConnection() {
        Connection conn = null;
        Statement st = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/onlineshopping", "root",
                    "test");
            st = conn.createStatement();
        } catch (Exception e) {
            e.getStackTrace();
        }
        return st;
    }
}
4

4 回答 4

3

发生的事情是您在以下代码中遇到异常

public Statement makeConnection() {
    Connection conn = null;
    Statement st = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/onlineshopping", "root",
                "test");
        st = conn.createStatement();
    } catch (Exception e) {
        e.getStackTrace();
    }
    return st;
}

然后返回st,这是null因为代码从未到达conn.createStatement().

顺便说一句,您实际上并没有打印Exception。使用e.printStackTrace().

此外,您实际上应该处理异常。

于 2013-09-28T20:01:32.813 回答
0

不用分号;

String query = "insert into regcustomers (Name, Email, Address, City, State, Country, Username, Password) values("+"'"+name+"'"+","+"'"+email+"'"+","+"'"+line1+"'"+","+"'"+city+"'"+","+"'"+state+"'"+","+"'"+country+"'"+","+"'"+userid+"'"+","+"'"+password+"'"+")";

ResultSet当你点击SELECT查询时它会返回

删除该ResultSet声明..

Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/DATABASENAME", "root", "");
Statement st = con.createStatement();

利用int count = st.executeUpdate();

于 2013-09-28T19:36:19.910 回答
0

您可以尝试这样做:

private void insertToDatabase(String name, String email, String line1,
            String city, String state, String country, String userid,
            String password) {

        ConnectionDb con = new ConnectionDb();
        Statement st = con.makeConnection();
        ResultSet rs = null;
        String query = "insert into regcustomers (Name, Email, Address, City, State, Country, Username, Password) values(?,?,?,?,?,?,?,?)";
        st.setString(1,name);
        st.setString(2,email);
        st.setString(3,line1);
        st.setString(4,street);
        st.setString(5,state);
        st.setString(6,country);
        st.setString(7,userid);
        st.setString(8,passwoname);

        try {
            int flag = st.executeUpdate(query);
            } 
        catch (SQLException e) {
            e.printStackTrace();        
            }

    }

我认为您想要做的不是查询,而是更新。所以而不是:

rs = st.executeQuery(query);

您可以执行以下操作:

int flag = st.executeUpdate(query);

看到这个有更多的信息。

Att:你有一个 NullPointer 异常,因为(也许)rs = st.executeQuery(query);什么都没有检索到。

希望对你有帮助^^

于 2013-09-28T19:52:46.780 回答
0

在 try catch 块中执行 SQL 查询时,会触发 java.lang.NullPointerException 错误,这是一种奇怪的情况。该查询更新了几个 JComboboxes 中的选定索引。这些 JComboboxes 最初链接到根据 shema 手动更新索引:

private void PriorityLoad6ActionPerformed(java.awt.event.ActionEvent evt) {                                              
        // TODO add your handling code here:
        NewSelectedIndex = PriorityLoad6.getSelectedIndex(); SetNewIndexes();
    } 

在这种情况下,当使用简单的

PriorityLoad6.setSelectedIndex(rs.getInt("PriorityLoad_6"));

触发了上述错误。在这种情况下,一种解决方案是使用 if 在查询期间不活动的“隔离”内部代码。例如:

private void PriorityLoad6ActionPerformed(java.awt.event.ActionEvent evt) {                                              
                if (SaveSettings.hasFocus() == false){NewSelectedIndex = PriorityLoad6.getSelectedIndex(); SetNewIndexes();}}

当然,此操作之前应放置适当的位置:

SaveSettings.requestFocus();

在调用 mysql 查询之前。

于 2017-03-09T19:55:38.943 回答