《java数据库操作》PPT课件.ppt_第1页
《java数据库操作》PPT课件.ppt_第2页
《java数据库操作》PPT课件.ppt_第3页
《java数据库操作》PPT课件.ppt_第4页
《java数据库操作》PPT课件.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

JDBC 回顾1 java.io包中包含了一系列对输入/输出进行操作的类 File类用于访问文件系统,但只能访问文件(或目录)的 属性,而不能进行读/写操作 流是指一连串流动的数据信号,是以先进先出方式发送信 息的通道,从流动方向上区分,流可以分为输入流和输出 流,从格式上区分,可以分为字节流和字符流 使用FileInputStream类和FileOutputStream类以字节流的方 式读写文件 回顾2 FileReader类和FileWriter类配合BufferedReader类和BufferedWriter类可 以以字符流的方式对文件进行读/写操作 要从控制台接受输入,需要将System.in对象进行包装,使用如下语句 : InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); DataInputStream类和DataOutputStream类在读/写数据时可以区分数据 类型 绝大部分的IO操作都有可能抛出IOException 本章相关词汇 单 词说 明 driver 驱动,驱动程序 connection 连接 manager 管理器 statement 语句 prepared 预备的,预编译的 result 结果 create 创建,创造 execute 执行 query 查询 本章目标 了解JDBC的概念和必要性 了解JDBC驱动程序类型 了解java.sql包 理解JDBC程序的结构 使用JDBC进行数据库编程 数据库访问技术简介 当今企业级应用程序大部分采用了客户机/ 服务器(C/S)模式; 客户端机器需要与服务器进行通讯,要操 作数据库中的数据,执行SQL(Structured Query Language结构化查询语言)语句以 及检索查询结果; 在Java中实现这些活动的技术称作JDBC。 数据库编程示意图 客户机/服务器 应用程序 数据库编程 JDBC 数据库 执行 SQL 语句 检索查询结果 关于DBMS DBMS(DataBase Management System)是指数据库管理 系统; 目前DBMS的生产商众多,产品也不尽相同,如: Oracle公司的Oracle系列; Microsoft公司的Access系列和SQL Server系列; Microsoft公司早期的FoxPro; IBM公司的DB2; Sybase公司的Sybase; 还有自由开源的MySQL等等。 这就意味着编程语言要针对不同的DBMS开发不同版本的 应用程序,这将是一项非常枯燥的工作。 ODBC ODBC(Open DataBase Connectivity)指 开放式数据库连接,是由Microsoft公司提 供的应用程序接口; 它负责连接各种不同产商和类型的DBMS, 然后为各种不同的编程语言提供查询、插 入、修改和删除数据的功能; 如同在各种不同的DBMS和各种不同的编程 语言之间架设了一座通用的桥梁。 JDBC JDBC(Java DataBase Connectivity)是由 Sun Microsystem公司提供的API( Application Programming Interface应用程 序编程接口); 它为Java应用程序提供了一系列的类,使其 能够快速高效地访问数据库; 这些功能是由一系列的类和对象来完成的, 我们只需使用相关的对象,即可完成对数据 库的操作。 JDBC工作方式示意图 Java 程序 JDBC 驱动程序 数据库 SQL 命令 结果 JDBC驱动程序类型 使用JDBC连接数据库可以通过不同的驱动 方式来实现,有4种驱动类型: JDBC-ODBC桥驱动 纯Java驱动 本地API部分Java驱动 JDBC网络纯Java驱动 不论采用哪种驱动方式,在程序中对数据 库的操作方式基本相同,只是加载不同的 驱动程序即可。 java.sql包 java.sql包也是Java内置的包,其中包含 了一系列用于与数据库进行通信的类和接 口; 如果要使用到这些类和接口的话,则必须 显式地声明如下语句: import java.sql.*; java.sql包中的一些接口 接口名称说 明 Connection连接对象,用于与数据库取得连接 Driver用于创建连接(Connection)对象 Statement 语句对象,用于执行SQL语句,并将数据检索 到结果集(ResultSet)对象中 PreparedStatement 预编译语句对象,用于执行预编译的SQL语句 ,执行效率比Statement高 CallableStatement存储过程语句对象,用于调用执行存储过程 ResultSet 结果集对象,包含执行SQL语句后返回的数据 的集合 java.sql包中的一些类 类 名 称说 明 SQLException 数据库异常类,是其它JDBC异常类的根类,继承 于java.lang.Exception,绝大部分对数据库进行操 作的方法都有可能抛出该异常 DriverManager 驱动程序管理类,用于加载和卸载各种驱动程序 ,并建立与数据库的连接 Date 该类中包含有将SQL日期格式转换成Java日期格 式的方法 TimeStamp表示一个时间戳,能精确到纳秒 JDBC程序访问数据库步骤 开 始导入 java.sql包 加载并注册驱动程序 创建Connection 对象创建 Statement 对象 执行SQL语句关闭ResultSet 对象 关闭Statement对象关闭Connection对象 使用ResultSet对象 建立数据源(ODBC) 附加相应产商提供的驱动 结 束 JDBC-ODBC桥方式纯Java驱动方式 步骤详解1:建立数据源 这里以JDBC-ODBC桥驱动方式为例,逐步详细地讲解在 Java程序中如何操作数据库,而对于其它驱动方式,只 需更换驱动程序即可,其余不变; 首先建立ODBC数据源: 【开始】 【设置】 【控制面板】【管理工具】 【数据源(ODBC)】 新建数据源,名称可以任意,这里假设已经建立了一个 名为myODBC的数据源,连接到SQL Server 2000中的pubs 数据库。 步骤详解2:加载驱动程序 使用Class类的forName方法,将驱动程序类加载到JVM( Java虚拟机)中; 对于使用JDBC-ODBC桥的驱动方式,应该加载: sun.jdbc.odbc.JdbcOdbcDriver类 如: Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“) ; 方 法 原 型说 明 static Class forName(String className) throws ClassNotFoundException 将由className指定完整名称的类 加载到JVM中,如果加载失败,将 抛出异常,必须捕捉 步骤详解3:获得连接对象 成功加载驱动后,必须使用DriverManager类的静态方法 getConnection来获得连接对象; 对于使用JDBC-ODBC桥的连接方式,连接字符串的一般形 式是:“jdbc:odbc:数据源名称”,如: Connection con = DriverManager.getConnection(“jdbc:odbc:myODBC“, “sa“, “); 方 法 原 型说 明 static Connection getConnection (String url, String user, String password) throws SQLException 参数url是连接字符串,参数user是数据库用户 名,参数password是登录口令,成功连接到数 据库返回Connection对象,连接失败则抛出 SQLException异常,必须捕捉 步骤详解释4:创建语句对象 一旦成功连接到数据库,获得Connection对象后,必须 通过Connection对象的createStatement方法来创建语句 对象,才可以执行SQL语句; 如: Statement sta = con.createStatement(); 方 法 原 型说 明 Statement createStatement() throws SQLException 成功创建返回Statement对象, 否则抛出SQLException异常, 必须捕捉 步骤详解5:执行SQL语句 使用语句对象来执行SQL语句,有两种情况: 一种是执行DELETE、UPDATE和INSERT之类的数据库操作 语句(DML),这样的语句没有数据结果返回,使用 Statement对象的executeUpdate方法执行; 如: sta.executeUpdate(“INSERT INTO Friends VALUES(田 七, 重庆, 456712, 2003-2-25, 7500)“); 方 法 原 型说 明 int executeUpdate(String sql) throws SQLException 参数sql是要执行的SQL语句,执行成功返 回受影响的行数,执行失败则抛出 SQLException异常,必须捕捉 步骤详解5:执行SQL语句(续) 另一种是执行SELECT这样的数据查询语句(DQL),这样 的语句将从数据库中获得所需的数据,使用Statement对 象的executeQuery 方法执行; 如: ResultSet rs = sta.executeQuery(“SELECT * FROM Friend“); 方 法 原 型说 明 ResultSet executeQuery(String sql) throws SQLException 参数sql是要执行的SQL语句,查询成 功返回包含有结果数据的ResultSet对 象,否则抛出SQLException异常,必 须捕捉 步骤详解6:关闭资源 当对数据库的操作结束后,应当将所有已经被打开的资 源关闭,否则将会造成资源泄漏; Connection对象、Statement对象和ResultSet对象都有 执行关闭的close方法; 函数原型都是:void close() throws SQLException 如: rs.close(); /关闭ResultSet对象 sta.close(); /关闭Statement对象 con.close(); /关闭Connection对象 有可能抛出SQLException异常,必须捕捉; 请注意关闭的顺序,最后打开的资源最先关闭,最先打 开的资源最后关闭。 数据库操作示例 import java.sql.*; /导入java.sql包 public class JDBCDemo public static void main(String args) String strCon = “jdbc:odbc:myODBC“; /连接字符串 String strUser = “sa“; /数据库用户名 String strPwd = “; /口令 System.out.println(“正在连接数据库.“); try /监控异常 Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); /加载驱动程序 Connection con; /获得连接对象 con = DriverManager.getConnection(strCon, strUser, strPwd); System.out.println(“成功连接到数据库。“); Statement sta = con.createStatement(); /创建语句对象 /执行SQL语句 String strSql = “DELETE FROM Friends WHERE Name = 郑六“; int count = sta.executeUpdate(strSql); System.out.println(“成功删除“ + count + “行数据。“); sta.close(); con.close(); /关闭所有已经打开的资源 catch (ClassNotFoundException cnfe) cnfe.printStackTrace(); catch (SQLException sqle) sqle.printStackTrace(); 操作结果集 使用Statement对象的executeQuery方法成功执行SELECT 语句后,将返回一个包含有结果数据的ResultSet对象, 要从该对象中获取数据,将使用到如下方法: 方 法 原 型说 明 boolean next() throws SQLException 将结果集游标往下移动一行,如果已经到 达结果集最后,将会返回false,有可能抛 异常,必须捕捉 X getX(String columnName) throws SQLException 获得某个字段的值,X是指具体的数据类 型,视数据库表中字段的具体情况而定, 该方法有一组,并且每个都有两种重载方 法,一种是以字段名称为参数,另一种是 以字段索引为参数(字段索引从1开始), 有可能抛异常,必须捕捉 X getX(int columnIndex) throws SQLException 操作结果集示例 try String strCon = “jdbc:odbc:MyODBC“; System.out.println(“正在连接数据库.“); Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); Connection con; con = DriverManager.getConnection(strCon, “sa“, “); System.out.println(“成功连接到数据库。“); Statement sta = con.createStatement(); ResultSet rs = sta.executeQuery(“SELECT * FROM Friends“); System.out.println(“查询到数据如下:“); while (rs.next() /循环将结果集游标往下移动,到达末尾返回false /根据字段名称获得各个字段的值 System.out.print(rs.getString(“Name“) + “t“); /获得字符串 System.out.print(rs.getString(“Address“) + “t“); /获得字符串 System.out.print(rs.getInt(“Telephone“) + “t“); /获得整数 System.out.print(rs.getDate(“HireDate“) + “t“); /获得日期型数据 System.out.println(rs.getFloat(“Salary“); /获得浮点型数据 rs.close(); sta.close(); con.close(); catch (ClassNotFoundException cnfe) cnfe.printStackTrace(); catch (SQLException sqle) sqle.printStackTrace(); PreparedStatement接口1 如果要多次执行相似的SQL语句,可以使用 PreparedStatemend(预编译语句对象)对象来执行; 通过Connection对象的prepareStatement方法来创建预 编译语句对象; PreparedStatement对象会将SQL语句预先编译,这样将 会获得比Statement对象更高的执行效率。 方 法 原 型说 明 PreparedStatement prepareStatement(String sql) throws SQLException 参数sql是要执行的SQL语句,根据指定的SQL语 句创建PrepareStatement对象,有可能抛异常,必 须捕捉 PreparedStatement接口2 包含在PreparedStatement对象中的SQL语句可以带有一 个或多个参数,使用“?”作为占位符,如: PreparedStatement ps = con.prepareStatement(“UPDATE Friends SET Address = ? WHERE Name = ?“); 在执行SQL语句之前,必须使用PreparedStatement对象 中的setX方法设置每个“?”位置的参数值; 如: ps.setString(1, “长沙“); ps.setString(2, “王五“); 方 法 原 型说 明 void setX(int parameterIndex, X x) throws SQLException 将parameterIndex指定的“?”位置指定为x的 值,这里X可以指代任意数据类型, “?”的索 引从1开始。 PreparedStatement接口3 设置好每个参数的值之后,就可以使用 PreparedStatement对象的executeUpdate和 executeQuery方法来执行SQL语句,这一点和Statement 对象很相似: 方 法 原 型说 明 int executeUpdate() throws SQLException 用于执行INSERT、DELETE和UPDATE语 句,执行成功返回受影响的行数,否则抛出 SQLException异常,必须捕捉 ResultSet executQuery() throws SQLException 用于执行SELECT语句,执行成功返回包含 有结果数据的ResultSet对象,否则抛出 SQLException异常,必须捕捉 PreparedStatement对象示例 String strCon = “jdbc:odbc:MyODBC“; System.out.println(“正在连接数据库.“); Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); Connection con; con = DriverManager.getConnection(strCon, “sa“, “); System.out.println(“成功连接到数据库。“); PreparedStatement ps; /使用带参数的SQL语句创建PreparedStatement对象 ps = con.prepareStatement(“UPDATE Friends SET Address = ? WHERE Name = ?“); /设置SQL语句中的参数值 ps.setString(1, “长沙“); ps.setString(2, “王五“); int count = ps.executeUpdate(); /执行命令 System.out.println(“成功更新了“ + count + “行数据。“); ps.close(); /关闭资源 con.close(); 纯Java驱动方式连接数据库 使用JDBC-ODBC桥方式连接数据库,其性能完全取决于数 据源(ODBC)的性能,并且无法脱离Microsoft的平台, 这样将带来不便; 大部分DBMS产商都为自己的产品开发了纯Java的驱动程 序,我们只需要加载相应的驱动,就可以直接连接到数 据库,而无需通过ODBC桥连接; 鉴于DBMS产品太多,这里只针对当今比较流行的SQL Server 2000和Oracle 9i进行介绍。 下载驱动程序包 要使用纯Java驱动,首先必须获得相应数 据库的驱动程序包; 根据数据库的类型,登录对应产商的官方 网站,一般都可以免费获得; 下载后,复制到本地磁盘,并将完整路径 设置到classpath环境变量中,如用开发工 具开发程序,还需在开发环境中设置路径 。 纯Java驱动连接SQL Server2000 使用纯Java驱动连接到SQL Server 2000数据库,加载驱 动程序应改成如下语句: Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDr iver“); 连接字符串应如下格式: “jdbc:microsoft:sqlserver:/服务器名或IP:1433;databaseName= 数据库名“ 如: Connection con = DriverManager.getConnection(“jdbc:microsoft:sqlserver:/ /127.0.0.1:1433;databaseName=pubs“, “sa“, “); 纯Java驱动连接SQL Server2005 使用纯Java驱动连接到SQL Server 2005数据库,加载驱 动程序应改成如下语句: Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDr iver“);

温馨提示

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

评论

0/150

提交评论