手记

Web前端JSP编程——使用预处理语句对象操作数据库

·核心知识      

       可以使用Connection的对象con调用prepareStatement(String sql)方法对参数sql指定的SQL语句进行预先编译,生成数据库的底层命令,并将该命令封装在PreparedStatement对象中。对于SQL语句中变动的部分,可以使用通配符“?”代替。例如:

PreparedStatement ps = con.prepareStatement(“insert into goodsinfo values(?,?,?,?)”);                                                

      然后使用对应的setXxx(int parameterIndex,xxx value)方法设置“?”代表的值,其中参数parameterIndex用来表示SQL语句中从左到右的第 parameterIndex个通配符号,value代表该通配符所代表的具体值。例如

ps.setInt(1,9);                                                                                                                                                                       

ps.setInt(2,"手机");                                                                                                                                                               

     若让SQL语句执行生效,需使用PreparedStatement的对象ps调用executeUpdate()方法。

     如果是查询,ps就调用executeQuery()方法,并返回到ResultSet对象。


·实例代码

实例一代码如下(实现向数据库中的表添加数据的功能):

本程序共分为三个文件,inputPrepareGoods.jsp、showPrepareGoods.jsp、UsePrepare.java(封装在bean包中),inputPrepareGoods.jsp、showPrepareGoods.jsp分别实现的功能是添加信息页面、输出全部信息页面,

inputPrepareGoods.jsp文件代码如下:

<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%>
<html>
<head>
<title>使用预处理语句</title>
</head>
<body bgcolor="LightYellow">
	<h4>课程号是主键,不能重复,每个信息都必须输入!</h4>
	<form action="showPrepareGoods.jsp" method="post">
	<table border="1">
		<tr>
			<td>课程号:</td>
			<td><input type="text" name="CNo"/></td>
		</tr>
		
		<tr>
			<td>课程名称:</td>
			<td><input type="text" name="CN"/></td>
		</tr>
		
		<tr>
			<td>教师姓名:</td>
			<td><input type="text" name="TN"/></td>
		</tr>
		
		<tr>
			<td>开课学期:</td>
			<td><input type="text" name="KKXQ"/></td>
		</tr>
		
		<tr>
			<td>课程学时:</td>
			<td><input type="text" name="CT"/></td>
		</tr>
		
		<tr>
			<td>课程学分:</td>
			<td><input type="text" name="SC"/></td>
		</tr>
		
		<tr>
			<td><input type="submit" value="添加"></td>
			<td><input type="reset" value="重置"></td>
		</tr>
	</table>
	</form>
</body>
</html>

showPrepareGoods.jsp文件代码如下:

<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%>
<%@ page import="bean.UsePrepare" %>
<html>
<head>
<title>使用预处理语句</title>
</head>
<body> 
<body bgcolor="AliceBlue">
	<%
		request.setCharacterEncoding("GBK");
	%>
	<jsp:useBean id="prepareGoods" class="bean.UsePrepare" scope="page"></jsp:useBean>
	<jsp:setProperty property="*" name="prepareGoods"/>
	<%
	 prepareGoods.addGoods();
	%>
	<jsp:getProperty property="queryResult" name="prepareGoods"/>
</body>
</html>

UsePrepare.java(封装在bean包中)文件代码如下:

package bean;
import java.sql.*;
public class UsePrepare {
	int CNo;
    String CN;
    String  TN;
    int KKXQ;
    int CT;
    int SC;
    StringBuffer queryResult;//查询所有数据
    StringBuffer queryResultBy;//根据条件查询所有数据
    
