Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter13 Java数据库连接 授课教师:赵小敏 浙江工业大学 软件学院

Similar presentations


Presentation on theme: "Chapter13 Java数据库连接 授课教师:赵小敏 浙江工业大学 软件学院"— Presentation transcript:

1 Chapter13 Java数据库连接 授课教师:赵小敏 浙江工业大学 软件学院

2 学习目标 了解JDBC技术及Java.sql包的类和接口 理解使用Java.sql包的类进行基本的数据库查询

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”);  //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类派生的子类。
从一个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

51 性能优化 预编译语句 SQL语句批处理机制 stmt=c.createStatement();
sql="INSERT INTO film1 (filmdata) VALUES (?)"; stmt=c.prepareStatement(sql); for (int i=1;i<=20000;i++){ stmt.setString(1,""+i); stmt.executeUpdate(); } SQL语句批处理机制 stmt=c.createStatement(); sql="INSERT INTO film1 (filmdata) VALUES ('"+i+"')"; stmt.addBatch(sql); stmt.executeBatch();

52 作业 1、已知有一个Access数据库文件StuMngSys.xls,里面有一张学生表stu,stu的各字段含义如下表所示。
请编写一个Java程序将学生名字为“张三”的信息插入表中,信息如下表所示。

53 作业 2、编写一个从MS SQLServer数据库的学生表中查询20岁以下的学生信息的程序,其中数据库名为StuMngSys,学生表名为stu,stu的各字段含义如下表所示。


Download ppt "Chapter13 Java数据库连接 授课教师:赵小敏 浙江工业大学 软件学院"

Similar presentations


Ads by Google