问题遇到的现象和发生背景
最近在学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())
{
String ID = rs.getString("id");
String Name = rs.getString("name");
String Pwd = rs.getString("pwd");
response.getWriter().println("");
response.getWriter().println(""+ID+" ");
response.getWriter().println(""+Name+" ");
response.getWriter().println(""+Pwd+" ");
response.getWriter().println("">删除 ");
response.getWriter().println("");
//response.getWriter().println(id +","+Name+","+Pwd);
}
response.getWriter().println("
");
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(""+id+" ");
response.getWriter().println(""+Name+" ");
response.getWriter().println(""+Pwd+" ");
response.getWriter().println(" ");
//response.getWriter().println(id +","+Name+","+Pwd);
}
response.getWriter().println("
");
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