    public int getCNo() {
		return CNo;
	}
	public void setCNo(int CNo) {
		this.CNo = CNo;
	}
	public String getCN() {
		return CN;
	}
	public void setCN(String CN) {
		this.CN = CN;
	}
	public String getTN() {
		return TN;
	}
	public void setTN(String TN) {
		this.TN = TN;
	}
	public int getKKXQ() {
		return KKXQ;
	}
	public void setKKXQ(int KKXQ) {
		this.KKXQ = KKXQ;
	}
	public int getCT() {
		return CT;
	}
	public void setCT(int CT) {
		this.CT = CT;
	}
	public int getSC() {
		return SC;
	}
	public void setSC(int SC) {
		this.SC = SC;
	}
	//添加数据
    public void addGoods(){
    	Connection con = null;
    	PreparedStatement ps = null;
		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		try {
		 	con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=Teach","sa","数据库密码");
			ps=con.prepareStatement("insert into KC values(?,?,?,?,?,?)");
			ps.setInt(1, CNo);
			ps.setString(2, CN);
			ps.setString(3, TN);
			ps.setInt(4, KKXQ);
			ps.setInt(5, CT);
			ps.setInt(6, SC);
			ps.executeUpdate();
		}catch (SQLException e) {
			e.printStackTrace();
		}finally{
			try{
				if(ps!=null){
					ps.close();
				}
				if(con!=null){
					con.close();
				}
			}catch (SQLException e) {
				e.printStackTrace();
			}
		}
    }
    //获得所有信息
	public StringBuffer getQueryResult(){
		queryResult=new StringBuffer();
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs=null;
		try {
		Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	}
	try {
	 	con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=Teach","sa","数据库密码");
			ps=con.prepareStatement("select * from KC");
			rs=ps.executeQuery();
			queryResult.append("<table border=1>");
				queryResult.append("<tr>");
				queryResult.append("<th>CNo</th>");
				queryResult.append("<th>CN</th>");
				queryResult.append("<th>TN</th>");
				queryResult.append("<th>KKXQ</th>");
				queryResult.append("<th>CT</th>");
				queryResult.append("<th>SC</th>");
			queryResult.append("</tr>");
		while(rs.next()){
			queryResult.append("<tr>");
				queryResult.append("<td>"+rs.getString(1)+"</td>");
				queryResult.append("<td>"+rs.getString(2)+"</td>");
				queryResult.append("<td>"+rs.getString(3)+"</td>");
				queryResult.append("<td>"+rs.getString(4)+"</td>");
				queryResult.append("<td>"+rs.getString(5)+"</td>");
				queryResult.append("<td>"+rs.getString(6)+"</td>");
				queryResult.append("</tr>");
			}
			queryResult.append("</table>");
		}catch (SQLException e) {
			e.printStackTrace();
		}finally{
			try{
				if(rs!=null){
					rs.close();
				}
				if(ps!=null){
					ps.close();
				}
				if(con!=null){
					con.close();
				}
			}catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return queryResult;
	}
	//根据条件查询
	public StringBuffer getQueryPrepareResultBy(){
		StringBuffer queryPrepareResultBy = new StringBuffer();
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs=null;
		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		try {
		 	con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=Teach","sa","数据库密码");
		    String selectSql="select * from KC where 1=1 ";
			if(TN!=null&&TN.length()>0){
				selectSql=selectSql+" and TN='"+TN+"' ";
			}
			if(CT>0){
				selectSql=selectSql+" and CT>"+CT+" ";
			}
			if(CN!=null&&CN.length()>0){
				selectSql=selectSql+" and CN='"+CN+"' ";
			}
			ps=con.prepareStatement(selectSql);
			rs=ps.executeQuery();
			queryPrepareResultBy.append("<table border=1>");
				queryPrepareResultBy.append("<tr>");
				queryPrepareResultBy.append("<th>CNo</th>");
				queryPrepareResultBy.append("<th>CN</th>");
				queryPrepareResultBy.append("<th>TN</th>");
				queryPrepareResultBy.append("<th>KKXQ</th>");
				queryPrepareResultBy.append("<th>CT</th>");
				queryPrepareResultBy.append("<th>SC</th>");
				queryPrepareResultBy.append("</tr>");
			while(rs.next()){
				queryPrepareResultBy.append("<tr>");
				queryPrepareResultBy.append("<td>"+rs.getString(1)+"</td>");
				queryPrepareResultBy.append("<td>"+rs.getString(2)+"</td>");
				queryPrepareResultBy.append("<td>"+rs.getString(3)+"</td>");
				queryPrepareResultBy.append("<td>"+rs.getString(4)+"</td>");
				queryPrepareResultBy.append("<td>"+rs.getString(5)+"</td>");
				queryPrepareResultBy.append("<td>"+rs.getString(6)+"</td>");
				queryPrepareResultBy.append("</tr>");
			}
			queryPrepareResultBy.append("</table>");
		}catch (SQLException e) {
			e.printStackTrace();
		}finally{
			try{
				if(rs!=null){
					rs.close();
				}
				if(ps!=null){
					ps.close();
				}
				if(con!=null){
					con.close();
				}
			}catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return queryPrepareResultBy;
	}
}

页面运行效果:


在inputPrepareGoods.jsp页面输入添加的信息:


在showPrepareGoods.jsp页面查看所有数据信息:


实例二代码如下(实现条件查询数据库中的表数据的功能):

本程序共分为三个文件,inputPrepareQuery.jsp、showPrepareBy.jsp、UsePrepare.java(封装在bean包中),inputPrepareQuery.jsp、showPrepareBy.jsp分别实现的功能是输入查询条件页面、输出查询结果页面。

inputPrepareQuery.jsp文件代码如下:

<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%>
<html>
<head>
<title>使用预处理查询</title>
</head>
<body bgcolor="Wheat">
	<h4>输入查询条件!</h4>
	<form action="showPrepareBy.jsp" method="post">
	<table border="1">
		<tr>
			<td>教师姓名:</td>
			<td><input type="text" name="TN"/></td>
		</tr>
		
		<tr>
			<td>课程学时大于:</td>
			<td><input type="text" name="CT"/></td>
		</tr>
		
		<tr>
			<td>课程名称:</td>
				<td><input type="text" name="CN"/></td>
		</tr>
		
		<tr>
			<td><input type="submit" value="查询"></td>
			<td><input type="reset" value="重置"></td>
		</tr>
	</table>
	</form>
</body>
</html>

showPrepareBy.jsp文件代码如下:

<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%>
<%@ page import="bean.UsePrepare" %>
<html>
<head>
<title>使用预处理查询</title>
</head>
<body>  
<body bgcolor="AliceBlue">

	<%
		request.setCharacterEncoding("GBK");
	%>
	<jsp:useBean id="goods" class="bean.UsePrepare" scope="page"></jsp:useBean>
	<jsp:setProperty property="*" name="goods"/>
	<jsp:getProperty property="queryPrepareResultBy" name="goods"/><!-- 获得查询结果 -->
</body>
</html>

UsePrepare.java(封装在bean包中)文件与实例一中相同,其中实现功能的函数是queryPrepareResultBy();

页面运行效果:

输入查询条件:课时(CT)大于——60:


输出查询结果:



原文出处

0人推荐
随时随地看视频
慕课网APP