《第15章 数据库连接优秀课件.ppt》由会员分享,可在线阅读,更多相关《第15章 数据库连接优秀课件.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第15章 数据库连接第1页,本讲稿共30页1.JDBC概述概述 JDBC(Java Database Connectivity)JDBC(Java Database Connectivity)可以说是可以说是JavaJava应用程序与数据库的沟通应用程序与数据库的沟通桥梁,通过桥梁,通过JDBCJDBC所提供的所提供的API(API(应用程应用程序接口序接口),JavaJava程序设计时可以轻松地程序设计时可以轻松地编写出和数据连接的应用程序。编写出和数据连接的应用程序。第2页,本讲稿共30页JDBC概述概述 JDBCJDBC是由是由SUNSUN公司免费提供的,它分为两种公司免费提供的,它分为
2、两种接口。接口。一种是面向应用程序开发人员的接口一种是面向应用程序开发人员的接口JDBC APIJDBC API,它是它是JDKJDK中的中的java.sql.*java.sql.*中的一中的一系列类、接口、例外以及这些类中的属性和系列类、接口、例外以及这些类中的属性和方法。方法。另一种是面向数据库驱动程序开发的另一种是面向数据库驱动程序开发的JDBC Driver APIJDBC Driver API,并不为普通的开发者并不为普通的开发者熟悉。熟悉。第3页,本讲稿共30页数据库连接图示数据库连接图示JAVAAPPLICATIONJDBCAPIJAVAManagerJDBCDriverAPID
3、ataBase JDBC连接数据库结构图 DriverADriverBDriverCDriverD第4页,本讲稿共30页Java Application:Java的应用程序,包括JSP程序、JAVA程序、APPLET小程序等等。它通过调用JDBC API来访问数据库。JDBC API:一种JDBC接口,在其中提供了一系列的类,完成了加载驱动程序,连接数据库,对数据库进行处理,和从数据库中取回结果的功能。第5页,本讲稿共30页JDBC Manager:负责对上一个JDBC API的调用转换成JDBC Driver API的调用,它是由SUN公司来完成的。JDBC Driver API:针对不同的
4、数据库驱动程序开发商的接口,也是由SUN公司提供的。不同的开发商根据自己的数据库来实现这些接口。第6页,本讲稿共30页 数据库驱动程序数据库驱动程序 JDBCJDBC要与数据库建立连接,主要提供了要与数据库建立连接,主要提供了三项功能:三项功能:1.1.和数据库建立连接。和数据库建立连接。2.2.将将SQLSQL语句传递给数据库。语句传递给数据库。3.3.返回执行返回执行SQLSQL语句的结果。语句的结果。但是为了和不同的数据库建立连接,但是为了和不同的数据库建立连接,JDBCJDBC必须获取连接数据库的必须获取连接数据库的JDBCJDBC驱动程序。驱动程序。第7页,本讲稿共30页数据库驱动程
5、序的分类数据库驱动程序的分类 每种不同的数据库的驱动程序都不同,但从类型上分为四类:1.JDBC-ODBC Bridge:被称作JDBC-ODBC 桥。2.部分java技术的本地库驱动。3.本地协议的完全JAVA驱动程序。4.网络协议的完全JAVA驱动程序。第8页,本讲稿共30页1.JDBC-ODBC Bridge:由于微软的ODBC技术比较完善和成熟,世界上各个数据库管理系统开发商广泛采用。SUN公司开发了一种技术,将JDBC的调用转化成ODBC的调用,起到了一种桥梁连接的作用,被称作JDBC-ODBC 桥。使用这种驱动在进行数据库连接时需要在操作系统中创建了数据库管理系统的ODBC数据源,
6、就可以在JAVA/JSP程序当中访问数据库了。这种技术在JDK中就已经提供了,因此不需要额外的安装程序。独立于具体数据库。第9页,本讲稿共30页2.部分java技术的本地库驱动:这种驱动方法是将JDBC转成调用执行数据库开发商所提供的API来访问数据库。比方说,大型数据库Oracle其自身的专门驱动程序和SQL Server数据库的驱动程序分别为:oracle.jdbc.driver.OracleDriver,com.Microsoft.jdbc.sqlserver.SQLServerDriver。这种方法和具体的数据库有很大的关系,采用不同的数据库,驱动程序的名字也就不同。第10页,本讲稿共
7、30页3.本地协议的完全JAVA驱动程序:这种驱动将JDBC调用转化为特定数据库的网络协议。此方法独立于具体数据库。但需要在客户段与数据库之间安装一种中介软件,让客户端的请求通过此中介软件可被转化成数据库能够接受处理的信息。第11页,本讲稿共30页4.网络协议的完全JAVA驱动程序:这种驱动将JDBC调用转化为独立于特定数据库的网络协议。此方法独立于具体数据库。客户端不需要安装任何软件和中介软件。完全用JAVA语言通过网络协议将客户端的请求送至数据库端进行处理,而执行结果也能直接从数据库端取回。第12页,本讲稿共30页使用JDBC步骤一般来说有下列几个步骤:1.装载数据库的JDBC驱动程序。2
8、.与数据库建立连接。3.将SQL语句传递到数据库中,执行操作,返回得到的结果。4.关闭数据库连接。第13页,本讲稿共30页连接过程示例(连接过程示例(不能直接运行不能直接运行)Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver).newInstance();String url=jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=college;String user=sa;String password=;Connection conn=DriverManager.get
9、Connection(url,user,password);Statement stmt=conn.createStatement();String sql=select*from teacher;ResultSet rs=stmt.executeQuery(sql);while(rs.next()rs.close();stmt.close();conn.close();第14页,本讲稿共30页 装载数据库系统的JDBC驱动程序,是将JDBC驱 动 程 序 的 类 载 入 至 JVM中,需 要 使 用java.lang.Class类中的Class.forName();方法来实现,该方法有一个参
10、数,就是指定的JDBC的驱动器名称。Class.forName(driver_name);例如:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);1.1.装载装载JDBCJDBC的驱动程序的驱动程序 第15页,本讲稿共30页2.2.连接数据库连接数据库 在加载了数据库驱动程序后使用DriverManager.getConnection()方法建立与数据库的连接,得到一个ConnectionConnection 类型的对象。Connection con=DriverManager.getConnection(url,username,pwd)三个参数分别
11、是:url 连接数据库的URL。username 用户名。pwd 密码 第16页,本讲稿共30页2.2.连接数据库连接数据库 JDBC的URL的语法格式为:jdbc:jdbc:drivername:dbnamedrivername 是JDBC驱动程序的简称,dbname是数据库资源的名称。第17页,本讲稿共30页2.2.连接数据库连接数据库 第一种驱动方法JDBC-ODBC Bridge技术,则是jdbc:odbc:DSN名称(ODBC中数据库的DSN名称)。第二种驱动方法则要看数据库的类型和驱动程序的选择,如果使用的SQL SERVER数据库,则是jdbc:microsoft:sqlserv
12、er:/localhost:1433;DatabaseName=dbname。第18页,本讲稿共30页3.3.执行执行SQLSQL语句语句 向已经建立的连接的数据库发送向已经建立的连接的数据库发送SQLSQL语句需要使用语句需要使用StatementStatement对象。对象。StatementStatement对象其中包括了执行对象其中包括了执行SQLSQL语句和获取返回结果的方法。语句和获取返回结果的方法。创建创建statementstatement对象的方法如下:对象的方法如下:Statement stmt=con.createStatement();Statement stmt=co
13、n.createStatement();第19页,本讲稿共30页3.3.执行执行SQLSQL语句语句 Statement Statement 接口提供了不同执行接口提供了不同执行SQLSQL语句的方法:语句的方法:executeQuery()executeQuery()。ExecuteQuery()ExecuteQuery()方法用于产生单个方法用于产生单个结果集的结果集的SQLSQL查询语句。查询语句。例如:例如:String query=”SELECT*FROM teacher”;String query=”SELECT*FROM teacher”;ResultSet rs=stmt.ex
14、ecuteQuery(query);ResultSet rs=stmt.executeQuery(query);第20页,本讲稿共30页3.3.执行执行SQLSQL语句语句 l lexecuteUpdate()executeUpdate()。方方 法法 用用 于于 执执 行行 INSERTINSERT、UPDATEUPDATE语语 句句。executeUpdateexecuteUpdate方方法法的的返返回回值值是是一一个个整整型型值值,表表示示它它执执行的行的SQLSQL语句所影响的数据库中表的行数(更新计数)。语句所影响的数据库中表的行数(更新计数)。例如:例如:String update
15、=”INSERT INTO teacher VALUESString update=”INSERT INTO teacher VALUES(01002,(01002,王芳王芳,女女,28,28,国际商务系国际商务系,国际贸易国际贸易););int count=stmt.executeUpdate(update);int count=stmt.executeUpdate(update);第21页,本讲稿共30页4.4.处理数据库的返回结果处理数据库的返回结果 ResultSetResultSet对对象象用用来来暂暂时时存存放放数数据据库库查查询询操操作作获获得得的的结结果果。它它包包含含了了符符
16、合合 SQL SQL 语语句句中中条条件件的的所所有有行行,并并且且它它提提供供了了一一套套 get get 方方法法对对这这些些行行中中的的数数据据进进行行访访问。问。例如:例如:ResultSet rs=stmt.executeQuery(“SELECT*FROM teacher”);ResultSet rs=stmt.executeQuery(“SELECT*FROM teacher”);String s1=rs.getString(“name”);String s1=rs.getString(“name”);第22页,本讲稿共30页5.5.关闭连接对象关闭连接对象 当当所所有有的的数数
17、据据库库的的存存取取工工作作都都完完成成以以后后,需需要要进进行行关关闭闭数数据据库库连连接接,可可以以释释放放JDBCJDBC和和数数据据库库端端使使用用的的所所有有资资源。源。con.isClosed();con.isClosed();方方法法用用于于判判断断连连接接是是否否已已经经关关闭闭。一一个个已已经经关关闭闭的的连连接接不不能能够够被被关关闭闭,否否则则会会抛抛出出异异常常。con.close();con.close();使使用用此此方方法法关关闭闭还还没没有有关关闭的连接。闭的连接。第23页,本讲稿共30页创建数据库过程w1.建立数据库建立数据库student;建立两个表建立两个
18、表studentlog,studentscore;w2(jdbc-odbc桥桥)建立数据源建立数据源mydata连接连接student 写程序加载驱动写程序加载驱动 返回结果返回结果w3.(驱动驱动)sp4补丁补丁 判断混合模式判断混合模式sa登录是否可用登录是否可用 导入驱动程序导入驱动程序 写程序加载驱动写程序加载驱动 返回结果返回结果第24页,本讲稿共30页查询数据库PreparedStatementwStatement对象在每次执行sql语句时都将语句传给数据库,在多次执行同一个语句时,效率比较低。w可以使用PreparedStatement,使用数据库的预编译功能,速度可以提高很多。
19、wPreparedStatement对象的sql语句可以接受参数,每次执行时可以传递不同的参数。第25页,本讲稿共30页更新中参数的传递w用?来设置参数w需要使用PreparedStatement类wSet(int,value);wInt代表位置,第几个参数;wvalue代表值;第26页,本讲稿共30页查询数据库PreparedStatementw创建 Striing sql=”select*from teacher where age=?”;PreparedStatement ps=conn.PreparedStatement(sql),w执行ps.setInt(1,30);ResultSe
20、t=ps.executeQuery();w关闭ps.close();wPreparedStatement对象的sql语句可以接受参数,每次执行时可以传递不同的参数。第27页,本讲稿共30页检索结果w1.get*(String s):通过列名来检索;wrs.getString(“name”);w2.get(int i):通过列的位置来检索wrs.getString(2);第28页,本讲稿共30页wString sql=“update teacher set major=?Where id=?”;wPs.setString(1,“软件工程教研室”);wFor(int i=0;i10;i+)wPs.setInt(2,i);wPs.executeUpdate();w第29页,本讲稿共30页事物回滚w为了保证数据的一致性,需要用到事物回滚。在处理多个表时,保证sql要么全部执行,要么都不执行。w con.setAutoCommit(false);/更改JDBC事务的默认提交方式 mit();/提交JDBC事务 w如果异常,con.rollback();/回滚JDBC事务 第30页,本讲稿共30页