您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 第4章 JSP中使用数据库
2020/5/191JavaWeb开发技术第4章JSP中使用数据库2020/5/19JavaWeb开发技术24.1JDBC技术概述•几乎所有的应用都要涉及到数据的保存。在很多系统中,数据库都是生命的核心,作为软件开发人员,必须懂得如何操作和维护数据库。•本章首先介绍JDBC的工作原理及其四种类型的驱动,随后探讨如何使用JDBC技术连接常用的数据库,如SQLServer,Access,Oracle等,并给出在JSP中使用数据库的具体例子。最后,介绍了数据库连接池的优点及工作原理并举例。2020/5/19JavaWeb开发技术34.1.1什么是JDBCJDBC是Java数据库连接(JavaDataBaseConnectivity)技术的简称,它是由JavaSoft公司(Sun公司负责开发Java产品的业务单位)同数据库及数据库工具厂家一起建立的独立于DBMS的机制。JDBC是一种用于执行SQL语句的JavaAPI。它由一组用Java编程语言编写的类和接口组成。这个API由java.sql.*和javax.sql.*两个包中的一些类和接口组成,它为数据库开发人员提供了一个标准的API,使他们能够用纯JavaAPI来编写数据库应用程序。2020/5/19JavaWeb开发技术4JDBC的优点Java具有坚固、安全、易于使用、易于理解和可从网络上自动下载等优点;可移植性强:不必为每一种数据库编写不同的调用程序,只需用JDBCAPI编写一个程序就够了;2020/5/19JavaWeb开发技术54.1.2两层模型和三层模型客户端JDBC数据库服务器DBMS相关协议图4-1两层模型web服务器JDBC数据库服务器DBMS相关协议图4-2三层模型浏览器HTTP,RMI,COBAR调用2020/5/19JavaWeb开发技术64.1.3JDBC驱动程序的类型JDBC-ODBC桥加ODBC驱动本地API驱动JDBC网络纯Java驱动本地协议纯Java驱动2020/5/19JavaWeb开发技术7JDBC-ODBC桥加ODBC驱动先把JDBC调用转化为ODBC调用,再利用ODBC来与数据库交互。现存许多可用的ODBC驱动程序与大量数据库的交互,减少开发人员进行企业开发的麻烦。ODBC数据源需要提前在客户端进行注册,对于远程的客户端,操作极不方便,丢失平台无关性。适用于企业网或用Java编写的三层结构的应用程序。2020/5/19JavaWeb开发技术8本地API驱动将标准的JDBC调用转变为对本地数据库原始驱动程序调用,再通过数据库的原始驱动程序与数据库交互。比JDBC-ODBC桥具有更优良的性能。丢失JDBC平台无关性的好处,而且也需要安装客户端的数据库原始驱动。2020/5/19JavaWeb开发技术9JDBC网络纯Java驱动JDBC网络驱动程序传送JDBC命令到一个中间件上,这个中间件再将JDBC调用请求传送到数据库中,数据库返回的结果集也通过这个中间件来返回到应用程序。与平台无关的,并且不需要客户端的安装和管理,因此很适合于用做Internet的应用。必须处理Web所提出的安全性、通过防火墙的访问等方面的额外要求。2020/5/19JavaWeb开发技术10本地协议纯Java驱动直接访问数据库,中间不需要任何转换或通过其它任何的中间件就能完成交互。将成为从JDBC访问数据库的首选方法,因为他们提供了Java的所有优点。2020/5/19JavaWeb开发技术11四种JDBC驱动程序原理比较客户端本地JAVAAPI数据库服务器客户端链接库图4-4本地API驱动中间层服务器数据库服务器数据链接库图4-5网络纯Java驱动网络协议驱动程序客户机客户端JDBC-ODBC桥ODBC驱动程序数据库服务器客户端链接库图4-3JDBC-ODBC桥驱动客户端数据库服务器数据库驱动协议图4-6本地协议纯Java驱动2020/5/19JavaWeb开发技术124.2使用JDBC要使用JDBC技术主要包括以下步骤:1.注册和加载驱动器;2.与数据库建立连接;3.发送SQL语句;4.处理结果;5.关闭连接;2020/5/19JavaWeb开发技术134.2.1注册和加载驱动器加载JDBC驱动是通过调用方法java.lang.Class.forName(),下面列出常用的几种数据库驱动程序加载语句的形式:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);//使用JDBC-ODBC桥驱动程序,事先必须在Windows中注册ODBC数据源Class.forName(“oracle.jdbc.driver.OracleDriver”);//使用Oracle的JDBC驱动程序Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);//使用SQLServer的JDBC驱动程序Class.forName(“com.ibm.db2.jdbc.app.DB2Driver”);//使用DB2的JDBC驱动程序Class.forName(org.gjt.mm.mysql.Driver);//使用MySql的JDBC驱动程序2020/5/19JavaWeb开发技术144.2.2建立连接与数据库建立连接的方法是调用DriverManager.getConnection(Stringurl,Stringuser,Stringpassword)方法。下述代码显示如何打开一个与位于URL为jdbc:odbc:wombat的数据库的连接。所用的用户标识符为oboy,口令为12Java:Stringurl=jdbc:odbc:wombat;Connectioncon=DriverManager.getConnection(url,oboy,12Java);2020/5/19JavaWeb开发技术15几种数据库的连接语句的形式Stringurl=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs;Stringuser=sa;Stringpassword=“”;Connectionconn=DriverManager.getConnection(url,user,password);Stringurl=jdbc:db2://localhost:5000/sample;Stringuser=admin;Stringpassword=;Connectionconn=DriverManager.getConnection(url,user,password);Stringurl=jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1;Connectionconn=DriverManager.getConnection(url);Connectioncon=DriverManager.getConnection(“jdbc:oracle:oci8:@db”,“scott”,“tiger”);//使用Oracle的JDBCOCI驱动程序Connectioncon=DriverManager.getConnection(jdbc:oracle:thin:@host:8080:db,scott,tiger);//使用Oracle的JDBCThin驱动程序2020/5/19JavaWeb开发技术164.2.3发送SQL语句Statement对象用于将SQL语句发送到数据库中。实际上有三种Statement对象:1.Statement:用于执行不带参数的简单SQL语句;2.PreparedStatement(从Statement继承):用于执行带或不带IN参数的预编译SQL语句;3.CallableStatement(从PreparedStatement继承):用于执行数据库存储过程的调用。2020/5/19JavaWeb开发技术174.2.3.1.创建Statement对象Statement对象用Connection的方法createStatement()创建。createStatement()的语法形式为:publicStatementcreateStatement()throwsSQLException如下列代码段中所示:Connectioncon=DriverManager.getConnection(url,sunny,);Statementstmt=con.createStatement();2020/5/19JavaWeb开发技术18Statement接口中的主要方法ResultSetexecuteQuery(Stringsql)//执行Statement对象,返回单个结果集intexecuteUpdate(Stringsql)//执行Statement对象,返回本次操作影响的行数booleanexecute(Stringsql)//执行Statement对象,返回布尔值voidclose()//关闭Statement对象intgetMaxFieldSize()//获得字段最大长度voidsetMaxFieldSize(intmax)//设置字段最大长度intgetMaxRows()//获得最大行数voidsetMaxRows(intmax)//设置最大行数intgetQueryTimeout()//获得查询超时时间限voidsetQueryTimeout(intseconds)//设定查询超时时间限java.sql.SQLWarninggetWarnings()//获得与statement对象有关的警告ResultSetgetResultSet()//得到下一个结果集intgetUpdateCount()//得到修改的行数booleangetMoreResults()//检测是否有多个结果集2020/5/19JavaWeb开发技术194.2.3.2.创建PreparedStatement对象如果需要多次执行一个SQL语句,可以使用PreparedStatement对象。在创建PreparedStatement对象时,通过传递不同参数值多次执行PreparedStatement对象,可以得到多个不同的结果。PreparedStatement对象用Connection的prepareStatement()方法创建。如:PreparedStatementpStmt=conn.preparedStatement(“insertintoemp(empno,ename)values(?,?)”);生成PreparedStatement对象的字符串中用“?”代表一个可以产生变化的IN型参数2020/5/19JavaWeb开发技术20PreparedStatement接口的主要方法voidclearParameters()//清除PreparedStatement对象中的参数voidsetAsciiStream(intparameterIndex,java.io.InputStreamx,intlength)voidsetBinaryStream(intparameterIndex,java.io.InputStreamx,intlength)voidsetBoolean(intparameterIndex,booleanx)voidsetByte(intparameterIndex,bytex)voidsetBytes(intparameterIndex,bytex[])voidsetDate(intparameterIndex,java.sql.Datex)voidsetD
本文标题:第4章 JSP中使用数据库
链接地址:https://www.777doc.com/doc-5451175 .html