1 / 53

Chapter13 Java 数据库连接

Chapter13 Java 数据库连接. 授课教师:赵小敏 浙江工业大学 软件学院 Email:zxm@zjut.edu.cn. 学习目标. 了解 JDBC 技术及 Java.sql 包的类和接口 理解使用 Java.sql 包的类进行基本的数据库查询 如何编写 Java 访问数据库的程序. JDBC 技术. JDBC 本省是一个产品的商品名,它可被看做 Java 数据库连接的简称 (Java DataBase Connectivity) 。

Télécharger la présentation

Chapter13 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. Chapter13 Java数据库连接 授课教师:赵小敏 浙江工业大学 软件学院 Email:zxm@zjut.edu.cn

  2. 学习目标 • 了解JDBC技术及Java.sql包的类和接口 • 理解使用Java.sql包的类进行基本的数据库查询 • 如何编写Java访问数据库的程序

  3. JDBC技术 • JDBC本省是一个产品的商品名,它可被看做Java数据库连接的简称(Java DataBase Connectivity)。 • JDBC是一组用java语言编写的类组成,它已成为一种供数据库开发者使用的标准API,用户可以用纯JAVA API来编写数据库应用。

  4. JDBC的基本功能 • 建立与数据库的连接; • 发送SQL语句; • 处理数据库操作结果。

  5. JDBC在数据库访问的两层与三层模型

  6. JDBC接口概貌 • JDBC接口分为两个层次:一个是面向程序开发人员的JDBC API,另一个是底层的JDBC Driver API

  7. JDBC接口定义 • JDBC API在java.sql包的主要类有: 1、DriverManager类:处理驱动程序的装入,为新的数据库连接提供支持,驱动程序要向该类注册后才能被使用,当进行连接时该类根据JDBC URL选择匹配的驱动程序; 2、java.sql.Driver类:驱动程序接口,负责确认URL与驱动程序的匹配,建立到数据库的连接等;

  8. JDBC接口定义 3、java.sql.Connection类:表示到特定数据库的连接,其中的方法需要有相应的驱动程序实现; 4、java.sql.Statement类:为SQL语句提供一个容器,包括执行SQL语句、取得查询结果等方法;其中java.sql.Statement又有两个子类: Java.sql.PreparedStatement用于执行预编译的SQL语句; Java.sql.CallableStatement用于执行对一个数据库内嵌过程的调用

  9. JDBC接口定义 5、java.sql.ResultSet类:提供对结果集进行处理的手段。 6、JDBC API其它的类和接口查看API

  10. 数据库连接 • 建立一个连接用户在访问数据库时要在JDBC管理层java.sql.DriverManager。getConnection方法产生一个java.sql.Connection对象。该方法使用一个URL串作为地址参数。 • 选择合适的驱动程序。在数据库URL中,可以指定驱动程序的名称,也可不指定。 • 数据库URL在连接时,由数据库URL指定要连接的数据库,此时可称为JDBC URL,其格式为: jdbc:<子协议>:<子名称> 子协议odbc表示对odbc数据源的访问,其格式为: jdbc:odbc<数据源名>[:<属性名>=<属性值>]

  11. 如何建立数据源? 开始->控制面板->管理工具->ODBC数据源进入,选择“系统DSN”项,点击“添加…”

  12. 数据传递和结果接收 1、查询 执行一条查询语句后,返回的是由java.sql.ResultSet对象访问的行的集合。在该对象中提供了一系列get方法,访问当前的每一个数据项,ResultSet.next方法可实现在结果集的记录之间移动,可以使用数据项。 2、输入参数(IN) Java.sql.PrepareStatement接口提供了一系列setXXX方法向SQL语句传递输入参数,实现动态的SQL语句。在传递参数时,必须满足数据类型一致的要求。

  13. 数据传递和结果接收 3、输出参数(OUT) 在调用一个存储过程时,可用setXXX方法传递输入参数,使用输出参数接收返回结果。在使用时,必须先调用CallableStatement.registerOutParameter方法为每一个输出参数进行类型注册,然后执行该过程调用语句,最后使用getXXX方法取出输出参数的结果。

  14. 数据传递和结果接收 4、数据截断 如果使用Statement.setMaxFieldSize设置了列值的最大长度时,数据超过设置的最大长度将被截断。 5、SQL数据类型到Java类型的转换 SQL数据类型与Java类型的差异较大,JDBC提供了详细的SQL类型与Java类型转换的方法。常见JDBC类型与Java类型对照表见P365

  15. JDBC应用 一、与数据库建立连接: 1、加载驱动程序 JDBC-ODBC桥接驱动程序,或由数据库厂商提供的驱动程序,或通过设置Java属性中的sql.driver来指定驱动程序。 加载驱动程序的两种基本方法: DriverManager类的静态方法registerDriver java.lang.Class类的forName方法

  16. 加载Oracle JDBC驱动程序 DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); 或 Class.forName(“oracle.jdbc.driver.OracleDriver”)

  17. 加载MS SQL Server JDBC驱动程序 DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SQLServerDriver ()); 或 Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”)

  18. 加载IBM DB2驱动程序 DriverManager.registerDriver(new com.ibm.db2.jdbc.app.DB2Driver ()); 或 Class.forName(“com.ibm.db2.jdbc.app.DB2Driver ”)

  19. 加载IBM Informix驱动程序 DriverManager.registerDriver(new com.informix.jdbc.IfxDriver ()); 或 Class.forName(“com.informix.jdbc.IfxDriver”)

  20. 加载Sybase驱动程序 DriverManager.registerDriver(new com.sybase.jdbc.SybDriver ()); 或 Class.forName(“com.sybase.jdbc.SybDriver”)

  21. 加载MySQL驱动程序 DriverManager.registerDriver(new org.gjt.mm.mysql.Driver()); 或 Class.forName(“org.gjt.mm.mysql.Driver”)

  22. 加载Access驱动程序 DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver()); 或 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;

  23. 与数据库建立连接 2、建立连接 DriverManager类的getConnection方法用于建立与某个数据源的连接。若与由URL对象指定的数据源建立连接成功,则返回一个Connection类的对象

  24. 连接Oracle8/8i/9i数据库(用thin模式) Class.forName(“oracle.jdbc.driver.OracleDriver”);String url="jdbc:oracle:thin:@localhost:1521:test"; //test为数据库的SID String user=“admin"; String password=“admin1234"; Connection conn= DriverManager.getConnection(url,user,password); Statement stmt=conn.createStatement(); String sql="select * from student"; ResultSet rs=stmt.executeQuery(sql); 

  25. 连接MS SQL Server7.0/2k数据库 Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”).; String url=“jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test”;  //test为数据库名String user="sa"; String password=""; Connection conn= DriverManager.getConnection(url,user,password); Statement stmt=conn.createStatement(); String sql="select * from student"; ResultSet rs=stmt.executeQuery(sql); 

  26. 连接IBM DB2数据库 Class.forName("com.ibm.db2.jdbc.app.DB2Driver "); String url="jdbc:db2://localhost:5000/test"; //test为数据库名 String user="admin"; String password=""; Connection conn= DriverManager.getConnection(url,user,password); Statement stmt=conn.createStatement(); String sql="select * from student"; ResultSet rs=stmt.executeQuery(sql); 

  27. 连接MySQL数据库 Class.forName("org.gjt.mm.mysql.Driver"); String url ="jdbc:mysql://localhost/test?user=root&password=‘’&useUnicode=true&characterEncoding=bgk" //test为数据库名 Connection conn= DriverManager.getConnection(url); Statement stmt=conn.createStatement(); String sql="select * from student"; ResultSet rs=stmt.executeQuery(sql); 

  28. 连接Access数据库 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ; String url="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=test.mdb"; Connection conn = DriverManager.getConnection(url,"","");

  29. 与数据库建立连接 3、检查警告信息 若连接失败,则产生SQLException异常。成功时也可能产生一些警告信息 4、获得关于数据库的信息 用如下语句获取关于数据库表结构的信息: DatabaseMetaData dma=con.getMetaData();

  30. 与数据库建立连接 5、关闭连接 close()方法实现关闭连接 6、捕获异常 在建立连接和对数据库进行操作过程中,都可能产生异常 7、获取和设置连接选项 对一个连接可设置一些连接选项,如是否只读,是否自动提交,是否自动关闭等。如setReadOnly用户设置只读,而isReadOnly用于获得连接是否只读。

  31. JDBC应用 二 、查询处理 JDBC中查询语句的执行方法可分为三类: Statement PreparedStatement CallableStatement

  32. Statement类 (1)创建Statement对象 Statement对象主要用于语句的查询。建立一个Statement对象语句如下: Statement stmt=con.CreateStatement(); (2)执行查询语句 在Statement对象上,可使用executeQuery方法来执行一查询语句,如: ResultSet rs=stmt.executeQuery(“Select * from Authors”);

  33. Statement类 (3)获取和设置选项 SetMaxRows:设置结果能容纳的最多行数 getMaxRows:返回目前结果集能容纳的最多行数 setQueryTimeOut:设置一个语句的执行等待时间 (4)关闭Statement 用语句stmt.close()关闭Statement

  34. PreparedStatement类 • Statement对象在每次执行SQL语句时都将该语句转给数据库,在多次执行同一语句时,效率较低。 • 使用PreparedStatement对象可以提高效率。若数据库支持预编译,它可以将SQL语句传给数据库做预编译,提高速度。 • PreparedStatement对象的SQL语句还可以接收参数

  35. PreparedStatement类 • PreparedStatement类是Statement类派生的子类。 (1)创建PreparedStatement对象 从一个Connection对象可以创建一个PreparedStatement对象。在创建时,应给出预编译的SQL语句,如: PreparedStatement stmt=con. PreparedStatement (“Select * from Authors”);

  36. PreparedStatement类 (2)执行查询 使用execQuery方法来执行一查询语句,如: ResultSet rs=stmt. executeQuery(); (3)获取和设置选项 用父类Statement类的相应方法来获取和设置选项 (4) 关闭对象 用close()方法关闭

  37. CallableStatement类 CallableStatement对象用于执行数据库中的存储过程。

  38. JDBC应用 三、检索结果集 ResultSet对象包括一个由查询语句返回的一个表,这个表包含所有的查询结果。对ResultSet对象的处理必须逐条记录进行,而对每一记录中的各个数据项,可按任何顺序处理。

  39. 检索结果集的例子 • 假设表table由数据项a,类型为int;数据项b,类型为String,数据项c,类型为byte Statement stmt=con.createStatement(); ResultSet r=stmt.executeQuery(“select a,b,c from table”); while(r.next()){ int i=r.getInt(1); String s=r.getString(“b”); byte b[]=r.getBytes(3); System.out.println(i+s+b[0]); }

  40. 更新数据库操作 (1)对表中记录的操作 对一个表中的记录可以进行修改、插入和删除操作,分别对应SQL的update、Insert和Delete操作。 可用executeUpdate方法实现上述操作,它的参数是String对象,即要执行的SQL语句,返回的不是ResultSet对象,而是一个整数。对于不返回值的SQL语句, executeUpdate方法的返回值为0。

  41. 更新数据库操作 (2) 创建和删除表 创建表:Create table 表名 删除表:Drop table 表名 如创建数据库表Authors: stmt.executeUpdate(“create table Authors(AuthorID int, FirstName char(20), LastName char(20), YearBorn int”); 删除表Authors的语句: stmt.executeUpdate(“drop table Authors“);

  42. 增加和删除表结构中的数据项 • 对一个表的数据项进行修改操作使用SQL的Alter table语句。 如在表Authors中增加一数据项Address: stmt.executeUpdate(“alter table Authors add column Address varchar(50)”); 删除表中一列: stmt.executeUpdate(“alter table Authors drop column Address”);

  43. 用JDBC访问数据库示例 • 例1:用户登录:Access版、MySQL版

  44. 用JDBC访问数据库示例 • 例2:显示Books.mdb数据库中Authors的内容 该Access数据库中有四个表: - Authors - Publishers - AuthorISBN - Titles

  45. 表Authors

  46. 表Publishers

  47. 表AuthorISBN

  48. 表Titles

  49. 数据库Books.mdb各表之间的关系 主关键字唯一地标识了表中的记录,每个记录的主关键字字段都必须有一个唯一的值,这叫实体完整性规则。

  50. 用JDBC访问数据库示例 程序步骤: (1)加载驱动连接数据库或设置系统的ODBC数据源后建立数据库的连接 开始->设置->控制面板->ODBC数据源进入,选择“系统DSN”项,点击“添加…” (2) 发送访问、操作数据库的SQL语句 加载JDBC-ODBC桥驱动程序用class.forName方法来完成:Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); (3)处理对数据库访问的结果 源程序TableDisplay.java

More Related