您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > Java Jdbc技术详解
第13章JDBC技术目录Jdbc技术概述通过JDBC技术与数据库建立连接了解数据库的信息查询数据库检索结果集更新数据库参数的输入和输出JDBC是Java程序连接和存取数据库的应用程序接口(API),此接口是Java核心API的一部分。JDBC向应用程序开发者提供了独立于数据库的统一的API。JDBC是由一组驱动程序实现的Java接口,驱动程序负责从标准JDBC调用向支持的数据库所需要的具体调用转变。除了向开发者提供统一的独立于DBMS之外的框架,JDBC还提供了让开发者保持数据库厂家提供的特定功能的办法。JDBC概述将Java语言和Sql结合的一个很好的编程接口。通用的一般的SQL数据库访问和存储结构。支持基本SQL功能的一个通用低层的应用程序编程接口,在不同的数据库功能模块上提供了一个统一的用户界面。ODBC一样,建立在X/OpenSQLCLI基础之上。是为Java语言定义的一个SQL调用级(CLI)界面。JDBC的特点1.在SQL水平上的API为Java语言定义的一个sql调用级界面,其中心在于执行基本的SQL声明和取回结果。在此基础上可以定义更高层次的API2.与SQL的一致性JDBC允许使用从属于DBMS的系统的任何查询语句,一个应用程序可以尽可能的使用SQL功能。用户至少使用ANSISQL92entrylevel标准3.可在现有的数据库接口之上实现比如可以在ODBC之上实现JDBC的特点4.提供与其他Java系统一致的java界面5.简单易行,最大可能简单化6.使用健壮、静态的通用数据类型。7.使一般情形简单化8.多种方法、多种功能//装载驱动程序Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);//数据库的URLurl=jdbc:odbc:contact;//获取数据库连接conn=DriverManager.getConnection(url);//显示数据库的信息showDBMD(conn);System.out.println(---------------------------);//创建SQL声明stmt=conn.createStatement();sql=select公司编号,公司名称,地址,城市,邮政编码,国家from公司;//执行查询返回结果集rs=stmt.executeQuery(sql);//显示结果集的信息showRSMD(rs);System.out.println(---------------------------);System.out.println(公司编号,公司名称,地址,城市,邮政编码,国家);while(rs.next()){System.out.print(rs.getString(1)+);System.out.print(rs.getString(2)+);System.out.print(rs.getString(3)+);System.out.print(rs.getString(4)+);System.out.print(rs.getString(5)+);System.out.print(rs.getString(6)+);System.out.println();}Jdbc的结构Jdbc有两种接口,分别是面向开发人员的JDBCAPI和面向低层的JDBCDriverAPI,Java应用程序JDBCAPIJDBCManagerJDBCDrvierAPIJDBC-NetDriverJDBC-ODBCBridgeDriverODBCandDBDriverDriverADriverBPulblishedprotocolProprietaryDatabaseaccessprotocol。。。JDBC的结构JDBCAPI是一系列的接口,他使得应用程序能够进行数据库联接,执行SQL语句,并且得到返回结果。JDBC的结构Java.sql.DriverManager用来装载驱动程序,并且为创建新的数据库联接提供支持。Java.sql.Connection完成对某一指定数据库的联接Java.sql.Statement在一个给定的连接中作为SQL执行声明的容器,他包含了两个重要的子类型。Java.sql.PreparedSatement用于执行预编译的sql声明Java.sql.CallableStatement用于执行数据库中存储过程的调用Java.sql.ResultSet对于给定声明取得结果的途径JDBCDriverinterface是面向驱动程序开发商的接口,每一个驱动程序都必须提供对于java.sql.Connection,java.sql.Statement,java.sql.PreparedStatement,java.sql.ResultSet等主要接口的实现方法。Java.sql.DriverManager需要装载驱动程序时,每个驱动程序需要提供一个能实现java.sql.Driver接口的类。例如:sun.jdbc.odbc.JdbcOdbcDrivercom.microsoft.jdbc.sqlserver.SQLServerDriverJDBC驱动程序的类型(重要)1.Jdbc-odbc桥2.Native-apipartly–javadriver本地java驱动程序,将jdbc调用转换为对数据库客户端API的调用3.Net-protocolall-javaDriver(Jdbcproxy)将jdbc调用转换为独立于特定数据库的网络协议,完全java驱动程序4.Native-protocolall-javadriver将JDBC调用转换为特定数据库的网络协议,完全Java驱动程序数据库应用模型Jbbc各接口之间的关系事务事务由一个或多个这样的语句组成:这些语句已被执行、完成并被提交或还原。当调用方法commit或rollback时,当前事务即告就结束,另一个事务随即开始。缺省情况下,新连接将处于自动提交模式。也就是说,当执行完语句后,将自动对那个语句调用commit方法。这种情况下,由于每个语句都是被单独提交的,因此一个事务只由一个语句组成。如果禁用自动提交模式,事务将要等到commit或rollback方法被显式调用时才结束,因此它将包括上一次调用commit或rollback方法以来所有执行过的语句。对于第二种情况,事务中的所有语句将作为组来提交或还原。方法commit使SQL语句对数据库所做的任何更改成为永久性的,它还将释放事务持有的全部锁。而方法rollback将弃去那些更改。有时用户在另一个更改生效前不想让此更改生效。这可通过禁用自动提交并将两个更新组合在一个事务中来达到。如果两个更新都是成功的,则调用commit方法,从而使两个更新结果成为永久性的;如果其中之一或两个更新都失败了,则调用rollback方法,以将值恢复为进行更新之前的值。大多数JDBC驱动程序都支持事务。事实上,符合JDBC的驱动程序必须支持事务。DatabaseMetaData给出的信息描述DBMS所提供的事务支持水平。事务隔离级别如果DBMS支持事务处理,它必须有某种途径来管理两个事务同时对一个数据库进行操作时可能发生的冲突。用户可指定事务隔离级别,以指明DBMS应该花多大精力来解决潜在冲突。例如,当事务更改了某个值而第二个事务却在该更改被提交或还原前读取该值时该怎么办?假设第一个事务被还原后,第二个事务所读取的更改值将是无效的,那么是否可允许这种冲突?JDBC用户可用以下代码来指示DBMS允许在值被提交前读取该值(“dirty读取”),其中con是当前连接:con.setTransactionIsolation(TRANSACTION_READ_UNCOMMITTED);事务隔离级别越高,为避免冲突所花的精力也就越多。Connection接口定义了五级,其中最低级别指定了根本就不支持事务,而最高级别则指定当事务在对某个数据库进行操作时,任何其它事务不得对那个事务正在读取的数据进行任何更改。通常,隔离级别越高,应用程序执行的速度也就越慢(由于用于锁定的资源耗费增加了,而用户间的并发操作减少了)。在决定采用什么隔离级别时,开发人员必须在性能需求和数据一致性需求之间进行权衡。当然,实际所能支持的级别取决于所涉及的DBMS的功能。当创建Connection对象时,其事务隔离级别取决于驱动程序,但通常是所涉及的数据库的缺省值。用户可通过调用setIsolationLevel方法来更改事务隔离级别。新的级别将在该连接过程的剩余时间内生效。要想只改变一个事务的事务隔离级别,必须在该事务开始前进行设置,并在该事务结束后进行复位。我们不提倡在事务的中途对事务隔离级别进行更改,因为这将立即触发commit方法的调用,使在此之前所作的任何更改变成永久性的。通过JDBC访问数据库1.建立连接所有Jdbc程序的第一步都是与数据库建立连接,用户得到一个java.sql.Connection的对象加载驱动程序,1.通过设置Java属性中的sql.driver来制定驱动程序列表。这个属性是一系列的用冒号隔开的Driver类的名称,按照顺序搜索驱动程序,使用第一个能成功和给定URL相连的驱动程序。2.使用Class.forName()显式加载驱动程序。例如Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);加载了sun公司提供的jdbc-odbc桥驱动程序,由驱动程序负责向DriverManager登记,在数据库连接时,DriverManager将试图使用此驱动程序。Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);加载SqlServer的驱动程序与数据库的连接2.建立连接指定数据库连接的url,数据源的位置使用DriverManager.getConnection(url);例如:Stringurl=“jdbc:odbc:datasource”;或者:“jdbc:microsoft:sqlserver://server_name:1433”Connectionconn=DriverManager.getConnection(url);或者:Connectionconn=DriverManager.getConnection(Stringurl,Stringuser,Stringpassword)了解数据库中的信息在和数据库建立连接后,就可以获得有关数据源的各种信息:表,列,数据类型,存储过程等。这些信息通过DatabaseMetaData类的对象上实现的。DatabaseMetaDatadbma=conn.getMetaData();其中提供了很多方法获取数据源的各个方面的信息,这些方法中,有一些用字符串匹配搜索模式作为参数,“_”匹配单个字符,“%”匹配0个或多个字符.一个值为null的JavaString可以与任何字符串匹配.对某些方法,有些驱动程序可能不支持,会产生一个SQLException意外.了解数据库中的信息基本信息getURL();getUserName()isReadOnly()getDatabaseProduceName()j;getDriverName();getDriverVersion();其他getTables(),getColumns(),getIndexInfo();查询数据库(Statement)1.创建Statement用户执行sql语句,Statementstmt=conn.createStatement();2.执行查询语句Stringsql=“select*fromcustomer”ResultSetrs=stmt.executeQuery(sql);executeQuery()
本文标题:Java Jdbc技术详解
链接地址:https://www.777doc.com/doc-5034900 .html