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