1 / 21

第 16 讲 利用 JDBC 实现 Java 程序与数据库的连接

第 16 讲 利用 JDBC 实现 Java 程序与数据库的连接. 16.1 JDBC 概述 16.2 JDBC 驱动程序 16.3 JDBC 常用类与方法 16.4 数据库访问过程. 本章要 点. 了解 JDBC 的基本概念 了解 JDBC 的几种常用驱动程序 了解 JDBC 的常用类与方法,掌握在与数据库连接经常使用的类与法 掌握 JDBC 访问数据库的基本方法. 16.1 JDBC 概述.

cyndi
Télécharger la présentation

第 16 讲 利用 JDBC 实现 Java 程序与数据库的连接

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第16讲 利用JDBC实现Java程序与数据库的连接 • 16.1 JDBC概述 • 16.2 JDBC驱动程序 • 16.3 JDBC常用类与方法 • 16.4 数据库访问过程

  2. 本章要点 • 了解JDBC的基本概念 • 了解JDBC的几种常用驱动程序 • 了解JDBC的常用类与方法,掌握在与数据库连接经常使用的类与法 • 掌握JDBC访问数据库的基本方法

  3. 16.1 JDBC概述 • Java定义了一个通用的SQL数据库存取框架,在各种各样的数据库连接模块上提供统一的界面,使与数据库无关的Java工具和产品成为可能,使得数据库连接的开发者可以提供各种各样的连方案。这一通用的SQL数据库存取框架就是JDBC。 • JDBC的设计者以X/open SQL Call Level Interface(调用层接口)做为API的基础,它也是Microsoft's ODBC(开放数据库互连)的基础。

  4. 16.2 JDBC应用 • 与数据库建立连接 ,发送 SQL 语句 ,处理结果。 • Connection con = DriverManager.getConnection ("jdbc:odbc:wombat", "login", "password"); • Statement stmt = con.createStatement(); • ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1"); • while (rs.next()) • System.out.println(rs.getString("a") + " " + rs.getString("b") + " " + rs.getString("c")); • JDBC 是一种低级 API ,是高级 API 的基础

  5. 16.3 两层模型和三层模型 • JDBC API 既支持数据库访问的两层模型,同时也支持三层模型。 •   在两层模型中,Java applet 或应用程序将直接与数据库进行对话。这将需要一个 JDBC 驱动程序来与所访问的特定数据库管理系统进行通讯。用户的 SQL 语句被送往数据库中,而其结果将被送回给用户。数据库可以位于另一台计算机上,用户通过网络连接到上面。这就叫做客户机/服务器配置,其中用户的计算机为客户机,提供数据库的计算机为服务器。网络可以是 Intranet(它可将公司职员连接起来),也可以是 Internet。 •   在三层模型中,命令先是被发送到服务的“中间层”,然后由它将 SQL 语句发送给数据库。数据库对 SQL 语句进行处理并将结果送回到中间层,中间层再将结果送回给用户。MIS 主管们都发现三层模型很吸引人,因为可用中间层来控制对公司数据的访问和可作的的更新的种类。中间层的另一个好处是,用户可以利用易于使用的高级API,而中间层将把它转换为相应的低级调用。最后,许多情况下三层结构可提供一些性能上的好处。

  6. 16.2.3 JDBC产品 • 有关最新的信息,请查阅 JDBC 的网站,可通过从以下 URL 开始浏览找到: • http://java.sun.com/products/jdbc • 1 JavaSoft 框架 • JavaSoft 提供三种 JDBC 产品组件,它们是 Java 开发工具包 (JDK) 的组成部份:JDBC 驱动程序管理器,JDBC 驱动程序测试工具包,和JDBC-ODBC 桥。 • 2 JDBC 驱动程序的类型 • JDBC-ODBC 桥加 ODBC 驱动程序:JavaSoft 桥产品利用 ODBC 驱动程序提供 JDBC 访问。 • 本地 API - 部份用 Java 来编写的驱动程序 • JDBC 网络纯 Java 驱动程序 • 本地协议纯 Java 驱动程序

  7. 16.3 JDBC常用类与方法之一 1、DriverManager类:负责管理JDBC驱动程序。使用JDBC驱动程序之前,必须先将驱动程序加载并向DriverManager注册后才可以使用,同时提供方法来建立与数据库的连接。方法:A、Class.forName(Stringdriver);//加载注册驱动程序B、StaticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException;//取得对数据库的连接C、StaticDrivergetDriver(Stringurl)throwsSQLExcetion;//在已经向DriverManager注册的驱动程序中寻找一个能够打开url所指定的数据库的驱动程序

  8. 16.3 JDBC常用类与方法之二 2、Connection类负责维护JSP/JAVA数据库程序和数据库之间的联机。可以建立三个非常有用的类对象。方法:A、StatementcreateStatement()throwsSQLException;//建立Statement类对象StatementcreateStatement(intresultSetType,intresultSetConcurrency)throwsSQLException;//建立Statement类对象resultSetType值TYPE_FORWARD_ONLY结果集不可滚动TYPE_SCROLL_INSENSITIVE结果集可滚动,不反映数据库的变化TYPE_SCROLL_SENSITIVE结果集可滚动,反映数据库的变化resultSetConcurrency值CONCUR_READ_ONLY不能用结果集更新数据CONCUR_UPDATABLE能用结果集更新数据JDBC2.0中才支持滚动的结果集,而且可以对数据进行更新B、DatabaseMetaDatagetMetaData()throwsSQLException;//建立DatabaseMetaData类对象C、PreparedStatementprepareStatement(Stringsql)throwsSQLException;//建立PreparedStatement类对象D、booleangetAutoCommit()throwsSQLException//返回Connection类对象的AutoCommit状态E、voidsetAutoCommit(booleanautoCommit)throwsSQLException//设定Connection类对象的AutoCommit状态F、voidcommit()throwsSQLException//确定执行对数据库新增、删除或修改记录的操作G、voidrollback()throwsSQLException//取消执行对数据库新增、删除或修改记录的操作H、voidclose()throwsSQLException//结束Connection对象对数据库的联机I、booleanisClosed()throwsSQLException//测试是否已经关闭Connection类对象对数据库的联机

  9. 16.3 JDBC常用类与方法之三 3、Statement类通过Statement类所提供的方法,可以利用标准的SQL命令,对数据库直接新增、删除或修改操作方法:A、ResultSetexecuteQuery(Stringsql)throwsSQLException//使用SELECT命令对数据库进行查询B、intexecuteUpdate(Stringsql)throwsSQLException//使用INSERT\DELETE\UPDATE对数据库进行新增、删除和修改操作。C、voidclose()throwsSQLException//结束Statement类对象对数据库的联机

  10. 16.3 JDBC常用类与方法之四 4、PreparedStatement类PreparedStatement类和Statement类的不同之处在于PreparedStatement类对象会将传入的SQL命令事先编好等待使用,当有单一的SQL指令比多次执行时,用PreparedStatement类会比Statement类有效率方法:A、ResultSetexecuteQuery()throwsSQLException//使用SELECT命令对数据库进行查询B、intexecuteUpdate()throwsSQLException//使用INSERT\DELETE\UPDATE对数据库进行新增、删除和修改操作。C、ResultSetMetaDatagetMetaData()throwsSQLException//取得ResultSet类对象有关字段的相关信息D、voidsetInt(intparameterIndex,intx)throwsSQLException//设定整数类型数值给PreparedStatement类对象的IN参数E、voidsetFloat(intparameterIndex,floatx)throwsSQLException//设定浮点数类型数值给PreparedStatement类对象的IN参数F、voidsetNull(intparameterIndex,intsqlType)throwsSQLException//设定NULL类型数值给PreparedStatement类对象的IN参数G、voidsetString(intparameterIndex,Stringx)throwsSQLException//设定字符串类型数值给PreparedStatement类对象的IN参数H、voidsetDate(intparameterIndex,Datex)throwsSQLException//设定日期类型数值给PreparedStatement类对象的IN参数I、voidsetTime(intparameterIndex,Timex)throwsSQLException//设定时间类型数值给PreparedStatement类对象的IN参数

  11. 16.3 JDBC常用类与方法之五 5、DatabaseMetaData类DatabaseMetaData类保存了数据库的所有特性,并且提供许多方法来取得这些信息。方法:A、StringgetDatabaseProductName()throwsSQLException//取得数据库名称B、StringgetDatabaseProductVersion()throwsSQLException//取得数据库版本代号C、StringgetDriverName()throwsSQLException//取得JDBC驱动程序的名称D、StringgetDriverVersion()throwsSQLException//取得JDBC驱动程序的版本代号E、StringgetURL()throwsSQLException//取得连接数据库的JDBCURLF、StringgetUserName()throwsSQLException//取得登录数据库的使用者帐号

  12. 16.3 JDBC常用类与方法之六 6、ResultSet类负责存储查询数据库的结果。并提供一系列的方法对数据库进行新增、删除和修改操作。也负责维护一个记录指针(Cursor),记录指针指向数据表中的某个记录,通过适当的移动记录指针,可以随心所欲的存取数据库,加强程序的效率。方法:A、booleanabsolute(introw)throwsSQLException//移动记录指针到指定的记录B、voidbeforeFirst()throwsSQLException//移动记录指针到第一笔记录之前C、voidafterLast()throwsSQLException//移动记录指针到最后一笔记录之后D、booleanfirst()throwsSQLException//移动记录指针到第一笔记录E、booleanlast()throwsSQLException//移动记录指针到最后一笔记录F、booleannext()throwsSQLException//移动记录指针到下一笔记录G、booleanprevious()throwsSQLException//移动记录指针到上一笔记录H、voiddeleteRow()throwsSQLException//删除记录指针指向的记录I、voidmoveToInsertRow()throwsSQLException//移动记录指针以新增一笔记录J、voidmoveToCurrentRow()throwsSQLException//移动记录指针到被记忆的记录K、voidinsertRow()throwsSQLException//新增一笔记录到数据库中L、voidupdateRow()throwsSQLException//修改数据库中的一笔记录M、voidupdate类型(intcolumnIndex,类型x)throwsSQLException//修改指定字段的值N、intget类型(intcolumnIndex)throwsSQLException//取得指定字段的值O、ResultSetMetaDatagetMetaData()throwsSQLException//取得ResultSetMetaData类对象

  13. 16.3 JDBC常用类与方法之七 7、ResultSetMetaData类ResultSetMetaData类对象保存了所有ResultSet类对象中关于字段的信息,提供许多方法来取得这些信息。方法:A、intgetColumnCount()throwsSQLException//取得ResultSet类对象的字段个数B、intgetColumnDisplaySize()throwsSQLException//取得ResultSet类对象的字段长度C、StringgetColumnName(intcolumn)throwsSQLException//取得ResultSet类对象的字段名称D、StringgetColumnTypeName(intcolumn)throwsSQLException//取得ResultSet类对象的字段类型名称E、StringgetTableName(intcolumn)throwsSQLException//取得ResultSet类对象的字段所属数据表的名称F、booleanisCaseSensitive(intcolumn)throwsSQLException//测试ResultSet类对象的字段是否区分大小写G、booleanisReadOnly(intcolumn)throwsSQLException//测试ResultSet类对象的字段是否为只读

  14. 16.4 数据库访问过程 16.4.1 JDBC<-->ODBC访问的流程 JDBC Driver Mannager->JDBC<->ODBC桥->ODBC->数据库客户机驱动库->数据库服务器->返回查询结果,在这种访问中值的我们注意的是虽然JAVA是“Write Once ,Run Anywhere”,但是如果通过这种访问的话,需要客户端必须设置ODBC和有相应的数据库客户机的驱动。 由于不是所有的数据库服务器提供商都提供JDBC驱动程序(给JDBC访问提供相应的接口),所以就有了JDBC<->ODBC Bridge。

  15. 16.4 数据库访问过程之二 16.4.2 JDBC驱动返回查询结果 JDBC Driver Mannager->局部JDBC驱动->客户端数据库->数据库服务JDBC驱动返回查询结果器->返回查询结果,这种访问事实上是转换JDBC调用为相应的数据库(Oracle, Sybase, Informix, DB2, 和其他的数据库数据库管理系统)的客户端API调用,这种方式的访问需要相应的数据库提供商提供相应的JDBC驱动程序,但是有一种好处,可以独立于odbc用于可以随处可Run的客户端的浏览器中的Applet程序。

  16. 16.4.3 JDBC连接举例 以连接一个SQLSever数据库为例 设置odbc:打开odbc数据源->选择系统dsn(Click加新的dsn-)->接下来输入选择数据库类型、输入dsn名:、选择服务器、连接数据库的方式、输入数据库的登陆用户和密码->测试连接,如果测试成功的话,那么dsn就建立好了,假定dsn名为Sqlserver.使用的是sqlserver2000,以 “sa”登陆,密码为空。

  17. 16.4.3 JDBC连接举例(续一) import java.sql.*; //加载java数据连接包,java基本所有的数据库的调用的都在这个东西里面 public class InsertCoffees { public static void main(String args[]) { String url = "jdbc:odbc:sqlserver"; //取得连接的url名,注意sqlserver是dsn名 Connection con; //实例化一个Connection对象 Statement stmt; String query = "select * from col_link"; //选择所有的Col_link表中的数据输出

  18. 16.4.3 JDBC连接举例(续二) try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载jdbc-odbc桥驱动 } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); //加载jdbc-odbc桥错误 System.err.println(e.getMessage()); //其他错误 } try { con = DriverManager.getConnection(url, "sa", ""); //数据库连接

  19. 16.4.3 JDBC连接举例(续三) stmt = con.createStatement(); //Create 一个声明 stmt.executeUpdate("CREATE TABLE col_link (sitename varchar (20) NULL ,siteurl varchar (50) NULL) "); //执行了一个sql语句生成了一个表col_link的表 stmt.executeUpdate("insert into col_link values('ASP中华网','http://www.aspcn.com')"); stmt.executeUpdate("insert into col_link values('永远到底有多远','http://xuankong.com')"); //执行一个insert into语句 stmt.executeUpdate("update col_link set siteurl='http://www.aspcn.com/xuankong/xuankongt.jpg' where siteurl='http://xuankong.com'"); //执行一个update语句,更新数据库 ResultSet rs = stmt.executeQuery(query); //返回一个结果集

  20. 16.4.3 JDBC连接举例(续四) System.out.println("Col_link表中的数据如下(原始数据)"); //下面的语句使用了一个while循环打印出了col_link表中的所有的数据 System.out.println("站点名 "+" "+"站点地址"); System.out.println("---------------"+" "+"----------------"); while (rs.next()) { String s = rs.getString("sitename"); String f = rs.getString("siteurl"); //取得数据库中的数据 System.out.println(s + " " + f); /*String t = rs.getString(1); String l = rs.getString(2); System.out.println(t + " " + l);*//*jdbc提供了两种方法识别字段,一种是使用getXXX(注意这里的getXXX表示取不同类型字段的不同的方法)获得字段名, 第二种*是通过字段索引,这里把第二种方法注释了*/

  21. 16.4.3 JDBC连接举例(续五) /*可以访问这个连接获得getxxx的用法:http://java.sun.com/docs/books/tutorial/jdbc/basics/_retrievingTable.html*/ } stmt.close(); con.close(); //上面的语句关闭声明和连接 } catch(SQLException ex) { System.err.println("SQLException: " + ex.getMessage()); //显示数据库连接错误或者查询错误 } } }

More Related