使用数据库报错“java.sql.SQLException: No value specified for parameter 1”

错误日志

java.sql.SQLException: No value specified for parameter 1
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
	at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:1737)
	at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:1685)
	at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1396)
	at dao.impl.UserDaoImpl.selectByPage(UserDaoImpl.java:39)
	at service.impl.UserServiceImpl.selectByPage(UserServiceImpl.java:24)
	at servlet.UserServlet.doPost(UserServlet.java:38)
	at servlet.UserServlet.doGet(UserServlet.java:48)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
	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:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)

错误代码

public List selectByPage(int pageIndex, int pageSize) {
        // 实例化List集合
        List userList = new ArrayList<>();
        // 定义
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            // 获取数据库连接
            conn = DBUtils.getConnection();
            // 获取分页开始的索引
            int startIndex = (pageIndex - 1) * pageSize;
            // SQL语句
            String sql = "select * from users limit ?,?";
            // 获取Statement对象
            ps = conn.prepareStatement(sql);
            // 获取结果集
            rs = ps.executeQuery();
            // 遍历结果集
            while (rs.next()) {
                User user = new User();
                user.setId(rs.getInt(1));
                user.setUsername(rs.getString(2));
                user.setPassword(rs.getString(3));
                userList.add(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtils.release(conn, ps, rs);
        }
        return userList;
    }

错误原因

没有对传入的参数进行赋值。

解决

对传入的参数进行赋值即可。

正确代码

    public List selectByPage(int pageIndex, int pageSize) {
        // 实例化List集合
        List userList = new ArrayList<>();
        // 定义
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            // 获取数据库连接
            conn = DBUtils.getConnection();
            // 获取分页开始的索引
            int startIndex = (pageIndex - 1) * pageSize;
            // SQL语句
            String sql = "select * from users limit ?,?";
            // 获取Statement对象
            ps = conn.prepareStatement(sql);
            // 对参数进行赋值
            ps.setInt(1, pageIndex);
            ps.setInt(2, pageSize);
            // 获取结果集
            rs = ps.executeQuery();
            // 遍历结果集
            while (rs.next()) {
                User user = new User();
                user.setId(rs.getInt(1));
                user.setUsername(rs.getString(2));
                user.setPassword(rs.getString(3));
                userList.add(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtils.release(conn, ps, rs);
        }
        return userList;
    }

 

你可能感兴趣的:(异常处理)