·核心知识
可以使用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:
输出查询结果: