关于如何解决为什么点击增删改按钮没有效果的问题

比如在我们用servlet写对学生表的增删改查功能。我举得栗子只一个单表查询,能说明问题就行。一般会有如下几个包:


在StudentDao中完成对数据的处理,也就是SQL语句是要写在这个里面。

@Override
	public void deleteStudentById(Integer id) {
		Connection connection=null;
		PreparedStatement pst=null;
		ResultSet rs=null;
		String sql="delete from student where id=?";
		try {
			connection=JdbcUtil.getConnection();
			pst=connection.prepareStatement(sql);
			
			pst.executeUpdate();
			pst.setInt(1, id);
		} catch (SQLException e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally {
			JdbcUtil.close(rs, pst, connection);
		}
	
	}

这段就是对删除功能的数据处理。


在确保其他部分都是对的情况下,在界面中点击删除按钮,会发现并没有反映,界面上也不会报错,但是eclipce中的console会报下面这种错:

信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
com.mysql.jdbc.JDBC4PreparedStatement@492898d1: delete from student where id=** NOT SPECIFIED **
java.sql.SQLException: No value specified for parameter 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2549)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2525)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2372)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2316)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2301)
at com.baidu.dao.StudentDao.deleteStudentById(StudentDao.java:48)
at com.baidu.service.StudentService.deleteStudentById(StudentService.java:18)
at com.baidu.controller.StudentServlet.delStudentList(StudentServlet.java:73)
at com.baidu.controller.StudentServlet.doGet(StudentServlet.java:27)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Unknown Source)

这个时候就应该知道是sql语句中有问题。仔细看其他部分也没毛病。但是你会发现


这个部分这样写是不合理的。应该先对id赋值,再去执行pst.executeUpdate();把位置换一下再去执行就OK啦~


如果还不行就要清一下缓存试试:

猜你喜欢

转载自blog.csdn.net/loveliness_peri/article/details/80376392