【发布时间】:2015-01-08 19:39:27
【问题描述】:
我已经创建了一个 jsp 表单和一个 servlet 来使用 tomcat 在 mysql 中填充数据库,但是当我点击“提交”按钮将值传递给数据库时,它显示了表中已影响 0 行的消息。在服务器日志中,它显示空指针异常。我已将 MySQL JDBC 驱动程序以及 JSTL 1.2.2 添加到库中。 我创建了两个排除的 java 类来建立数据库连接和执行查询。
这里是servlet代码:
public class SubmitUser extends HttpServlet {
private DbUpdate dbup = new DbUpdate();
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String profession = request.getParameter("profession");
String features = request.getParameter("features");
String sql = "INSERT INTO test values('profession','features')";
int i = dbup.insertValues(sql);
这是包含查询执行的 DbUpdate.java 文件
public class DbUpdate {
private Statement st;
private int i;
private Connection c;
private DbConnection dbcon = new DbConnection();
public int insertValues(String sql){
try {
c = dbcon.connectDB();
Statement st = c.createStatement();
System.out.println("connected");
i = st.executeUpdate(sql);
} catch (SQLException ex) {
Logger.getLogger(DbConnection.class.getName()).log(Level.SEVERE, null, ex);
}
return i;
}
public static void main (String[] args){
//DbConnection dbcon =new DbConnection();
//dbcon.connectDB();
DbUpdate dbup = new DbUpdate();
}
}
最后是建立连接的 DbConnection.java 文件
public class DbConnection {
private String driver = "com.mysql.jdbc.Driver";
private String url = "jdbc:mysql://localhost:3306/online_feedback";
private Connection con = null;
private Statement st;
//private int i;
public Connection connectDB(){
try {
Class.forName(driver);
Connection con = DriverManager.getConnection(url, "root", "");
System.out.println("Conn obj :::" + con);
} catch (ClassNotFoundException ex) {
Logger.getLogger(DbConnection.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(DbConnection.class.getName()).log(Level.SEVERE, null, ex);
}
return con;
}
public static void main (String []args){
DbConnection db = new DbConnection();
db.connectDB();
}
}
我不知道出了什么问题
提前致谢
这是我在 Servlet 日志中得到的内容
SEVERE: Servlet.service() for servlet [SubmitUser] in context with path [/Feedback] threw exception
java.lang.NullPointerException
at feedback.DbUpdate.insertValues(DbUpdate.java:32)
at feedback.SubmitUser.processRequest(SubmitUser.java:76)
at feedback.SubmitUser.doGet(SubmitUser.java:120)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
【问题讨论】:
-
你写的sql查询错误。
-
请显示 NullPointerException 堆栈跟踪。
-
每个班级都不需要
public static void main()。因为他们没有被执行。