基于WEB的JAVA开发设计课件_第1页
基于WEB的JAVA开发设计课件_第2页
基于WEB的JAVA开发设计课件_第3页
基于WEB的JAVA开发设计课件_第4页
基于WEB的JAVA开发设计课件_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Date:2/27/2022基于WEB的JAVA开发设计1基于基于WEBWEB的的JAVAJAVA开发设计开发设计- JDBC- JDBC数据库访问数据库访问基于基于WEB的的JAVA开发设计开发设计1Date:2/27/2022基于WEB的JAVA开发设计2主要内容主要内容 JDBC简介简介 JDBC驱动程序类型驱动程序类型 JDBC基本编程基本编程 JDBC高级编程高级编程基于基于WEB的的JAVA开发设计开发设计2Date:2/27/2022基于WEB的JAVA开发设计3JDBC简介简介 JDBC(Java Database Connectivity)是一组用来)是一组用来按照统一方式访

2、问数据库的按照统一方式访问数据库的API。 它向程序员提供了它向程序员提供了独立于数据库的统一接口,可以使开发人员不必考虑独立于数据库的统一接口,可以使开发人员不必考虑所用的特定数据库便可编写应用程序,实现了所用的特定数据库便可编写应用程序,实现了Java与与数据库的互连。数据库的互连。 它能够:它能够: 提供对数据库的跨平台存取提供对数据库的跨平台存取 无需知道数据库具体的位置无需知道数据库具体的位置 无需要知道数据库实现的具体细节无需要知道数据库实现的具体细节基于基于WEB的的JAVA开发设计开发设计3Date:2/27/2022基于WEB的JAVA开发设计4JDBCJava应用应用1Or

