⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 querydbservlet.java

📁 本代码以J2SE 5.0为开发环境
💻 JAVA
字号:
package book.servlet;

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

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.sql.rowset.CachedRowSet;

import book.database.DBConnector;
import book.servlet.page.PageableResultSet;
import book.servlet.page.PageableResultSetImpl;

import com.sun.rowset.CachedRowSetImpl;
/**
 * 查询数据库的Servlet
 */
public class QueryDBServlet extends HttpServlet {
	
	// 数据库连接变量
	Connection con = null;
	Statement sm = null;
	/**
	 * 初始化Servlet实例时调用该方法
	 */
	public void init() throws ServletException {
		super.init();
		// 从web.xml中读取servlet的配置参数
		String dbURL = this.getServletConfig().getInitParameter("dbURL");
		String driver = this.getServletConfig().getInitParameter("driver");
		String username = this.getServletConfig().getInitParameter("username");
		String password = this.getServletConfig().getInitParameter("password");
		try {
			// 连接数据库
			con = DBConnector.getConnection(driver, dbURL, username, password);
			sm = con.createStatement();
		} catch (Exception e) {
			throw new ServletException(e);
		}
	}
	/**
	 * 处理doGet请求,当JSP表单中的method为get时,会调用该方法
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		this.doPost(request, response);
	}
	/**
	 * 处理doPost请求,当JSP表单中的method为post时,会调用该方法
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		// 从request中获取JSP页面上表单的输入参数
		String sql = request.getParameter("querySQL");
		int pageIndex = Integer.parseInt((String)request.getParameter("pageIndex"));
		int pageSize = Integer.parseInt((String)request.getParameter("pageSize"));
		String servleturl = request.getParameter("servleturl");
		String errorurl = request.getParameter("errorurl");
		try {
			// 判断SQL语句是否为查询语句,以放置修改数据库
			sql = sql.trim();
			if (!sql.toUpperCase().startsWith("SELECT ")){
				throw new Exception("输入的SQL语句必须是查询语句!");
			}
			// 执行查询
			ResultSet rs = sm.executeQuery(sql);
			
			// 为了防止数据库连接被关闭时,ResultSet中的数据无法读取的问题
			// 在这里将ResultSet转换成CachedRowSet,它存在于内存中,不依赖于数据库。
			CachedRowSet crs = new CachedRowSetImpl();
			// populate方法把ResultSet中的数据导入到CachedRowSet中
			crs.populate(rs);
			
			// 构造能够分页的PageableResultSet对象
			PageableResultSet pageResultSet = new PageableResultSetImpl(crs);
			// 设置每页的记录数和当前页码
			pageResultSet.setPageSize(pageSize);
			pageResultSet.gotoPage(pageIndex);
			// 将结果放入session中
			HttpSession session = request.getSession();
			session.setAttribute("pageResultSet", pageResultSet);
			
			// 本Servlet处理完毕,将请求转发给下一页面。
			request.getRequestDispatcher(servleturl).forward(request, response);
		} catch (Exception e){
			// 查询错误时,清除Session的信息
			HttpSession session = request.getSession();
			session.removeAttribute("pageResultSet");
			// 出现异常时,记录异常信息
			request.setAttribute("errormsg", e.getMessage());
			// 将请求转发给错误页面
			request.getRequestDispatcher(errorurl).forward(request, response);
		}
	}
	/**
	 * 销毁Servlet实例时,调用该方法
	 */
	public void destroy() {
		super.destroy();
		try {
			// 关闭Statement
			if (sm != null){
				sm.close();
			}
		} catch (Exception e1){
		}
		try {
			// 关闭Connection
			if (con != null){
				con.close();
			}
		} catch (Exception e1){
		}
	}
	
	public String getServletInfo() {
		return "Query Database Servlet";
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -