您好,欢迎访问三七文档
本章教学教学目标:4.1JDBC简介4.2JDBC编程教学重点:JDBC的开发步骤教学难点:JDBC编程4.1JDBC简介JDBC(JavaDatabaseConnectivity)1996年,sun公司提出。是Java程序与数据库系统通信的标准API。它由一组用Java程序语言编写的类和接口组成。作用规避数据库的不同,为程序开发人员访问数据库提供统一的编程接口,即为API;JDBC可以做什么?答:和数据库建立连接,发送sql语句,处理数据库返回的结果集,4.1JDBC简介JDBC通过提供一个抽象的数据库接口,使得程序开发人员在编程时可以不用绑定在特定数据库厂商的API上,大大增加了应用程序的可移植性。4.1JDBC简介JDBC接口层JDBC驱动层J2EE应用JDBCAPI数据库JDBC驱动程序数据库程序员开发Sun数据库厂商应用层JDBC将应用程序与具体的数据库产品隔离,大大简化应用程序开发过程,提高可移植性。4.1.1ODBCODBC:OpenDatabaseDonnectivity由microsoft提出,基于C语言的;ODBC应用程序ODBC应用程序ODBCAPI函数ODBC驱动程序管理器ODBC驱动程序1ODBC驱动程序n…数据源1数据源nODBC的体系结构4.1.2JDBC驱动程序1、JDBC-ODBC桥JDBC-ODBC桥把JDBC操作翻译成对应的ODBC调用。在JDBC刚产生时,JDBC-ODBC桥是非常有用的。通过它,开发者都可以使用JDBC来访问一个ODBC数据源。缺点:执行效率比较低;它需要在客户机上安装一个ODBC驱动,使用这一类驱动,就失去JDBC平台无关的好处;此外,ODBC驱动器需要客户端的管理。4.1.3JDBCAPIJDBCAPI为Java应用程序开发者使用数据库提供了统一的编程接口,它由一组Java类和接口组成:java.sql包和javax.sql包java.sql包含的类和接口主要对基本的数据库编程服务,如生成连接、执行语句、以及准备语句和运行批处理查询等。也有一些高级的处理,如批处理更新、事务隔离和可滚动结果集。在企业级java应用中进行的数据库操作远远不止数据库的连接并执行语句,还需要考虑其它方面的要求,包括使用连接池来优化资源的使用,实现分布式事务处理。javax.sql为连接管理、分布式事务和有的提供了更好的抽象,引入了容器管理的连接池、分布式事务和行集(RowSet)4.1.3JDBCAPI所有的数据库JDBC驱动程序都应实现的重要接口是:java.sql.DriverManager—处理驱动程序的调入并且对驱动程序进行管理。java.sql.Connection—代表对特定数据库的连接。java.sql.Statement—代表一个特定的容器,用以对一个特定的数据库执行SQL语句。java.sql.ResultSet—控制对一个特定语句的行数据的存取。4.1.4JDBC主要对象1.连接(Connection)2.语句(Statement)3.结果集(ResultSet)4.1.4JDBC主要对象1.连接(Connection)连接是客户端Java代码和数据库之间的通信连接,由JDBC驱动程序建立。它保存了所有对数据库服务器调用的上下文信息。4.1.4JDBC主要对象2.语句用于对数据库发送数据操纵命令,通过语句对象,可以完成获取结果集,对数据库记录进行CRUD。4.2JDBC编程创建数据库连接,分为以下几步:1.装载并注册数据库的JDBC驱动程序2.建立连接3.建立Statement对象4.准备并执行调用SQL语句5.处理ResultSet中的记录集6.释放资源4.2JDBC编程/*装载驱动――获取连接――创建语句对象*/Class.forName(driver);con=DriverManager.getConnection(url,user,pass);stmt=con.createStatement();/*准备并执行调用SQL语句*/sqlstr=insertinto+tableName+values('000099995','中国',45);stmt.executeUpdate(sqlstr);sqlstr=select*from+tableName;rs=stmt.executeQuery(sqlstr);4.2JDBC编程/*处理ResultSet中的记录集*/ResultSetMetaDatarsmd=rs.getMetaData();//获取元数据intj=0;j=rsmd.getColumnCount();//获得结果集的行数for(intk=0;kj;k++){System.out.print(rsmd.getColumnName(k+1));//显示表中字段属性System.out.print(\t);}System.out.print(\n);while(rs.next())//显示结果集的内容{for(inti=0;ij;i++){System.out.print(rs.getString(i+1));System.out.print(\t);}System.out.print(\n);}4.2JDBC编程/*异常处理*/catch(ClassNotFoundExceptione1){System.out.println(数据库驱动不存在!);System.out.println(e1.toString());}catch(SQLExceptione2){System.out.println(数据库异常!);System.out.println(e2.toString());}4.2JDBC编程/*关闭连接*/finally{try{/*关闭对象*/if(rs!=null)rs.close();if(stmt!=null)stmt.close();if(con!=null)con.close();}catch(SQLExceptione){System.out.println(e.toString());}}4.2.1注册驱动注册驱动a.通过类装载器:Class.forName(“com.mysql.jdbc.Driver”);b.直接实例化驱动:java.sql.DriverManager.registerDriver(newcom.mysql.jdbc.Driver());c.通过jdbc.drivers属性System.setProperty(“jdbc.drivers”,”com.microsoft.sqlserver.jdbc.SQLServerDriver”);4.2.2建立连接建立连接通过DriverManager:Connectioncon=DriverManager.getConnection(url,user,password);url表示连接数据库的JDBCURL,一般形式为jdbc:drivertype:driversubtype://parameterjdbc—指出要使用JDBCdrivertype—驱动程序的类型,该部分也叫subprotocaldriversubtype—可选的参数parameter—通常用来设置数据库服务器的IP地址、端口号和数据库的名称。4.2.2建立连接常用的URL对MySQL,数据库URL为jdbc:mysql://localhost:3306/dbName对Oracle数据库,数据库URL为jdbc:oracle:thin:@localhost:1521:dbname对SQLSERVER2000,数据库URL为jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dbName如果通过JDBC-ODBCDriver连接数据库,数据库URL为:jdbc:odbc:datasource4.2.3准备并执行SQL语句建立Statement对象Statementstatement=con.createStatement();准备并执行调用SQL语句Stringsql=“select*fromEmployees”;ResultSetrs=statement.executeQuery(sql);执行语句的种类statement.executeQuery();返回类型ResultSetstatement.executeUpdate();返回类型int,执行此sql语句所影响的记录数。statement.execute();返回类型boolean,代表执行此语句是否有resultset,返回ture就是有。4.2.4处理记录集处理ResultSet中的记录集只有select语句才会有结果集返回;rs是一个游标,初始时在第一条记录的上面一行。每next一次,向下一行;此外,还有beforeFirst()和last()。getString,获取记录的数据。可以使用位置标识,也可以使用列名来标识(当结果集字段比较多的时候用列名标识法,可以增强程序的可读性)。结果集的方法还有很多,请参考JDK的帮助文档Stringsql=“select*fromEmployees”;ResultSetrs=statement.executeQuery(sql);while(rs.next()){Stringcol1=rs.getString(1);Stringcol2=rs.getString(fname);floatcol3=rs.getFloat(3);}4.2.4处理记录集获取元数据ResultSetMetaDatarsmd=rs.getMetaData();intcolumncount=rsmd.getColumnCount();for(inti=1;i=columncount;i++){out.println(rsmd.getColumnName);out.println(rsmd.getColumnTypeName)}4.2.5释放资源5.释放资源一般写在finally语句块中。所释放的资源一般有ResultSet,Statement,Connectionrs.close();stmt.close();con.close();注意:关闭时按ResultSet-Statement-Connection顺序依次关闭;关闭时要判断对象是否为空,否则当关闭一个空对象时,会有异常。例如:if(rs!=null)rs.close();4.2JDBC编程7、异常处理和警告在数据库操作的过程中必须要有异常处理过程。装载驱动时,处理的异常类ClassNotFoundException,其他要处理的异常类是SQLExceptiontry{Class.forName(driver);…}catch(ClassNotFoundExceptione1){…//异常处理语句}catch(SQLExceptione2){…//异常处理语句}小结1.JDBC的四种驱动类型和三种连接对象2.创建数据库连接的步骤装载并注册数据库的JDBC驱动程序建立连接建立Statement对象,准备调用SQL语句准备并执行调用SQL语句处理ResultSet中的记录集释放资源
本文标题:JDBC详细讲解
链接地址:https://www.777doc.com/doc-4897367 .html