使用JDBC进行库连接.ppt_第1页
使用JDBC进行库连接.ppt_第2页
使用JDBC进行库连接.ppt_第3页
使用JDBC进行库连接.ppt_第4页
使用JDBC进行库连接.ppt_第5页
已阅读5页,还剩107页未读 继续免费阅读

下载本文档

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

文档简介

第13章 应用JDBC 进行数据库连接,2,本章目标,前言 了解JDBC的概念及用途 JDBC数据库设计方法 了解JDBC驱动程序类型 理解JDBC 程序的结构 运用JDBC进行数据库编程,3,前言,对于那些相对独立的软件供应商而言,经常要为每一个DBMS编写一个版本的应用程序,或者为每个要访问的DBMS编写针对DBMS的代码。这就意味着,大量的资源都耗在了编写和维护DB的访问上,更不用说应用程序了。此时应用程序的评价标准不再是质量,而是它能否在给定的DBMS中访问数据库。,4,前言,这就需要开放的数据库连接,就是人们需要用一种新的方法来访问不同的数据库。为此,在系统中必须广泛使用中间件技术,以隐藏各种复杂性,屏蔽各种系统之间的差异。 ODBC(Open DataBase Connectivity)技术和JDBC(Java DataBase Connectivity)技术就是这种优秀的中间件技术。,5,前言-中间件技术,使用中间件技术可以使应用程序开发者不需关心特定环境的底层细节;通过中间件访问数据库,有关代码不依赖于某一具体数据库及其所在平台,从而将更多精力集中在功能的设计,所得到的应用软件也易于移植和升级。,6,前言-中间件的作用,中间件的作用是保证网络中各部件(软件和硬件)之间透明地连接,即隐藏网络部件的异构性,尤其保证不同网络、不同DBMS和某些访问语言的透明性,即下面三个透明性。 网络透明性:能支持所有类型的网络 。 服务器透明性:不管服务器上的DBMS是何种型号(ORACLE、SYBASE、DB2等),一个好的中间件都能通过标准的SQL语言与不同DBMS上的SQL语言连接起来。,7,前言-中间件的作用,语言透明性:客户机可用任何开发语言进行发送请求和接受回答,被调用的功能应该像语言那样也是独立的。 在客户机和服务器之间传递查询及其结果是中间件最为基本的功能。中间件通常通过定义自己统一的数据模型而使不同数据库之间的数据转化问题隐藏起来,从而使应用软件开发界面透明化。,8,前言-数据库访问技术简介,客户机/服务器 应用程序,数据库编程,ODBC,JDBC,两个常用的API,数据库,执行 SQL 语句,检索查询结果,9,数据库,ODBC,客户机/服务器 GUI应用程序,ODBC (开放式数据库连接) (Microsoft 提供),插 入,删 除,修 改,应用程序编程接口,查询,10,JDBC,JDBC (Java 数据库连接) (sun公司提供),Java 应用程序编程接口,Java应用程序,数据库,插 入,修 改,删 除,查询,11,13.1JDBC概述,JDBC 是一种用于执行 SQL 语句的 Java API(有意思的是,JDBC 本身是个商标名而不是一个缩写字;然而,JDBC 常被认为是代表 “Java 数据库连接 (Java Database Connectivity)”)。它由一组用 Java 编程语言编写的类和接口组成。JDBC 为工具/数据库开发人员提供了一个标准的 API,使他们能够用纯 Java API 来编写数据库应用程序。有了 JDBC,向各种关系数据库发送 SQL 语句就是一件很容易的事。 JDBC 是个“低级”接口,也就是说,它用于直接调用 SQL 命令。,12,JDBC与ODBC的对比,ODBC(Open DataBase Connectivity)是微软倡导的、当前被业界广泛接受的、用于数据库访问的应用程序编程接口(API) JDBC的设计在思想上沿袭了ODBC , JDBC保持了ODBC的基本特性,也独立于特定数据库。使用相同源代码的应用程序通过动态加载不同的JDBC驱动程序,可以访问不同的DBMS。连接不同的DBMS时,各个DBMS之间仅通过不同的URL进行标识。,13,JDBC与ODBC的对比,与ODBC一样,JDBC也支持在应用程序中同时建立多个数据库连接,采用JDBC可以很容易地用SQL语句同时访问多个异构的数据库,为异构的数据库之间的互操作奠定基础。,14,JDBC与ODBC的对比,但是,JDBC除了具有ODBC的上述相似特点外,更具有对硬件平台、操作系统异构性的支持。 这主要是因为ODBC使用的是C语言,而JDBC使用的是Java语言。Java语言具有与平台无关、移植性强、安全性高、稳定性好、分布式、面向对象等 众多优点,而JDBC确保了“100纯Java”的解决方案,利用Java的平台无关性, JDBC应用程序可以自然地实现跨平台特性,因而更适合于Internet上异构环境的数据库应用。,15,JDBC与ODBC的对比,此外,JDBC驱动程序管理器是内置的,驱动程序本身也可通过Web浏览器自动下载;而ODBC驱动程序管理器和ODBC驱动程序必须在每台客户机上分别安装、配置。 Java 可以使用 ODBC,但最好是在 JDBC 的帮助下以 JDBC-ODBC 桥的形式使用. ODBC 不适合直接在 Java 中使用,因为它使用 C 语言接口。从 Java 调用本地 C 代码在安全性、实现、坚固性和程序的自动移植性方面都有许多缺点。,16,JDBC 的用途,简单地说,JDBC 可做三件事: 与数据库建立连接, 发送 SQL 语句, 处理结果。,17,JDBC 的用途,下列代码段给出了以上三步的基本示例: /与数据库建立连接 Connection con = DriverManager.getConnection ( “jdbc:mysql:/localhost/sql_test“, “root“, “root“); Statement stmt = con.createStatement(); /使用Statement执行 SQL 语句 ResultSet rs = stmt.executeQuery(“SELECT * FROM student“); /处理结果 while (rs.next() String name = rs.getString(“name“); system.out.println(“name”+name); ,18,JDBC数据库设计方法(1),19,在两层模型中,Java Applet或Java Application将直接与数据库进行对话。其中需要一个JDBC Driver来与所访问的特定数据库管理系统进行通信。用户的 SQL 语句被送往数据库中,返回其结果给用户。数据库可以存放在本地机或者是网络服务器上,Java 应用程序也可以通过网络访问远程数据库,如果数据库存放于网络计算机上,则是典型的客户/服务器模型应用。应用程序虽然可以是Java的Application或Applet,但是这种模型限制较多,比较适合Application,而不太适合Applet。,20,JDBC数据库设计方法(2),业务逻辑中间层,21,在三层模型中,客户通过浏览器调用Java 小应用程序,小应用程序通过JDBC API提出SQL请求,请求先是被发送到服务的“中间层“,也就是调用小应用程序的Web服务器,在服务器端通过JDBC与特定数据库服务器上的数据库进行连接,由数据服务器处理该SQL语句,并将结果送回到中间层,中间层再将结果送回给用户,用户在浏览器中阅读最终结果。中间层为业务逻辑层,可利用它对公司数据进行访问控制。中间层的另一个好处是,用户可以利用易于使用的高级API,而中间层将把它转换为相应的低级调用。最后,许多情况下,三层结构可使性能得到优化,并提高安全保证。,22,JDBC数据库设计方法(3),23,13.2JDBC驱动器,在正式使用JDBC进行数据库操作之前,先来认识JDBC的基本架构,了解数据库驱动程序与数据库之间的关系。 JDBC是Java Web 应用程序开发中主要的API之一,负责对数据库的访问,再对数据库进行访问时java应用程序首先调用JDBC API,然后把访问语句提交给JDBC驱动器从而实现访问数据库的操作. JDBC主要包括了2个包:java.sql和javax.sql,他们几乎都是独立于数据库的.java.sql主要针对基本的数据库编程服务如连接,执行语句.javax.sql主要为数据库的高级操作提供接口和类,引入了容器管理的连接池和分布式事物等. JDBC软件包本身不能连接数据库,它只是一个API框架,需要通过数据库驱动程序或其他软件包提供方法.,24,如果要连接数据库并进行操作,基本上必须了解数据库所提供的API操作接口,然而各个厂商所提供的API操作界面并不一致,如果今天要使用A厂商的数据库,就必须设计一个专用的程序来操作A厂商数据库所提供的API,将来如果要使用B厂商的数据库,即使上层应用程序本身的目的相同,也是要编写专用于B厂商数据库之存取程序,十分的不方便。 使用JDBC,可由厂商操作实现操作数据库接口的驱动程序,而Java程序设计人员调用JDBC的API并操作SQL,实际对数据库的操作由JDBC驱动程序负责。如果要更换数据库,基本上只要更换驱动程序,Java程序中只要加载新的驱动程序来源,即可完成数据库系统的变更,Java 程序的部分则无需改变。,25,图 应用程序、JDBC与驱动程序之间的关系,26,简单地说,JDBC希望达到的目的,是让Java程序设计人员在编写数据库操作程序的时候,可以有个统一的操作接口,无需依赖于特定的数据库API,希望达到“写一个Java程序,适用所有的数据库”的目的。 JDBC数据库驱动程序按实现方式可以分为4个类型:,27,JDBC 驱动程序的类型,JDBC 驱动程序 的类型,JDBC-ODBC桥驱动程序及ODBC驱动程序,本地API部分Java驱动程序,JDBC-Net 纯Java驱动程序,本地协议纯Java驱动程序,28,Type 1:JDBC-ODBC Bridge JDBC-ODBC桥驱动程序及ODBC驱动(类型1):JDBC-ODBC桥接驱动程序。其底层通过ODBC(Open databas Connectivity)驱动程序来连接数据库。 如图所示,Microsoft Access数据库存取就是使用这种类型。,Type 1: JDBC-ODBC Bridge,29,Type 2: Native-API Bridge 本地API部分Java驱动程序 (类型2):本地 API - 部份用 Java 来编写的驱动程序。此种方式先将JDBC函数调用转换成数据库客户端函数库的API(位于客户端计算机),然后与数据库相连。不像Type 1可以对ODBC架构的数据库进行存取,如图所示。,Type 2: Native-API Bridge,30,Type 3:JDBC-middleware JDBC-Net 纯Java驱动程序(类型3):JDBC 网络纯 Java 驱动程序。首先JDBC驱动程序会将JDBC函数调用解释成与数据库无关的网络通信协议,经过中介服务器的第二次解析,最后才转换成相对应的数据库通信协议.如图所示。,Type 3:JDBC-middleware,31,Type 4:Pure Java Driver 本地协议纯Java驱动程序 (类型4) 本地协议纯 Java驱动程序。这种驱动程序将 JDBC 调用直接转换为 DBMS 所使用的网络协议。如图所示。,Type 4: Pure Java Driver,32,安装驱动器、使用驱动器,把mysql-connector-java-5.0.4.zip解压缩,把其中的mysql-connector-java-5.0.4-bin.jar文件拷到相应的目录下 1、对应用程序来说,拷贝到到jre目录下的lib目录下的ext目录下(C:Program FilesJavajre1.5.0_04libext),这是java的“系统扩展库”目录,其下文件会被java运行环境自动加载,可消除找不到jdbc驱动程序的现象。 如果还找不到可采用如下面两个图所示添加外部JRE把JDBC添加进来 2、对于WEB应用来说,拷贝到C:Program FilesApache Software FoundationTomcat 5.5commonlib路径下 此文件就是JDBC驱动 Mysql下已经建立相应的数据库sql_test 例、UseDriver.java向表student插入一条记录,33,34,对于项目,查看它的JRE系统库,35,13.3使用JDBC操作数据库,使用JDBC操作数据库就是使用java.sql和javax.sql这两个包的接口对数据库的操作,下面将按照其用途的不同将这些接口分类进行介绍。,36,JDBC 体系结构 3-1,Java 程序,JDBC 驱动程序,数据库,SQL 命令,结果,37,JDBC 体系结构 3-2,应用层,Driver,Statement,ResultSet,Connection,各接口,驱动层,38,JDBC 体系结构3-3,数据库,39,java.sql 包 3-1,40,java.sql 包 3-2,41,java.sql 包 3-3,SQLException,/* * fooBar */ public void foobar() throws SQLException throw new SQLException(“刚引发了一个 SQLException ”); , try fooBar(); catch(SQLException ex) System.out.println(“已捕获一个 SQLException 异常!”); System.out.println(“消息: “ + ex.getMessage(); System.out.println(“错误代码: “ + ex.getErrorCode(); ,调用 fooBar,42,JDBC 程序访问数据库的步骤 2-1,开 始,导入 java.sql包,加载并注册驱动程序,创建一个 Connection 对象,创建一个 Statement 对象,执行语句,关闭ResultSet 对象,关闭Statement对象,关闭连接,结 束,使用ResultSet对象,查询 添加 删除 修改,43,步骤1-导入包,导入包: Import java.sql.*;,演示:示例 1,44,Friends 表的结构,它演示访问数据库的各个步骤 在执行示例 1 中的程序之前,Mysql 中应该存在一个 名为 friends 的表,演示:示例 1,45,/* 2007 wuxi NIIT * 版权所有 */ import java.sql.SQLException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; /* 这个类演示访问数据库需遵循的各个步骤. * version 1.0, 2007 年 7 月 2 日 * author */ class Jdbctest /* 构造方法 */ protected Jdbctest() ,import java.sql.*,46,/*这是 main 方法. */ public static void main(String args) try Class.forName(“com.mysql.jdbc.Driver“); catch (ClassNotFoundException ce) System.out.println(ce); try String url = “jdbc:mysql:/localhost/sql_test“; String userName=“root”; Stirng password=“root”; Connection con = DriverManager.getConnection(url,useName,password); Statement s = con.createStatement(); ResultSet rs = s.executeQuery(“select * from student“); while (rs.next() System.out.print(rs.getString(1) + “t“); System.out.print(rs.getString(2) + “t“); System.out.print(rs.getInt(3) + “t“); System.out.print(rs.getDate(4) + “t“); System.out.println(“ “); rs.close(); s.close(); con.close(); catch (SQLException ce) System.out.println(ce); ,47,DriverManager 类是 JDBC 的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。另外,DriverManager 类也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。 DriverManager 类包含一列 Driver 类, 因此在调用通过调用DriverManager方法 之前,需要加载并注册所用的驱动器类,Class.forName,这将显式地加载驱动程序类。,步骤2- 加载( 注册)JDBC驱动程序2-1,48,加载JDBC驱动程序通常有下列两种方法: (1) 使用Class.forName() 语法:Class.forName(驱动程序名称); 例如:加载jdbc-odbc驱动程序, class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); 例如:加载Mysql JDBC驱动程序: Class.forName(“com.mysql.jdbc.Driver“);,49,步骤3-建立数据库连接,使用DriverManger.getConnection(),建立一个新的数据库连接。方法: 方法一:getConnection(String URL); 方法二:getConnection(String URL, java.util.Properties info); 方法三:getConnection(String url, String user, String password); 返回连接到特定数据库的Connnetion对象。参数String用来定义JDBC URL。,50,步骤3-建立数据库连接,方法三JDBC URL由三部分组成: jdbc:subProtocol:subName 即主通信协议、子通信协议和子名称。 例如1:连接SQL server 2000数据库可设URL为jdbc:odbc:MSSQL,其中主通信协议为jdbc,子通信协议为odbc,子名称是ODBC的数据源名称 。 例如2: jdbc:mysql:/localhost/sql_test,51,步骤3-建立数据库连接,方法三建立数据库连接的代码段如下: 通过数据源连接: String url =“jdbc:mysql:/localhost/DBName“; String login = “root“; String password =“root”; Connection conn = DriverManager.getConnection(url,login,password);,52,步骤3-建立数据库连接,方法一:mysql JDBC URL格式如下: jdbc:mysql:/host:port/database?参数名1=参数值1,53,54,步骤3-建立数据库连接,通常mysql连接URL可以设置为: String url=“ jdbc:mysql:/localhost:3306/test?user=root,55,步骤4-建立Statement对象执行SQL语句,因为Statement只是一个接口,没有构造函数,所以不能直接创建它的实例。但是Connection接口提供了createStatement方法专门用于创建Statement对象。 Connection conn=DriverManager.getConnection(“jdbc:mysql:/localhost/sql_test”,”root”,”root”); Statement stmt = con.createStatement(); 建立新数据库连接以后,必须先建立一个Statement对象才能执行SQL语句。在Java中,定义了三种类型的Statememt,它们是Statement、PreparedStatement和CallableStatement。三种均包含用于进行数据库操作的SQL语句。它们都作为在给定连接上执行 SQL 语句的容器,每个都专用于发送特定类型的 SQL 语句: Statement 对象用于执行不带参数的简单 SQL 语句;PreparedStatement 对象用于执行带或不带 IN 参数的预编译 SQL 语句;CallableStatement 对象用于执行对数据库已存储过程的调用。,56,Statement 方法,57,Statement接口,executeQuery(String sql) 方法,executeUpdate(String sql) 方法,execute(String sql) 方法,executeBatch(String sql) 方法,addBatch(String sql) 方法,clearBatch(String sql) 方法,常用于查询语句Select,返回单个结果集,用于执行Insert,Update,Delete和数据定义SQL语句 如create table,查询和修改的通用方法,用于批处理形式执行多个更新语如Update,Delete,Insert,但不执行select语句,58,步骤4- JDBC 查询2-1(excuteQuery),SQL 查询字符串,executeQuery() 方法,作为参数传递,ResultSet,返回查询数据,SELECT name, email, phone FROM colleagues;,使用 SQL 语句,查询可编写为:,String str = “SELECT emp_id, lname, fname FROM colleagues“; Statement stmt = con.createStatement(); ResultSet rset = stmt.executeQuery(str);,使用 JDBC 编写此查询,则代码为:,Statement接口,59,步骤4- JDBC 查询2-2(excuteQuery),它演示 SQL 中 sum( ) 方法的用法,演示:示例 2,/* * Jdbctest2 */ import java.sql.SQLException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; /* 这个类演示 SQL 中 sum() 方法的用法 * version 1.0, 2007 年 7 月 2 日 * author hunk */ class Jdbctest2 /* 构造方法*/ protected Jdbctest2() ,60,/* 这是 main 方法*/ public static void main(String args) try Class.forName(“com.mysql.jdbc.Driver“); catch (ClassNotFoundException ce) System.out.println(ce); try String url = “ jdbc:mysql:/localhost/test “; Connection con = DriverManager.getConnection(url); Statement s = con.createStatement(); ResultSet rs = s.executeQuery( “select hiredate, sum(salary) from friends group by hiredate“); while (rs.next() System.out.print(rs.getDate(1) + “t“); System.out.print(rs.getInt(2) + “t“); System.out.println(“ “); rs.close; s.close(); con.close(); catch (SQLException ce) System.out.println(ce); ,61,演示:示例 3,它演示 SQL 中 INSERT 语句的用法,/* * Jdbctest3 */ import java.sql.SQLException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; /* 这个类演示 INSERT 语句的用法. * version 1.0, 2007 年 7 月 2 日 * author hunk */ class Jdbctest3 /* 构造方法 */ protected Jdbctest3() ,步骤4- JDBC 插入数据实现(executeUpdate),62,/* 这是 main 方法*/ public static void main(String args) try Class.forName(“com.mysql.jdbc.Driver“); catch (ClassNotFoundException ce) System.out.println(ce); try String url = “jdbc:mysql:/localhost/test“; String str = “INSERT INTO “ + friends(name,address,salary)“ + “VALUES(朱宏,深圳 ,25690)“; Connection con = DriverManager.getConnection(url); Statement s = con.createStatement(); int rowcount = s.executeUpdate(str); String str1 = “select name, sum(salary) “ +from friends“ + “ group by name“;,63,ResultSet rs = s.executeQuery(str1); while (rs.next() System.out.print(rs.getString(1) + “t“); System.out.print(rs.getInt(2) + “t“); System.out.println(“ “); rs.close(); s.close(); con.close(); catch (SQLException ce) System.out.println(ce); ,演示:示例 3,64,步骤4- JDBC 删除和修改实现(executeUpdate),它演示 SQL 中各种命令的用法,演示:示例 4,/* * Jdbc2 */ import java.sql.SQLException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; /* 这这个类演示 SQL 中命令的用法. * version 1.0, 2007 年 7 月 2 日 * author hunk */ class Jdbc2 /* 构造方法.*/ protected Jdbc2() ,65,public static void main(String args) Connection con; Statement stmt; String url; String sql; try Class.forName(“com.mysql.jdbc.Driver“); catch (ClassNotFoundException ce) System.out.println(ce); try url = “jdbc:mysql:/localhost/test“; con = DriverManager.getConnection(url); sql = “Delete from friends where name like 张三;“; System.out.println(“ “); stmt = con.createStatement(); stmt.executeUpdate(sql); System.out.println(“张三 的记录已删除“); stmt.close(); con.close();,66,con = DriverManager.getConnection(url); sql = “Update friends set address=无锡 where name like 李四 “; System.out.println(“ “); stmt = con.createStatement(); stmt.executeUpdate(sql); stmt.close(); con.close(); System.out.println(“李四的记录已更新“); catch (SQLException ce) System.out.println(ce); ,67,步骤4- (executeUpdate),executeUpdate返回值是个整数,表示受影响的行数. 但对于Create table,Drop table等不操作行的数据定义的SQL语句, executeUpdate返回值是0.,68,步骤4- Statement-Execute方法,Execute可以执行查询语句和修改语句,当不知道SQL语句是什么类型的时候应用,一般情况下不常用,特别是知道类型的情况下。 execute 方法应该仅在语句能返回多个 ResultSet 对象、多个更新计数或 ResultSet 对象与更新计数的组合时使用。当执行某个已存储过程或动态执行未知 SQL 字符串(即应用程序程序员在编译时未知)时,有可能出现多个结果的情况,尽管这种情况很少见。,69,步骤4- Statement-Execute方法,输入SQL语句,execute(sql),判断返回值是 true 或是false,getResultSet(),getUpdateCount(),true,false,getMoreResults(),如果为 -1 则表示结果是结果集或没有结果 其他数值表示更改的行数,返回 null,没有结果,70,Statement-ExecuteBatch方法,用于以批处理形式执行多个更新语句, 例如:insert, update, delete以及数据定义SQL,不执行有返回结果集的SQL语句 如:select,输入SQL语句,add.Batch(sql),executeBatch(),clearBatch(),添 加 更 新 语 句,71,PreparedStatement接口 3-1,PreparedStatement接口和Statement类的不同之处在于PreparedStatement类对象会将传入的SQL命令事先编好等待使用,当有单一的SQL指令需多次执行时,用PreparedStatement会比Statement效率更高。,72,PreparedStatement接口 3-1,PreparedStatement接口 (预编译的 SQL 语句),PreparedStatement 用于提高运行时效率,执行 PreparedStatement 对象比执行 Statement 对象快,Statement 接口,73,PreparedStatement,包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN参数的值在 SQL 语句创建时未被指定。相反的,该语句为每个 IN 参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前,通过适当的setXXX 方法来提供。 PreparedStatement pstmt = con.prepareStatement(“UPDATE table4 SET m = ? WHERE x = ?“);,In参数,In参数,包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN参数的值在 SQL 语句创建时未被指定。相反的,该语句为每个 IN 参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前,通过适当的setXXX 方法来提供。 PreparedStatement pstmt = con.prepareStatement(“UPDATE table4 SET m = ? WHERE x = ?“);,In参数,In参数,74,PreparedStatement,pstmt.setLong(1, 12345); pstmt.setString(2, “aa”); pstmt.executeUpdate(); pstmt.setString(1, “Hi“); for (int i = 0; i 10; i+) pstmt.setInt(2, i); int rowCount = pstmt.executeUpdate(); ,75,String sql = “SELECT * FROM People WHERE id = ? AND name = ?“; PreparedStatement ps = connection.prepareStatement(sql); ps.setInt(1,id); ps.setString(2,name); ResultSet rs = ps.executeQuery();,76,PreparedStatement接口 3-2,它演示了PreparedStatement 的用法,演示:示例 5,77,/* * CourseAppl */ import java.sql.SQLException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; import java.sql.PreparedStatement; /* 这个类演示 SQL 中 PreparedStatement 的用法*/ class CourseAppl private Connection con; private String url; private String serverName; private String portNumber; private String databaseName; private String userName; private String password; private String sql;,78,CourseAppl() url = “jdbc:microsoft:sqlserver:/“; serverName = “localhost“; portNumber = “1433“; databaseName = “test“; userName = “sa“; password = “; private String getConnectionUrl() return url + serverName + “:“ + portNumber + “;databaseName =“ + databaseName + “;“; private java.sql.Connection getConnection() try Class.forName(“com.mysql.jdbc.Driver“); con = DriverManager.getConnection( getConnection(url, userName, password); if (con != null) System.out.println(“连接成功!“); catch (Exception e) e.printStackTrace(); System.out.println(“getConnection() 内的错误跟踪:“ + e.getMessage(); return con; ,79,public void display() try con = getConnection(); PreparedStatement pstmt = con.prepareStatement( “UPDATE friends SET salary = ? WHERE name like ?“); pstmt.setInt(1, 10000 ); pstmt.setString(2, “李四 “); pstmt.executeUpdate(); System.out.println(“记录已更新!“); Statement s = con.createStatement(); String sql = “SELECT * FROM friends “; ResultSet rs = s.executeQuery(sql); while (rs.next() System.out.println(“ “); System.out.print(rs.getInt(1) + “ “); System.out.println(rs.getInt(5); catch (SQLException ce) System.out.println(ce); public static void main(String args) CourseAppl retObj = new CourseAppl(); retObj.display(); ,80,PreparedStatement 接口 3-3,它演示在基于条件的 SQL 查询中如何使用 PreparedStatement,其中条件在 IN 参数中给出,演示:示例 6,81,import java.sql.SQLException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.PreparedStatement; /* 这个类演示在基于条件的 SQL 查询中使用 PreparedStatement*/ class RetrieveRecords private Connection con; private String url; private String serverName, portNumber, databaseName, userName; private String sql; RetrieveRecords() url = “jdbc:microsoft:sqlserver:/“; serverName = “localhost“; portNumber = “1433“; databaseName = “test“; userName = “sa“; password = “; ,82,private String getConnectionUrl() return url + serverName + “:“ + portNumber + “;databaseName =“ + databaseName + “;“; private java.sql.Connection getConnection() try Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver“); con = DriverManager.getConnection( getConnectionUrl(), userName, password); if (con != null) System.out.println(“连接成功!“); catch (Exception e) e.printStackTrace(); System.out.println(“getConnection() 内的错误跟踪:“ + e.getMessage(); return con; ,83,public void display() try con = getConnection(); sql = “select * from Friends where Salary ?“; PreparedStatement pstmt = con.prepareStatement( sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); pstmt.setInt(1, 5000); ResultSet rs = pstmt.executeQuery(); while (rs.next() System.ou

温馨提示

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

评论

0/150

提交评论