版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JSP访问数据库【知识目标】理解JDBC的概念。掌握JDBC连接数据库的步骤。掌握JDBC对数据库的操做方法。理解事务的基本概念。理解JDBC对数据库元数据的操作。【能力目标】能配置JDBC数据库驱动。能完成JDBC连接数据库的操作。能使用JDBC对数据库进行增、删、查、改。能使用JDBC完成数据库基本事务操作。能使用JDBC获取数据库元数据。JSP访问数据库6.1JDBC概述6.2JDBC常用的API接口与类6.3JDBC访问数据库的步骤6.4JDBC事务6.5JDBC元数据6.1.1JDBC的概念6.1.2JDBC驱动6.1JDBC概述JDBC的全称是JavaDatabaseConnectivity(即Java数据库连接),它是一种可以执行标准化查询语言的JavaAPI。Java程序可通过JDBCAPI连接到不同种类的数据库,并使用标准SQL来完成对数据库的查询、更新。6.1.1JDBC的概念JDBC驱动程序是JDBCAPI与数据库之间的转换层,负责将JDBC调用转换为特定的数据库访问。JDBC驱动的四种连接方式6.1.2JDBC驱动JDBC相关的API存在java.sql包中。6.2JDBC常用的API接口与类类或接口功能描述DriverManager类管理数据库中的所有驱动程序。Connection接口提供创建语句以及管理连接及其属性的方法。Statement接口用于执行数据库的SQL语句。ResultSet接口SQL查询语句返回的结果集。PreparedStateme接口用于发送准备好的语句或基本SQL语句(继承自Statement)。Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用。在编写JDBC程序时,必须要把所使用的数据库驱动程序或类加载到项目中。6.2JDBC常用的API接口与类
1、Driver接口DriverManager类用来管理数据库中的所有驱动程序,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动程序之间建立连接。6.2JDBC常用的API接口与类
2、DriverManager类方法功能描述ConnectiongetConnection(Stringurl,Stringuser,Stringpassword)指定三个入口参数(依次是连接数据库的URL、用户名和密码)来获取与数据库的连接voidsetLoginTimeout(inttime)获取驱动程序试图登录到某一数据库时可以等待的最长时间,以秒为单位voidprintln(Stringmessage)将一条消息打印到当前的JDBC日志流中Connection接口代表与特定的数据库连接,在连接上下文中执行SQL语句并返回结果。6.2JDBC常用的API接口与类
3、Connection接口方法功能描述StatementcreateStatement()创建一个Statement对象PreparedStatementprearedStatement(Stringsql)为指定sql语句创建预处理对象PreparedStatementvoidcommit()使上一次提交或回滚之后进行的更改成为持久更改,并释放此Connection对象当前所持有的所有数据库锁voidsetAutoCommit(Booleanflag)设置对数据库的更改是否为自动提交,true-自动提交,false-手动提交。若不显式调用该方法则默认是自动提交。voidrollback()回滚当前事务中的所有改动,并释放当前连接持有的数据库锁voidclose()立即释放连接对象的数据库和JDBC资源Statement接口用于在已经建立连接的基础上向数据库发送SQL语句,该接口的对象用于执行不带参数的简单的SQL语句。6.2JDBC常用的API接口与类
4、Statement接口方法功能描述ResultSetexecute(Stringsql)执行给定的不含参数的sql语句,返回多个ResultSet对象ResultSetexecuteQuery(Stringsql)执行给定的不含参数的select语句,返回单个ResultSet对象intexecuteUpdate(Stringsql)执行给定的不含参数的update、insert或delete语句,返回方法执行后影响的记录条数voidclose()释放Statement对象占用的数据库和JDBC资源PreparedStatment接口继承自Statement接口,接口对象用于执行带参数的SQL语句,并保存语句的预编译结果,使再次执行语句时效率更高。6.2JDBC常用的API接口与类
5、PreparedStatment接口方法功能描述voidsetType(intindex,typevalue)将序号为index(从1开始编号)的参数的值设置为type类型的value,type泛指所有数据类型,如String、double,int等voidsetNull(intindex,intsqlType)将序号为index的参数的值设置为sqlType类型的空值,sqlType为java.sql.Types中定义的SQL类型ResultSetexecuteQuery()执行PreparedStatment对象中包含的预编译的含参数的select语句,返回单个ResultSet对象intexecuteUpdate()执行PreparedStatment对象中包含的预编译的含参数的update、insert或delete语句,返回方法执行后影响的记录条数ResultSet接口对象类似于一个临时表(实际上也是一个缓存区),用来暂时存放数据库查询操作所获得的结果集。ResultSet对象具有用于指向记录的指针,指针所指记录称为当前行记录,指针开始的位置在第一条记录之前。6.2JDBC常用的API接口与类
6、ResultSet接口6.2JDBC常用的API接口与类
6、ResultSet接口方法功能描述typegetType(intcolumnIndex)获取ResultSet对象当前行列号为columnIndex列的值,type泛指所有数据类型,如String、double,int等typegetType(StringcolumnLabel)获取ResultSet对象当前行列名为columnLabel列的值,type泛指所有数据类型,如String、double,int等booleanfirst() 将指针移到当前记录的第一行booleanlast()将指针移到当前记录的最后一行booleannext()将指针向下移一行booleanbeforeFirst()将指针移到数据集的开头(第一行之前的位置)booleanafterLast()将指针移到数据集的尾部(最后一行之后的位置)booleanabsolute(intindex)将指针移到数据集给定编号index的行6.2JDBC常用的API接口与类
6、ResultSet接口方法功能描述booleanisFirst()判断指针是否位于当前数据集的第一行。如果是返回true,否则返回falsebooleanisLast()判断指针是否位于当前数据集的最后一行。如果是返回true,否则返回falsevoidupdateType(intcolumnIndex,typevalue)用type类型的值value更新当前行列号为columnIndex列的值。type泛指所有数据类型,如String、double,int等voidupdateType(StringcolumnLabel,typevalue)用type类型的值value更新当前行列名为columnLabel列的值。type泛指所有数据类型,如String、double,int等intgetRow()获取当前行的行号voidinsertRow()将数据集中新插入行的内容插入到数据库voidupdateRow()将对数据集中当前行修改后的内容同步到数据库voiddeleteRow()删除数据集中的当前行,但是不同步到数据库中,而是在执行close()方法之后同步到数据库中voidclose()释放数据集对象占用的数据库和JDBC资源6.3.1加载数据库驱动6.3.2获取数据库连接6.3.3创建执行语句对象6.3.4执行SQL语句并处理执行结果6.3.5异常处理及释放资源6.3JDBC访问数据库的步骤方法调用语句:常见数据库的驱动程序字符串示例:6.3.1加载数据库驱动Class.forName(StringDriverName);数据库驱动程序字符串MySQLcom.mysql.jdbc.DriverSQLServer2000及以上com.microsoft.sqlserver.jdbc.SQLServerDriverOracle9i及以上oracle.jdbc.driver.OracleDriverJDBC-ODBC桥接sun.jdbc.odbc.JdbcOdbcDriverClass.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");Class.forName("com.mysql.jdbc.Driver");注意:如果采用JDBC-ODBC桥接方式注册数据库驱动程序,需要确保已完成对ODBC数据源的配置。如果采用纯JDBC驱动方式注册数据库驱动程序,需要到相应的数据库厂商网站上下载厂商驱动程序(即驱动jar包),或从数据库安装目录下找到相应的厂商驱动包,拷贝到如图所示项目的WEB-INF/lib目录下。6.3.1加载数据库驱动MySQL驱动jar包SQLServer驱动jar包创建连接对象的语句格式:常见数据库的连接字符串(模板)6.3.2获取数据库连接Connection对象名=DriverManager.getConnection(Stringurl,Stringuser,Stringpassword);数据库连接字符串(模板)MySQLjdbc:mysql://数据库服务器IP:3306/数据库名SQLServer2000及以上jdbc:sqlserver://数据库服务器IP:1433;DatabaseName=数据库名Oracle9i及以上jdbc:oracle:thin:@数据库服务器IP:1521:数据库名JDBC-ODBC桥接jdbc:odbc:数据源名示例:6.3.2获取数据库连接//创建MySQL数据库education的连接对象conn,数据库登录用户名为root,密码为mysql2018Connectionconn=DriverManager.getConnection("jdbc:mysql://localhost:3306/education",
"root","mysql2018");//创建SQLServer数据库education的连接对象conn,数据库登录用户名为sa,密码为sql123.Connectionconn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=education","sa","sql123.");创建语句的语法格式:示例6.3.3创建执行语句对象
1、创建Statement对象Statement对象名=Connection对象.createStatement();//使用连接对象conn创建执行语句对象smStatementsm=conn.createStatement();PreparedStatement接口是Statement接口的子接口,用于发送准备好的基本SQL语句。优点:因为该接口对象中包含的SQL语句是预编译的,因此当需要多次执行同一条SQL语句时,可以大大提高执行效率;可以防止注入式攻击。创建语句的语法格式:6.3.3创建执行语句对象
2、创建PreparedStatement对象PreparedStatement对象名=Connection对象.prepareStatement(Stringsql);调用prepareStatement()方法时设置的参数即是要执行的SQL语句,需要注意的是,如果该SQL语句可具有一个或多个待赋值的IN参数,其中每个IN参数用“?”作为占位符,然后在创建了PreparedStatement对象后,再使用该PreparedStatement对象调用方法用参数值去替换“?”。示例:6.3.3创建执行语句对象
2、创建PreparedStatement对象//根据专业查询学生表中的全部学生Stringsql="SELECT*FROMstudentWHEREmajor=?";//使用连接对象conn创建预执行语句对象psPreparedStatementps=conn.prepareStatement(sql);
//将ps预执行的SQL语句中第1个IN参数设置为变量major的值ps.setString(1,major);要实现对数据库信息的查询(Select语句),需要执行语句对象调用executeQuery()方法并将查询后的结果放入数据集ResultSet类的对象中,然后根据实际需要对得到的数据集对象(类似一张二维表,一行对应一条查询记录)进行逐行处理。创建数据集对象方法1:创建数据集对象方法2:6.3.4执行SQL语句并处理执行结果
1、查询数据信息ResultSet对象名=Statement对象.executeQuery(Stringsql);ResultSet对象名=PreparedStatement对象.executeQuery();【例6-3-1】:使用Statement对象查询指定数据库表信息<html><head><metacharset="UTF-8"><title>输入数据</title></head><body><formaction="select_Sta.jsp"method="post>
请输入专业名称:<inputname="major"type="text">
<inputtype="submit"value="确定"></form></body></html>input.html【例6-3-1】:使用Statement对象查询指定数据库表信息<%@pagecontentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@pageimport="java.sql.*"%>
<html><body><tableborder="1">
<tr><th>学号</th><th>姓名</th><th>学院</th></tr><%request.setCharacterEncoding("UTF-8");Stringmajor=request.getParameter("major");if(major==null||major==""){major="软件与信息服务";}//1、加载SQLServer数据库的驱动Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//2、创建连接本机数据库education的连接对象connConnectionconn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=education","sa","sql123.");
select_Sta.jsp【例6-3-1】:使用Statement对象查询指定数据库表信息//3、使用连接对象conn创建执行语句对象smStatementsm=conn.createStatement();//4.1、编写查询SQL语句:根据指定专业查询学生信息(学号、姓名、学院)Stringsql="SELECTstudentId,sname,collegeFROMstudentWHEREmajor='"+major+"'";//4.2、通过执行语句对象sm执行指定SQL语句并生成数据集对象rsResultSetrs=sm.executeQuery(sql);
//4.3、循环输出数据集rs中所有数据while(rs.next()){//逐行移动数据集对象rs的游标,直至最后%>
<tr>
<td><%=rs.getString("studentId")%></td>
<td><%=rs.getString("sname")%></td>
<td><%=rs.getString("college")%></td>
</tr><%}%></table></body></html>select_Sta.jsp【例6-3-1】:使用Statement对象查询指定数据库表信息【例6-3-2】:使用PreparedStatement对象查询指定数据库表信息<html><head><metacharset="UTF-8"><title>输入数据</title></head><body><formaction="select_Pre..jsp"method="post>
请输入专业名称:<inputname="major"type="text">
<inputtype="submit"value="确定"></form></body></html>input.html【例6-3-2】:使用PreparedStatement对象查询指定数据库表信息<%@pagecontentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@pageimport="java.sql.*"%>
<html><body><tableborder="1">
<tr><th>学号</th><th>姓名</th><th>学院</th></tr><%request.setCharacterEncoding("UTF-8");Stringmajor=request.getParameter("major");if(major==null||major==""){major="软件与信息服务";}//1、加载SQLServer数据库的驱动Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//2、创建连接本机数据库education的连接对象connConnectionconn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=education","sa","sql123.");
select_Pre.jsp【例6-3-2】:使用PreparedStatement对象查询指定数据库表信息select_Pre.jsp//3.1、编写查询SQL语句:根据指定专业查询学生信息(学号、姓名、学院)Stringsql="SELECTstudentId,sname,collegeFROMstudentWHEREmajor=?";
//3.2、使用连接对象conn创建预执行语句对象psPreparedStatementps=conn.prepareStatement(sql);//3.3、将ps预执行的SQL语句中第1个IN参数设置为变量major的值ps.setString(1,major);
//4、通过预执行语句对象ps执行指定SQL语句并生成数据集对象rsResultSetrs=ps.executeQuery();while(rs.next()){//逐行移动数据集对象rs的游标,直至最后%>
<tr>
<td><%=rs.getString("studentId")%></td>
<td><%=rs.getString("sname")%></td>
<td><%=rs.getString("college")%></td>
</tr><%}%></table></body></html>【例6-3-2】:使用PreparedStatement对象查询指定数据库表信息要实现对数据库信息的修改(Insert、Update和Delete),都是使用执行语句对象调用executeUpdate()方法来执行指定的SQL语句,该方法调用后会返回一个整型值,该值即是执行SQL语句后对数据库表产生影响的信息记录条数。执行指定SQL语句方法1:执行指定SQL语句方法2:6.3.4执行SQL语句并处理执行结果
2、修改数据信息int变量名=Statement对象.executeUpdate(Stringsql);int变量名=PreparedStatement对象.executeUpdate();【例6-3-3】:使用Statement对象插入一条信息到指定数据库表insert_Sta.jsp<%@pagecontentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@pageimport="java.sql.*"%><html><body><%StringstudentId=request.getParameter("studentId");//学生学号if(studentId==null||studentId==""){studentId="401";}//1、加载SQLServer数据库的驱动Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//2、创建连接本机数据库education的连接对象connConnectionconn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=education","sa","sql123.");//3、使用连接对象conn创建执行语句对象smStatementsm=conn.createStatement();【例6-3-3】:使用Statement对象插入一条信息到指定数据库表insert_Sta.jsp//4.1、编写查询SQL语句:向student表中插入一条学生记录Stringsql="Insertintostudentvalues('"+studentId+"','王明','人工智能与大数据','软件工程',)";//4.2、通过执行语句对象sm执行指定SQL语句并返回影响记录条数intcount=sm.executeUpdate(sql);//4.3、处理执行结果:影响记录条数不为0则记录插入成功否则插入失败if(count!=0){
out.println("数据信息插入成功!");}else{out.println("数据信息插入失败!");}%></body></html>【例6-3-4】:使用PreparedStatement对象插入一条信息到指定数据库表insert_Pre.jsp<%@pagecontentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@pageimport="java.sql.*"%><html><body><%StringstudentId=request.getParameter("studentId");//学生学号if(studentId==null||studentId==""){studentId="402";}//1、加载SQLServer数据库的驱动Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//2、创建连接本机数据库education的连接对象connConnectionconn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=education","sa","sql123.");【例6-3-4】:使用PreparedStatement对象插入一条信息到指定数据库表//3.1、编写查询SQL语句:向student表中插入一条学生记录Stringsql="Insertintostudentvalues(?,'李晓红','人工智能与大数据','移动应用开发',)";//3.2、使用连接对象conn创建预执行语句对象psPreparedStatementps=conn.prepareStatement(sql);//3.3、将ps预执行的SQL语句中第1个IN参数设置为变量studentId的值ps.setString(1,studentId);
//4、通过预执行语句对象ps执行指定SQL语句并返回影响记录条数intcount=ps.executeUpdate();if(count!=0){//影响记录条数不为0则记录插入成功否则插入失败out.println("数据信息插入成功!");}else{out.println("数据信息插入失败!");}%></body></html>insert_Pre.jsp通常的做法是使用try-catch-finally语句结构,将JDBC访问数据库的所有操作代码放入try语句块中,根据可能出现的异常情况使用1个到多个catch语句块对各类异常进行处理,并在finally语句块中关闭数据库连接对象等一系列在JDBC操作中创建的对象。6.3.5异常处理及释放资源【例6-3-5】:在JDBC操作中加入异常处理并及时释放资源<%@pagecontentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@pageimport="java.sql.*"%><html><body><%StringstudentId=request.getParameter("studentId");//学生学号if(studentId==null||studentId==""){studentId="401";}Connectionconn=null;//声明数据连接对象connStatementsm=null;//声明执行语句对象smtry{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=education","sa","sql123.");sm=conn.createStatement();Stringsql="Insertintostudentvalues('"+studentId+"','王明','人工智能与大数据','软件工程',)";intcount=sm.executeUpdate(sql);if(count!=0)out.println("数据信息插入成功!");elseout.println("数据信息插入失败!");}catch(Exceptionex){out.println("数据库操作发生异常,数据信息插入失败!");}finally{if(sm!=null)sm.close();//如果执行语句对象sm已创建则关闭该对象
if(conn!=null)conn.close();//如果数据连接对象conn已创建则关闭该对象}%></body></html>6.4.1什么事务6.4.2JDBC事务操作6.4JDBC事务事务是由一步或几步数据库操作序列组成的逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行。事务具备4个特性:原子性:事务是应用中不可再分的最小逻辑执行体。一致性:事务执行的结果,使数据库从一个一致状态,变到另一个一致的状态。隔离性:各个事务的执行互不干扰。持续性:事务对数据做的任何改变都要记录到永久存储器中。6.4.1什么事务当事务所包含的全部数据库操作都成功执行后,应该提交事务,使这些修改永久生效。事务提交有以下两种方式:显式提交:使用commit()方法。自动提交:执行DDL或DCL语句,或者程序正常退出。当事务所包含的任意个数据库操作执行失败后,应该回滚事务,使该事务中所做的修改全部失效。事务回滚有以下两种方式:显式回滚:使用rollback()方法。自动回滚:系统错误或者强行退出。6.4.1什么事务JDBC事务操作的方法都位于java.sql.Connection中。JDBC的事务操作默认是自动提交。6.4.2JDBC事务操作try{连接对象.setAutoCommit(false);//将自动提交设置为false
执行语句对象.executeUpdate(SQL1);//执行修改操作执行语句对象.executeQuery(SQL2);//执行查询操作……连接对象.commit();//当多个操作成功后手动提交}catch(Exceptione){连接对象.rollback();//一旦其中一个操作异常都将回滚,使多个操作都不成功}【例6-4-1】:使用JDBC的事务操作向数据表插入多条数据记录<%StringstudentId=request.getParameter("studentId");//学生学号if(studentId==null||studentId==""){studentId="100";}Connectionconn=null;Statementsm=null;try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=education","sa","sql123.");sm=conn.createStatement();Stringsql1="Insertintostudentvalues('"+studentId+"','王明','人工智能与大数据','软件工程',)";Stringsql2="Insertintostudentvalues('"+(Integer.parseInt(studentId)+1)+"','李志','人工智能与大数据','软件与信息服务','')"; conn.setAutoCommit(false);//将自动提交设置为false
intcount1=sm.executeUpdate(sql1);//执行指定SQL语句1并返回影响记录条数
intcount2=sm.executeUpdate(sql2);//执行指定SQL语句2并返回影响记录条数mit();//当两个操作成功后手动提交
out.println("成功插入"+(count1+count2)+"条数据信息!");}catch(Exceptionex){conn.rollback();//一旦其中一个操作出错都将回滚,使两个操作都不成功out.println("数据库操作发生异常,数据信息插入失败!");}finally{if(sm!=null)sm.close();//如果执行语句对象sm已创建则关闭该对象
if(conn!=null)conn.close();//如果数据连接对象conn已创建则关闭该对象}%>在插入学号101时引发异常,导致两条数据都未插入数据库的元数据:描述数据库中信息的数据,例如当前数据库中有多少张表、某个表的结构如何等。分类:数据库元数据(DatabaseMetaData)参数元数据(ParameterMetaData)结果集元数据(ResultSetMetaData)6.5JDBC元数据通过JDBC的数据连接类Connection对象的getMetaData()方法,可获得数据库对应元数据接口DatabaseMetaData的对象,该类常用方法如表所示,通过DatabaseMetaData类对象调用相应方法就可以获取数据库基本信息。6.5JDBC元数据
1、数据库元数据方法功能描述StringgetDatabaseProductName()返回数据库的产品名称StringgetDatabaseProductVersion()返回数据库的版本号StringgetDriverName()返回驱动程序的名称StringgetURL()返回数据库的URL【例6-5-1】:获取数据库元数据<%@pagecontentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@pageimport="java.sql.*"%><html><body><%Connectionconn=null;try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=education","sa","sql123.");DatabaseMetaDatadbMetaData=conn.getMetaData();out.println("数据库的产品名称:"+dbMetaData.getDatabaseProductName()+"<br>");out.println("数据库的版本号:"+dbMetaData.getDatabaseProductVersion()+"<br>");out.println("数据库驱动程序:"+dbMetaData.getDriverName()+"<br>");out.println("数据库的URL:"+dbMetaData.getURL()+"<br>");}catch(Exceptionex){out.println("数据库操作发生异常,数据信息查询失败!");}finally{
if(conn!=null)conn.close();}%></body></html>通过接口PreparedStatement的对象调用getParameterMetaData()方法可以获得ParameterMetaData的对象,此类元数据用于获取PreparedStatement接口对象包含的预编译SQL语句的一些信息,该类的常用方法如表所示。6.5JDBC元数据
2、参数元数据方法功能描述intgetParameterCount()获取预编译SQL语句的参数的个数StringgetParameterClassName(intindex)获取预编译SQL语句index号参数的类型名StringgetParameterTypeName(intindex)获得预编译SQL语句index号参数的SQL类型【例6-5-2】:获取参数元数据<%Connectionconn=null;PreparedStatementps=null;
try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=education","sa","sql123.");Stringsql="SELECTstudentId,sname,collegeFROMstudentWHEREmajor=?";
ps=conn.prepareStatement(sql);ParameterMetaDatapMetaData=ps.getParameterMetaData();out.println("SQL语句的参数个数:"+pMetaData.getParameterCount()+"<br>");out.println("SQL语句参数1的类名:"+pMetaData.getParameterClassName(1)+"<br>");out.println("SQL语句参数1的sql类型:"+pMetaData.getParameterTypeName(1)+"<br>");}catch(Exceptionex){out.println("数据库操作发生异常,数据信息查询失败!");}finally{
if(ps!=null)ps.close();
if(conn!=null)conn.close();象}%>通过数据集类Res
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度总承包方与分包方之间的EPC工程合同
- 2024年度工程分包合同之担保合同
- 2024年度版权许可使用合同标的及详细权利义务规定2篇
- 2024年度船舶港口变形缝防撞设施合同
- 2024年度网络安全产品购销与技术服务合同
- 前厅课件教学课件
- 四期G区施工组织设计(技术标)
- 2024年度电梯设备安装工程协议
- 门店促销策划与执行课件
- 2024年度电商企业公共关系服务合同2篇
- 煤矿灾害预防及事故应急管理
- 餐饮服务电子教案 学习任务4 鸡尾酒调制
- 统编版 高中语文 必修上册 生命的诗意第三单元大单元教学
- 建筑施工安全生产治本攻坚三年行动工作计划
- 河道防汛应急预案(6篇)
- 电工登高作业安全操作规程
- 2024年银行考试-建设银行纪检监察条线考试近5年真题附答案
- 5材料仿生完整版本
- 广东开放大学2024年秋《国家安全概论(S)(本专)》形成性考核作业参考答案
- 2024年建筑安全员C证考试题库及答案
- 火灾损失统计方法 XF185-2014
评论
0/150
提交评论