您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > J2EE中的常用Oracle技术
J2EE中的常用Oracle技术大纲JDBC基础项目中的常用SQL性能考虑常用工具一、JDBC基础JDBC基本概念JDBC的几种类型JDBC的结构JDBC访问Oracle实例JDBC基本概念JDBC(JavaDataBaseConnectivity)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成,是java程序与数据库系统通信的标准API。JDBCAPI使得开发人员可以使用纯java的方式来连接数据库,并执行操作。JDBC的几种类型Type1JDBC-ODBC桥Type2部分java部分本机驱动程序Type3中间数据访问服务器Type4纯java驱动程序Type1JDBC-ODBC桥它是把JDBC操作翻译成对应的ODBC调用优点:是一种常用方式,ODBC被广泛地使用。可以访问所有ODBC可以访问的数据库,如没有提供JDBC驱动的数据库如Access,甚至包括Excel、TXT等扁平文件缺点:执行效率低;这类驱动程序通常依赖本机库,这限制了其可移植性。Type2部分java部分本机驱动程序JDBCType2这类驱动程序部分用Java编程语言编写,部分用本机代码编写。依靠特定于操作系统的库(共享库)来与RDBMS通信。应用程序将装入这种JDBC驱动程序,而驱动程序将使用共享库来与数据库服务器通信。比Type1性能略好。Type3中间数据访问服务器JDBCType3驱动程序将应用程序与中间件服务器连接,中间件服务器将应用程序的JDBC调用映射到适当的数据库驱动程序上。具有最大的灵活性,通常由那些非数据库厂商提供,是四种类型中最小的。WebSphere/WebLogic的驱动池就是属于type3类型。Type4纯java驱动程序Type4驱动程序是纯Java的JDBC驱动程序,它直接连接到数据库服务器。最高的性能,通过自己的本地协议直接与数据库引擎通信,具备在Internet装配的能力。JDBC的结构JDBC程序包JDBCobject,interfacemodelJDBC常用接口JDBC程序包Java.sql(核心API)主要针对基本的数据库编程服务,如生成连接、执行语句以及准备语句和运行批处理查询等。同时还提供了一些高级的处理,比如批处理更新、事务隔离和可滚动结果集等。Javax.sql(扩展API)它主要为数据库方面的高级操作提供了接口和类。如连接管理、分布式事务和行集等。Jdbc网站:常用接口Driver接口DriverManager接口Connection接口Statement接口Result接口Driver接口Driver接口由数据库厂家提供,对于java开发者而言,只需要使用Driver接口就可以了。在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序。不同的数据库有不同的装载方法。Driver接口——装载数据库驱动装载Oracle驱动Class.forName(“oracle.jdbc.driver.OracleDriver”);装载DB2驱动Class.forName(com.ibm.db2.jdbc.app.DB2Driver);装载JDBC-ODBC驱动:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);装载MSSQLServer驱动:Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);装载MySql驱动Class.forName(“org.gjt.mm.mysql.Driver”);装载Informix驱动Class.forName(com.informix.jdbc.IfxDriver);装载Sybase驱动Class.forName(com.sybase.jdbc.SybDriver);装载PostgreSQL驱动Class.forName(org.postgresql.Driver);DriverManager接口DriverManager是JDBC的管理层,作用于用户和驱动程序之间。DriverManager跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接。DriverManager处理驱动程序登录时间限制、跟踪消息的显示等。Connection接口Connection与特定数据库的连接(会话),在连接上下文中执行SQL语句并返回结果。DriverManager的getConnection()方法建立在JDBCURL中定义的数据库Connection连接上:Connectioncon=DriverManager.getConnection(url,login,password);Statement接口用于执行静态SQL语句并返回它所生成结果的对象。一般情况下使用connection.createStatement()方法可以得到Statement实例。三种Statement对象:StatementPreparedStatementCallableStatement。常用的Statement方法:execute():运行语句,返回是否有结果集。executeQuerty():运行查询语句,返回ResultSet结果集。executeUpdate():运行更新操作,返回更新的行数。ResultSet接口Statement执行SQL语句时返回ResultSet结果集。ResultSet提供的检索不同类型字段的常用方法:返回类型方法名称booleannext()bytegetByte(intcolumnIndex)DategetDate(intcolumnIndex)doublegetDouble(intcolumnIndex)floatgetFloat(intcolumnIndex)intgetInt(intcolumnIndex)longgetLong(intcolumnIndex)StringgetString(intcolumnIndex)bytegetByte(StringcolumnName)DategetDate(StringcolumnName)doublegetDouble(StringcolumnName)floatgetFloat(StringcolumnName)intgetInt(StringcolumnName)longgetLong(StringcolumnName)StringgetString(StringcolumnName)JDBC访问Oracle实例Connectionconn=null;Statementstat=null;ResultSetrs=null;try{//注册JDBC的Oracle驱动Class.forName(oracle.jdbc.driver.OracleDriver).newInstance();//利用Thin方式获取Oracle连接conn=DriverManager.getConnection(jdbc:oracle:thin:@22.6.59.38:1521:ora92,clms01,clms01);stat=conn.createStatement();rs=stat.executeQuery(selecttnamefromtab);while(rs.next()){System.out.println(Tablename:+rs.getString(1));}}catch(Exceptione){e.printStackTrace();}finally{if(rs!=null)rs.close();if(stat!=null)stat.close();if(conn!=null)conn.close();}二、项目中的常用SQL连接内连接,外连接(左连接,右连接),自连接递归查询CASE表达式翻页语句WHERE子句的连接顺序SQL技巧连接(一)内连接(自然连接)只有当连接中的列包含满足连接条件的值时,才会返回一行。这就是说,如果某一行的连接条件中的一列是空值,那么这一行就不会返回。外连接即使连接条件中的一列包含空值也会返回一行左外连接:左连接显示左边全部的和右边与左边相同的selecta.studentno,a.studentname,b.classnamefromstudentsa,classesbwherea.classid=b.classid(+);STUDENTNOSTUDENTNAMCLASSNAME--------------------------------------------------1周虎一年级一班2周林一年级二班3钟林达无论这个学生有没有一个能在一个班级中得到匹配的部门号,这个学生的记录都会被显示。连接(二)右外连接:右连接显示右边全部的和左边与右边相同的selecta.studentno,a.studentname,b.classnamefromstudentsa,classesbwherea.classid(+)=b.classid;STUDENTNOSTUDENTNAMCLASSNAME--------------------------------------------------1周虎一年级一班2周林一年级二班一年级三班以上语句是右连接:即(+)所在位置的另一侧为连接的方向,右连接说明等号右侧的所有记录均会被显示,无论其在左侧是否得到匹配。也就是说上例中,无论会不会出现某个班级没有一个学生的情况,这个班级的名字都会在查询结构中出现。自连接连接发生在一张基表内必须使用不同的表别名来标识在查询中每次对表的引用递归查询Oracle的递归查询只能在查询单表时有效select*fromcdeorgstartwithibkcde='40142'connectbypriororgno=suporgno;select*fromcdeorgstartwithibkcde='40142'connectbyorgno=priorsuporgno;CASE表达式CASE表达式可以在SQL中实现if-then-else型的逻辑,而不必使用PL/SQLCASEexpressionWHENexpression1THENresult1WHENexpression2THENresult2ELSEdefaultresultENDCASE的工作方式与DECODE()函数类似DECODE(value,search_value,result,default_value)SELECTCASEWHENproduct_type_id=1THEN‘Book’WHENproduct_type_id=2THEN‘Video’ELSE‘Magazine’FROMproductsSELECTDECODE(product_type_id,1,‘Book’,2,‘Video’,‘Magazine’)FROMproducts翻页语句语句一:SELECTD.*FROM(SELECTROWNUMASTROW,C.*FROM(SELECTa.*,t.inmFROMCUSTOMERaINNER
本文标题:J2EE中的常用Oracle技术
链接地址:https://www.777doc.com/doc-2880237 .html