3、acleMySQL SQL Server Java应用应用n基于基于WEB的的JAVA开发设计开发设计4Date:2/27/2022基于WEB的JAVA开发设计5JDBC驱动程序类型驱动程序类型RDBMSJDBC体系结构体系结构JDBC APIJDBC-ODBC桥(桥(Type 1)JDBC-Native(Type 2)JDBC-NET(Type 3)纯纯Java JDBC驱动驱动(Type 4)ODBC 驱动驱动Native API(C/C+)Net Server(JNDI)基于基于WEB的的JAVA开发设计开发设计5Date:2/27/2022基于WEB的JAVA开发设计6TYPE 1 T

4、YPE 1驱动程序:驱动程序: 是是JDBCODBC桥连接方式桥连接方式 通常运行在通常运行在Windows系统上系统上 需要在客户机上安装需要在客户机上安装ODBC驱动程序驱动程序基于基于WEB的的JAVA开发设计开发设计6Date:2/27/2022基于WEB的JAVA开发设计7TYPE 2 TYPE 2驱动程序:驱动程序: 需要在客户机上安装所用数据对应的本地驱动(这些驱动通需要在客户机上安装所用数据对应的本地驱动(这些驱动通常是常是C或或C+语言所编写的)。语言所编写的)。 该驱动将该驱动将JDBC对数据库的调用转换成数据库本地的对数据库的调用转换成数据库本地的API调用调用基于基于W

5、EB的的JAVA开发设计开发设计7Date:2/27/2022基于WEB的JAVA开发设计8TYPE 3基于基于WEB的的JAVA开发设计开发设计8Date:2/27/2022基于WEB的JAVA开发设计9TYPE 3 网络服务可以采用多种技术来提高系统性能,这些服网络服务可以采用多种技术来提高系统性能,这些服务包括:务包括: 负载均衡负载均衡 缓存技术缓存技术 连接池技术连接池技术 容错机制容错机制DBMS基于基于WEB的的JAVA开发设计开发设计9Date:2/27/2022基于WEB的JAVA开发设计10TYPE 4 TYPE 4是一种纯是一种纯Java的驱动实现,他不需要任何客户的驱动

6、实现,他不需要任何客户端配置。端配置。 这也是最为常见的数据库连接方式。这也是最为常见的数据库连接方式。基于基于WEB的的JAVA开发设计开发设计10Date:2/27/2022基于WEB的JAVA开发设计11基于基于WEB的的JAVA开发设计开发设计11Date:2/27/2022基于WEB的JAVA开发设计12DriverManager DriverManager类类 DriverManager(驱动程序管理器驱动程序管理器)类负责管理类负责管理JDBC驱动程序。驱动程序。在使用在使用JDBC驱动程序之前,必须先将驱动程序加载并向驱动程序之前,必须先将驱动程序加载并向DriverManag

7、er注册后才可使用,在程序中可以通过调用注册后才可使用,在程序中可以通过调用Class.forName()方法来完成。方法来完成。 常用方法如下:常用方法如下: Public static synchronized Connection getConnection(String url,String user,String password) throws SQLException 获得获得url对应数据库的一个连接对应数据库的一个连接 Public static void setLoginTimeout(int seconds) 设置要进行数据库登录时驱动程序等待的延迟时间设置要进行数据库登

8、录时驱动程序等待的延迟时间基于基于WEB的的JAVA开发设计开发设计12Date:2/27/2022基于WEB的JAVA开发设计13ConnectionConnection接口接口 Connection对象是通过对象是通过DriverManager.getConnection()方法获得,代表与方法获得,代表与数据库的连接,也就是在已经加载的驱动程序和数据库之间建立连接。数据库的连接,也就是在已经加载的驱动程序和数据库之间建立连接。Connection接口是接口是JSP编程中使用最频繁的接口之一。编程中使用最频繁的接口之一。 常用方法如下:常用方法如下: Statement createSta

9、tement() throws SQLException 创建一个创建一个Statement对象对象 PrepareStatement prepareStatement(String sql) throws SQLException 创建一个创建一个Preparestatement对象,并能把对象,并能把SQL语句提交到数据库进行预编译语句提交到数据库进行预编译 void setAutoCommit(Boolean autocommit) throws SQLException 设置事务提交的模式设置事务提交的模式 void commit() throws SQLException 提交对数据

10、库的更改,使更改生效提交对数据库的更改,使更改生效 void rollback() throws SQLException 放弃当前事务开始以来对数据库所作的修改放弃当前事务开始以来对数据库所作的修改 基于基于WEB的的JAVA开发设计开发设计13Date:2/27/2022基于WEB的JAVA开发设计14StatementStatement接口接口 Statement用来执行静态用来执行静态SQL语句。例如,执行语句。例如,执行insert、update、delete语句,可以调用语句,可以调用executeUpdate(String sql)方法,执行方法,执行select语句可以调用语句

11、可以调用executeQuery(String sql)方法,该方法返回方法,该方法返回ResultSet对象。对象。 常用方法如下:常用方法如下: ResultSet executeQuery(String sql) throws SQLException 执行一个查询语句并返回结果集执行一个查询语句并返回结果集 int executeUpdate(String sql) throws SQLException 执行更新操作,返回更新的行数执行更新操作,返回更新的行数 Boolean execute(String sql) throws SQLException 执行更新或查询语句,返回是否

12、有结果集执行更新或查询语句,返回是否有结果集 基于基于WEB的的JAVA开发设计开发设计14Date:2/27/2022基于WEB的JAVA开发设计15PreparedStatement PreparedStatement接口接口 PreparedStatement接口继承接口继承Statement接口,作为提高性接口,作为提高性能的一条措施,能的一条措施,PreparedStatement提供了可以与查询信息提供了可以与查询信息一起预编译的一种语句类型。一起预编译的一种语句类型。 基于基于WEB的的JAVA开发设计开发设计15Date:2/27/2022基于WEB的JAVA开发设计16Cal

13、lableStatement CallableStatement是JDBC用来调用数据库中存储过程的机制 具体的使用和PreparedStatement相似 需要注意的是:要调用的存储过程必须在数据库中存在,否则将抛出异常基于基于WEB的的JAVA开发设计开发设计16Date:2/27/2022基于WEB的JAVA开发设计17ResultSetResultSet接口接口 在在Statement执行执行SQL查询语句时,会返回查询语句时,会返回ResultSet查询结果记录集。查询结果记录集。ResultSet接口提供了逐行访问这些记录的方法。接口提供了逐行访问这些记录的方法。 常用方法如下:常

14、用方法如下: Boolean next() throws SQLException 把当前指针定位到下一行。注意,最初,把当前指针定位到下一行。注意,最初,ResultSet的指针位于第一行的指针位于第一行之前。之前。 void close() throws SQLException 释放释放ResultSet对象资源对象资源ResultSet提供了提供了getXXX()方法,用于获取当前行中某列的值,其中方法,用于获取当前行中某列的值,其中“XXX”与列的数据类型有关,例如,如要获取的列是与列的数据类型有关,例如,如要获取的列是String类型,则类型,则使用使用getString()方法获

15、取该列的值。方法获取该列的值。getXXX()方法如下所示:方法如下所示: getString() getInt() getFloat() getDouble() getDate() getBoolean() 基于基于WEB的的JAVA开发设计开发设计17Date:2/27/2022基于WEB的JAVA开发设计18Oracle驱动驱动OracleMYSQLAcessMYSQL驱动驱动JDBCODBC桥桥DriverManagerConnectionPreparedStatementStatementCallableStatementResultSetResultSetResultSet应用层应

16、用层基于基于WEB的的JAVA开发设计开发设计18Date:2/27/2022基于WEB的JAVA开发设计19import java.sql.*TryClass.forName(oracle.jdbc.driver.OracleDriver);String oraURL= “jdbc:oracle:thin:host:port:dbName”;Connection con=DriverManager.getConnection(oraURL, username,password);Statement statement =connection.createStatement();String

17、query = SELECT name, pwd FROM sometable;ResultSet resultSet= statement.executeQuery(query);while(resultSet.next()name =resultSet.getString(1);phone =resultSet.getString(2);System.out.println(name+,+phone); resultSet.close(); statement.close(); con.close();catch(SQLException e)第一步第一步第二步第二步第三步第三步第四步第四

18、步第五步第五步第六步第六步第七步第七步基于基于WEB的的JAVA开发设计开发设计19Date:2/27/2022基于WEB的JAVA开发设计20连接数据库的典型步骤连接数据库的典型步骤第一步:加载正确的数据库驱动程序第一步:加载正确的数据库驱动程序 为什么要加载为什么要加载 如何加载如何加载 Class.forName(oracle.jdbc.driver.OracleDriver); DriverManager.registerDriver( new oracle.jdbc.driver.OracleDriver(); 经过以上其中之一语句的声明后,驱动程序就会自动地加载。经过以上其中之一语

19、句的声明后,驱动程序就会自动地加载。 注意:如果注意:如果classpath路径中没有找到所需的驱动程序则会抛出路径中没有找到所需的驱动程序则会抛出 ClassNotFoundException异常。异常。Oracle驱动驱动OracleMYSQLAcessMYSQL驱动驱动JDBCODBC桥桥DriverManager基于基于WEB的的JAVA开发设计开发设计20Date:2/27/2022基于WEB的JAVA开发设计21第二步,定义所要连接数据库的地址第二步,定义所要连接数据库的地址String ODBCURL“jdbc:odbc:dbName”;String oracleURL= jdb

20、c:oracle:thin:host:port:dbName“;String mysqlURL= jdbc:mysql:/ host:port/dbName“;String sqlURL“jdbc:microsoft:sqlserver:/host:1433;DatabaseName=dbName”; 通过此步骤,定义要连接的数据库资源通过此步骤,定义要连接的数据库资源 不同数据库连接的地址不同,这点需要特别注意,对弈一些常见的数据库连不同数据库连接的地址不同,这点需要特别注意,对弈一些常见的数据库连接地址,要求大家能够掌握。接地址,要求大家能够掌握。URL由由3部分组成,各个部分用冒号间隔,

21、格式如下:部分组成,各个部分用冒号间隔,格式如下:jdbc: JDBC URL的的3部分可分解如下:部分可分解如下: jdbc:JDBC中的协议就是中的协议就是jdbc。 :数据库驱动程序名或数据库连接机制的名称。子协议的典型示:数据库驱动程序名或数据库连接机制的名称。子协议的典型示例为例为oracle,它用于连接,它用于连接oracle数据库。数据库。 :一种标记数据库的方法。子名称根据子协议的不同而不同,使:一种标记数据库的方法。子名称根据子协议的不同而不同,使用子名称的目的是为定位数据库用子名称的目的是为定位数据库 例如例如 jdbc:oracle:thin:ip:port:sid基于基

22、于WEB的的JAVA开发设计开发设计21Date:2/27/2022基于WEB的JAVA开发设计22第三步,建立与数据库的连接第三步,建立与数据库的连接String username = jay_debesee;String password = secret;Connection connection =DriverManager.getConnection(oracleURL, username,password);通过此步获得与数据库服务器的连接通过此步获得与数据库服务器的连接另外,数据库连接还可以使用连接属性信息,如下:另外,数据库连接还可以使用连接属性信息,如下:Properties

23、 dbprops= new Properties();dbprops.put(user, sa);dbprops.put(password, );dbprops.put(server, DEMO);dbprops.put(“db, myDB);tryClass.forName(weblogic.jdbc.mssqlserver4.Driver);Connectionconn= DriverManager.getConnection(jdbc:weblogic:mssqlserver4, dbprops);catch(Exception e).基于基于WEB的的JAVA开发设计开发设计22Dat

24、e:2/27/2022基于WEB的JAVA开发设计23 第四步,创建语句对象第四步,创建语句对象 Statement statement = connection.createStatement(); 第五步,声明第五步,声明SQL语句,并将该语句通过语句,并将该语句通过Statement对对象提交给服务器进行执行。象提交给服务器进行执行。 Stringsql= “SELECT * FROM ONTACT_TABLE”; ResultSet resultSet=statement.executeQuery(sql); 该语句将该语句将sql命令提交给数据库服务器进行执行,并将执行结命令提交给数

25、据库服务器进行执行,并将执行结果存储在果存储在ResultSet对象中进行执行。对象中进行执行。基于基于WEB的的JAVA开发设计开发设计23Date:2/27/2022基于WEB的JAVA开发设计24Statement接口主要有如下三个方法:接口主要有如下三个方法:1. ResultSet executeQuery(String sql)用于执行用于执行查询语句,返回,返回 ResultSet结果集(一个二维表)结果集(一个二维表)2. int executeUpdate(String sql)用于执行用于执行添加、删除或修改操作,返回被更新记录的条数操作,返回被更新记录的条数3. bool

26、ean execute(String sql) 执行参数部分的执行参数部分的SQL语句;语句; 当当SQL语句的执行结果是一个语句的执行结果是一个ResultSet结果集时,本方法返回结果集时,本方法返回true;并可以通过;并可以通过StatementgetResultSet()方法得到返回的结方法得到返回的结果集果集 当当SQL语句执行后没有返回的结果集时,该方法返回语句执行后没有返回的结果集时,该方法返回false基于基于WEB的的JAVA开发设计开发设计24Date:2/27/2022基于WEB的JAVA开发设计25 第六步:对查询结果进行分析第六步:对查询结果进行分析while(re

27、sultSet.next()name =resultSet.getString(1);phone =resultSet.getString(2);System.out.println(name+,+phone); 针对不同的类型调用不同的针对不同的类型调用不同的getXxx方法方法(getString(col), getDate(col), ) 通过指定列名或相对顺序的方式调用通过指定列名或相对顺序的方式调用getXxx()方法对应列方法对应列的内容获取出来的内容获取出来(getString(String) 对结果集中的内容进行修改对结果集中的内容进行修改(updateString(col,v

28、al), ) 可以通过可以通过(first(), last(), previous(), next(), absolute(int), ) 方法浏览可滚动结果集中的内容方法浏览可滚动结果集中的内容 支持多个结果集支持多个结果集基于基于WEB的的JAVA开发设计开发设计25Date:2/27/2022基于WEB的JAVA开发设计26Java数据类型和数据类型和SQL数据类型之间的映射关系数据类型之间的映射关系SQL类型Java数据类型JDBC访问方法SQL类型Java数据类型JDBC访问方法bitbooleangetBoolean()DECIMALjava.math.BigDecimalgetB

29、igDecimal()TINYINTbytegetByte()NUMBERICjava.math.BigDecimalgetBigDecimal()SMALLINTshortgetShort()Charjava.lang.StringgetString()INTEGERintgetInt()VARCHARjava.lang.StringgetString()BIGINTlonggetLong()LONGVARCHARjava.lang.StringgetString()REALfloatgetFloat()DATEjava.sql.dategetDate()FLOATdoublegetDoub

30、le()TIMEjava.sql.timegetTime()DOUBLEdoublegetDouble()TIMESTAMPjava.sql.TIMESTAMPgetTimestamp()BINARYbytegetBytes()BLOBjava.sql.BlobgetBlob()VARBINARYbytegetBytes()CLOBjava.sql.ClobgetClob()LONGBINARYbytegetBytes()ARRAYjava.sql.ArraygetArray()REFjava.sql.RefgetRef()STRUCTjava.sql.StructgetS基于基于WEB的的J

31、AVA开发设计开发设计26Date:2/27/2022基于WEB的JAVA开发设计27 第七步,关闭打开的资源第七步,关闭打开的资源resultSet.close();statement.close(); connection.close(); 将打开的资源关闭。将打开的资源关闭。 注意:资源关闭的顺序和打开的顺序恰恰相反。注意:资源关闭的顺序和打开的顺序恰恰相反。基于基于WEB的的JAVA开发设计开发设计27Date:2/27/2022基于WEB的JAVA开发设计28JDBC-ODBC桥编程实例桥编程实例(Access数据库数据库)创建创建Access数据库数据库student,表,表inf

32、o,字段,字段id(整型整型),username(文本文本),pass(文本文本),name(文本文本),age(整型整型) 具体步骤:具体步骤: 建立建立ODBC数据源数据源 使用使用JDBC-ODBC驱动建立数据库连接驱动建立数据库连接 插入插入/增加两条记录增加两条记录 修改一条记录修改一条记录 删除一条记录删除一条记录 查询所有记录查询所有记录基于基于WEB的的JAVA开发设计开发设计28Date:2/27/2022基于WEB的JAVA开发设计29info表结构表结构基于基于WEB的的JAVA开发设计开发设计29Date:2/27/2022基于WEB的JAVA开发设计30建立建立ODB

33、C数据源数据源 控制面板控制面板管理工具管理工具数据源数据源 (ODBC)系统系统DSN添加添加Microsoft Access Driver(*.mdb)数据源名数据源名student,选择刚才所创建的,选择刚才所创建的数据库数据库基于基于WEB的的JAVA开发设计开发设计30Date:2/27/2022基于WEB的JAVA开发设计31程序代码程序代码增加增加基于基于WEB的的JAVA开发设计开发设计31Date:2/27/2022基于WEB的JAVA开发设计32程序代码程序代码修改修改基于基于WEB的的JAVA开发设计开发设计32Date:2/27/2022基于WEB的JAVA开发设计33

34、程序代码程序代码删除删除基于基于WEB的的JAVA开发设计开发设计33Date:2/27/2022基于WEB的JAVA开发设计34程序代码程序代码查询查询%Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);Connection con = DriverManager.getConnection(jdbc:odbc:student,);Statement stmt = con.createStatement();/查询记录,处理结果集查询记录,处理结果集String sql=select * from info;ResultSet rs=stmt.execu

35、teQuery(sql);while(rs.next()out.print( 编号:编号: + rs.getString(1) );out.print( 用户名:用户名: + rs.getString(2);out.print( 密码:密码: + rs.getString(3) );out.print( 姓名:姓名: + rs.getString(name) );out.print( 年龄:年龄: + rs.getFloat(age) );out.print( );rs.close();stmt.close(); con.close();%基于基于WEB的的JAVA开发设计开发设计34Date

36、:2/27/2022基于WEB的JAVA开发设计35JDBC访问访问Oracle数据库数据库 打开打开Oracle的的“企业管理器企业管理器”,为,为scott用户添加用户添加DBA权限。然后在权限。然后在scott中建立一个表中建立一个表table1,该表的结,该表的结构包括三个字段:构包括三个字段:name(varchar2)、)、sex(varchar2)、)、score(number)。)。 创建成功后,在该表中插入几条测试数据:创建成功后,在该表中插入几条测试数据:分别为:分别为: aaam66 bbbm73 cccf91 dddm85基于基于WEB的的JAVA开发设计开发设计35D

37、ate:2/27/2022基于WEB的JAVA开发设计36部署部署Oracle驱动程序驱动程序 在在 “Oracle安装目录安装目录/jdbc/lib/” 下找到所需的驱动下找到所需的驱动程序程序classes12.jar,并将其拷贝到当前应用的,并将其拷贝到当前应用的 “/WEB-INF/lib” 目录下目录下 然后重新启动然后重新启动tomcat服务服务基于基于WEB的的JAVA开发设计开发设计36Date:2/27/2022基于WEB的JAVA开发设计37一个一个JDBC访问访问Oracle数据库的例子数据库的例子基于基于WEB的的JAVA开发设计开发设计37Date:2/27/2022

38、基于WEB的JAVA开发设计38%Class.forName(oracle.jdbc.driver.OracleDriver);Connection con = DriverManager.getConnection(“jdbc:oracle:thin:localhost:1521:数据库名数据库名”,“用户名用户名”,“密码密码);Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery(select * from table1);while( rs.next() )out.print( 姓名:姓名: +

39、rs.getString(1) );out.print( 性别:性别: + rs.getString(2) );out.print( 分数:分数: + rs.getFloat(3) );out.print( );rs.close(); stmt.close(); con.close();%基于基于WEB的的JAVA开发设计开发设计38Date:2/27/2022基于WEB的JAVA开发设计39 连接连接MySQL数据库和连接数据库和连接Oracle数据库的方法非常类似。只数据库的方法非常类似。只是有两个地方需要注意一下是有两个地方需要注意一下1). 需要把需要把MySQL的驱动程序的驱动程序m

40、ysql-connector-java-5.0.4-bin.jar部署到部署到“/WEB-INF/lib/”下。(下。(MySQL驱动程序可以驱动程序可以从其官方网站上下载)从其官方网站上下载)连接连接MySQL数据库数据库基于基于WEB的的JAVA开发设计开发设计39Date:2/27/2022基于WEB的JAVA开发设计402). 注册驱动程序和获取连接的语句变为:注册驱动程序和获取连接的语句变为:Class.forName(com.mysql.jdbc.Driver);或者或者Class.forName(org.gjt.mm.mysql.Driver);Connection con =

41、DriverManager.getConnection(jdbc:mysql:/ip:port/sid,Login,password);密码密码用户名用户名数据库名数据库名IP地址地址端口号端口号连接连接MySQL数据库数据库基于基于WEB的的JAVA开发设计开发设计40Date:2/27/2022基于WEB的JAVA开发设计41例:例:MySQL数据库编程实例数据库编程实例基于基于WEB的的JAVA开发设计开发设计41Date:2/27/2022基于WEB的JAVA开发设计42 连接连接SQL Server数据库同样和连接数据库同样和连接Oracle数据库相似。数据库相似。有两个地方需要注意

42、一下有两个地方需要注意一下1). 需要把需要把SQL Server的驱动程序的驱动程序 mssqlserver.jar msbase.jar msutil.jar部署到部署到“/WEB-INF/lib/”下。(下。(SQL Server的驱动程序的驱动程序可以从微软的官方网站上下载)可以从微软的官方网站上下载)连接连接SQL Server数据库数据库基于基于WEB的的JAVA开发设计开发设计42Date:2/27/2022基于WEB的JAVA开发设计432). 注册驱动程序和获取连接的语句变为:注册驱动程序和获取连接的语句变为:Class.forName(com.microsoft.jdbc.

43、sqlserver.SQLServerDriver);Connection con = DriverManager.getConnection(jdbc:sqlserver:/ip:port;databasename=sid,Login,password);密码密码用户名用户名数据库名数据库名IP地址地址端口号端口号连接连接SQL Server数据库数据库基于基于WEB的的JAVA开发设计开发设计43Date:2/27/2022基于WEB的JAVA开发设计44例:例:SQL Server数据库编程实例数据库编程实例基于基于WEB的的JAVA开发设计开发设计44Date:2/27/2022基于W

