日理万机的杨总 2022-11-21 15:55 采纳率: 25%
浏览 42

web使用数据库时出问题

问题遇到的现象和发生背景

最近在学web,在链接数据库时,使用搜索框搜索数据库的内容时报错Cannot invoke "java.sql.ResultSet.next()" because "rs" is null,不知道哪错了,

用代码块功能插入代码,请勿粘贴截图

ListYangWeb.java

package cn.edu.cidp;

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

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

/**
 * Servlet implementation class ListYangWeb
 */
@WebServlet("/ListYangWeb")
public class ListYangWeb extends HttpServlet {
  private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ListYangWeb() {
        super();
        // TODO Auto-generated constructor stub
    }

  /**
   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    //response.getWriter().append("Served at: ").append(request.getContextPath());
    //Connection conn = null;
    response.setContentType("text/html;utf-8");
    response.setCharacterEncoding("utf-8");
    String keyword = request.getParameter("keyword");
    //String sql;
    String sql = "select * from studentdata";
    //if(keyword != null )
    if(keyword != null && keyword.trim().length()>0)
    {
      sql += "where id like '%"+keyword+"%' and name like '%"+keyword+"%'";
    }
    
    Connection conn = null;
    conn = MySqlUtil.getConnection();
    ResultSet rs = MySqlUtil.executeSelect(conn, sql);
    
      
      try {
        response.getWriter().println("<form action = '#' method = 'post'>");
        response.getWriter().println("<input type = 'text' name = 'keyword'>");
        response.getWriter().println("<input type = 'submit' value = 'Search'/>");
        response.getWriter().println("</form>");
        response.getWriter().println("");
        while(rs.next())
        {
          
          StringID= rs.getString("id");
          StringName= rs.getString("name");
          StringPwd= rs.getString("pwd");
          response.getWriter().println("");
          response.getWriter().println("");
          response.getWriter().println("");
          response.getWriter().println("");
          response.getWriter().println("");
          response.getWriter().println("");
          
          //response.getWriter().println(id +","+Name+","+Pwd);
          
        }
        response.getWriter().println("
"+ID+""+Name+""+Pwd+"">删除
"
); conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } /* try { Class.forName("com.mysql.cj.jdbc.Driver"); conn = DriverManager.getConnection( MySqlUtil.URL,MySqlUtil.Login_User,MySqlUtil.Login_Pwd); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); response.getWriter().println(""); while(rs.next()) { String id = rs.getString("id"); String Name = rs.getString("name"); String Pwd = rs.getString("pwd"); response.getWriter().println(""); response.getWriter().println(""); response.getWriter().println(""); response.getWriter().println(""); response.getWriter().println(""); //response.getWriter().println(id +","+Name+","+Pwd); } response.getWriter().println("
"+id+""+Name+""+Pwd+"
"); rs.close(); stmt.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } */
} /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }

MySqlUtil.java

package cn.edu.cidp;

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

public class MySqlUtil {
    public static String URL = "jdbc:mysql://localhost:3306/demo";
    public static String Login_User = "root";
    public static String Login_Pwd = "YANG20020803";

    public static Connection getConnection()//获得数据库连接
    {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(
                    MySqlUtil.URL,MySqlUtil.Login_User,MySqlUtil.Login_Pwd);
            return conn;
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return null;
    }
    public static ResultSet executeSelect(Connection conn,String sql) {
        //Connection conn = null;
        try {
          Class.forName("com.mysql.jdbc.Driver");
          conn = DriverManager.getConnection(
                    MySqlUtil.URL,MySqlUtil.Login_User,MySqlUtil.Login_Pwd);
          Statement stmt = conn.createStatement();
          ResultSet rs = stmt.executeQuery(sql);
          //int ret = stmt.executeQuery(sql);
          //stmt.close();  Operation not allowed after ResultSet closed
          
          return rs;
        } catch (ClassNotFoundException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        } catch (SQLException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
        //查找完不能马上关闭conn
        return null;
    }
    
    //insert delete update
    public static int executeUpdate(String sql)
    {
        Connection conn = null;
        try {
          Class.forName("com.mysql.jdbc.Driver");
          conn = DriverManager.getConnection(
                    MySqlUtil.URL,MySqlUtil.Login_User,MySqlUtil.Login_Pwd);
          Statement stmt = conn.createStatement();
          //ResultSet rs = stmt.executeQuery(sql);
          int ret = stmt.executeUpdate(sql);
          stmt.close();
          
          return ret;
        } catch (ClassNotFoundException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        } catch (SQLException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
        finally
        {
          try {
            conn.close();
          } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
        }
        return -1;
            
    }
    
}

运行结果及报错内容

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'like '%1%'' at line 1

Cannot invoke "java.sql.ResultSet.next()" because "rs" is null

  • 写回答

1条回答 默认 最新

  • 我是个老六 2022-11-21 16:00
    关注

    ResultSet为空,证明你的sql有问题,你把你的sql打印出来 放到数据库试试能不能运行?

    评论

报告相同问题?

问题事件

  • 创建了问题 11月21日

悬赏问题

  • ¥15 ArcGIS批量裁剪
  • ¥15 labview程序设计
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 游戏盾如何溯源服务器真实ip?
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥50 win10链接MySQL