44、EB的JAVA开发设计45高级编程部分高级编程部分 在该部分,内容包括: 事务的概念 使用批处理更新 使用PreparedStatement对象 使用CallableStatement对象 处理可滚动的结果集 处理多个结果集 处理元数据 处理BLOB和CLOB 使用事务隔离基于基于WEB的的JAVA开发设计开发设计45Date:2/27/2022基于WEB的JAVA开发设计46事务事务事务可以将一组事务可以将一组SQL语句组成原子操作以保证数据的完整性语句组成原子操作以保证数据的完整性默认情况下,默认情况下,JDBC使用使用auto-commit事务模型事务模型一个使用一个使用commit和和

45、rollabck的示例:的示例:Connection con = null;try Class.forName(COM.cloudscape.core.JDBCDriver); con=DriverManager.getConnection( jdbc:cloudscape:c:/PhoneBook); con.setAutoCommit(false); Statement statement = connection.createStatement(); statement.executeUpdate(“UPDATE .”);. mit();catch(Exception e) if(nul

46、l != con) con.rollback();. 基于基于WEB的的JAVA开发设计开发设计46Date:2/27/2022基于WEB的JAVA开发设计47批处理更新批处理更新批处理更新是同时执行多个语句的机制。批处理更新是同时执行多个语句的机制。要执行批处理,需要:要执行批处理,需要: 按照正常的方式创建一个语句对象按照正常的方式创建一个语句对象 向语句对象中添加多个要执行的向语句对象中添加多个要执行的SQL语句语句 执行批处理执行批处理示例:示例:Statement stmt = connection.createStatement();stmt.addBatch(insert int

47、o test values(. . .);stmt.addBatch(insert into test values(. . .);. . .stmt.executeBatch();基于基于WEB的的JAVA开发设计开发设计47Date:2/27/2022基于WEB的JAVA开发设计48PreparedStatement PreparedStatement 就是带有占位符的SQL 语句 数据库对他们事先进行编译,因此,客户端需要做的只是传送占位符位置所需要的数据。 而普通Statement的SQL语句,只有在程序运行时才对他们进行编译 因此PreparedStatement运行的速度更快。基于

48、基于WEB的的JAVA开发设计开发设计48Date:2/27/2022基于WEB的JAVA开发设计49PreparedStatement 示例示例1:PreparedStatement stmt = connection.prepareStatement( insert into test values(?,?);stmt.setString(1,”first value”);stmt.setString(2,”second value”);stmt.executeUpdate();stmt.setString(2,”new record, with different second valu

49、e”);stmt.executeUpdate();基于基于WEB的的JAVA开发设计开发设计49Date:2/27/2022基于WEB的JAVA开发设计50PreparedStatement 示例示例2:Connection connection =DriverManager.getConnection(url, user, password);PreparedStatement statement =connection.prepareStatement(UPDATE employees +SET salary = ? +WHERE id = ?);int newSalaries=getSa

50、laries();int employeeIDs=getIDs();for(int i=0; iemployeeIDs.length; i+) statement.setInt(1,newSalariesi);statement.setInt(2,employeeIDsi);statement.executeUpdate();基于基于WEB的的JAVA开发设计开发设计50Date:2/27/2022基于WEB的JAVA开发设计51CallableStatement CallableStatement是JDBC用来调用数据库中存储过程的机制 具体的使用和PreparedStatement相似 需

51、要注意的是:要调用的存储过程必须在数据库中存在,否则将抛出异常 示例:CallableStatement stmt=connection.prepareCall( “ CALL GET_BOOKS(?,?) );stmt.setString(1,”first value”);stmt.setString(2,”second value”);ResultSet books = stmt.execute();基于基于WEB的的JAVA开发设计开发设计51Date:2/27/2022基于WEB的JAVA开发设计52可滚动的结果集可滚动的结果集 可滚动结果集是允许你在结果集中的不同行之间进行任意浏可滚

52、动结果集是允许你在结果集中的不同行之间进行任意浏览的览的ResultSet对象。对象。 具体的操纵方式包括:具体的操纵方式包括: 使用使用next()和和previous()分别向后和向前跳一行分别向后和向前跳一行 使用使用first()或或last()方法直接跳到结果集中的第一行或最后方法直接跳到结果集中的第一行或最后一行。一行。 使用使用absolute(int)方法直接跳到结果集中指定的行方法直接跳到结果集中指定的行 使用使用relative(int)方法向前或向后跳转指定的行数方法向前或向后跳转指定的行数基于基于WEB的的JAVA开发设计开发设计52Date:2/27/2022基于WE

53、B的JAVA开发设计53可滚动的结果集可滚动的结果集 此外,你还可以使用其他方法:此外,你还可以使用其他方法: beforeFirst(), afterLast():将游标置于第一行之前或最后将游标置于第一行之前或最后一行之后。一行之后。 isFirst(), isLast(), isBeforeFirst(), isAfterLast(): 告诉你告诉你游标是否指向指定的位置。游标是否指向指定的位置。 而而beforeFirst() and afterLast()方法告诉你是否还有更多方法告诉你是否还有更多的数据需要处理。的数据需要处理。基于基于WEB的的JAVA开发设计开发设计53Date

54、:2/27/2022基于WEB的JAVA开发设计54 示例:示例:Statement stmt = connection.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);ResultSet books = stmt.executeQuery(“SELECT * FROM Books”);if(books.last() /this scrolls from the end backwardsdo /do something with this row while(books.previou

55、s()基于基于WEB的的JAVA开发设计开发设计54Date:2/27/2022基于WEB的JAVA开发设计55 为了使创建的结果集具有可滚动性,在创建为了使创建的结果集具有可滚动性,在创建Statement对象对象时需要使用指定的构建函数,该构建函数需要指定两个参数:时需要使用指定的构建函数,该构建函数需要指定两个参数: 支持滚动支持滚动 ResultSet.TYPE_FORWARD_ONLY (不支持滚动不支持滚动) ResultSet.TYPE_SCROLL_SENSITIVE (支持滚动,支持滚动,当更新时,及时更新结果集中的内容当更新时,及时更新结果集中的内容) ResultSet.

56、TYPE_SCROLL_INSENSITIVE (支持滚动,支持滚动,但当数据更新时,并不在本结果集中体现但当数据更新时,并不在本结果集中体现) 支持并发支持并发 ResultSet.CONCUR_READ_ONLY (禁用更新禁用更新) ResultSet.CONCUR_UPDATABLE (允许更新允许更新)基于基于WEB的的JAVA开发设计开发设计55Date:2/27/2022基于WEB的JAVA开发设计56多个结果集多个结果集批处理和批处理和CallableStatement可能返回多个结果集可能返回多个结果集你可以使用你可以使用getResultSet()和getMoreResul

57、ts()来对结果进行检索示例:示例:stmt.addBatch(.);.stmt.executeBatch();do isAnUpdate=false;if(stmt.getUpdateCount() != -1)isAnUpdate=true; /the operation was an update, skipelse ResultSet rs = stmt.getResultSet();/. do something with results while(stmt.getMoreResults() | isAnUpdate);/loop if more results or last operation was an update基于基于WEB的的JAVA开发设计开发设计56Date:2/27/2022基于WEB的JAVA开发设计57处理元数据处理元数据 元数据可以提供一些关于数据库结果的一些信息:元数据可以提供一些关于数据库结果的一些信息: 数据库本身的信息数据库本身的信息 DatabaseMetaData dbmd = connection.getMetaData(); 单表的信息单表的信息 ResultSet tableRS = connection.getMetaData().getTables(null,null,”TableName”,null);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论