Oracle8JDBCDrivers

来源:互联网 发布:手机淘宝首页展示位置 编辑:程序博客网 时间:2024/06/06 02:48
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

  Oracle8JDBCDrivers

  Oracle8提供两种JDBCDriver,JDBCThin和JDBCOCI(OracleCallInterface)。JDBCThine是Type4Driver,JDBCOCI是Type2Driver。JDBC一共有4种类型的Driver:

  Type1:JDBC-ODBC桥,将JDBC调用转换到ODBC调用。

  Type2:使用本地API,将JDBC调用转换到特定的DBMS调用。

  Type3:网络JDBC,将JDBC调用转换成与DBMS无关的网络协议,然后再转换成特定的DBMS协议。

  Type4:本地JDBC,将JDBC调用直接转换成特定DBMS协议。

  Type1和Type2需要在客户机安装特定的二进制代码,后两种Driver则不需要。因此JDBCOCIDriver不能用于Applet中,因为它调用C库,是与平台相关的,无法下载到客户机的未知平台浏览器中运行。对于Applet中访问数据库,只能用JDBCThineDriver。

  关于JDBCOCIDriver

  由于调用了本地C库,据说(Oracle一向比较能吹,不知道是不是真的@_@)效率很高,建议在Application中使用此种Driver。若要使用OCIDriver,必须在客户端安装OracleNet8才行。连接方法:

  DriverManager.registerDriver(newOracle.jdbc.driver.OracleDriver());

  DriverManager.getConnection("jdbc:Oracle:oci8:@(description=(address=(host=localhost)(protocol=tcp)(port=1521))(connect_data=(sid=orcl)))","bigmouse","mouse");

  关于JDBCThinDriver

  由于JDBCThinDriver使用TCP/IPSockets连接,因此必须先要启动OracleTNSListener服务。连接方法:

  DriverManager.registerDriver(newOracle.jdbc.driver.OracleDriver());

  DriverManager.getConnection("jdbc:Oracle:thin:@localhost:1521:orcl","bigmouse","mouse");

  关于预取行(PrefetchingRows)

  一般情况下,JDBC从结果集中一次只读取一行。可以使用OracleStatement.setRowPrefetch()指定特定Statement一次取出的行数,这可以提高JDBC的性能。使用OracleConnection.setDefaultRowPrefetch()可以指定所有Statement一次取出的行数,默认是10行。需要注意的是,Statement只在创建的时候从Connection获得预取行数,如果后来Connection改变了此值,则先前创建的Statement并不会自动跟着改变预取行数值。另外,对于LONG和LONGROW类型,设定预取行的值无效,JDBC每次只会取一行。

  一个例子:

  <%@page

  import="java.sql.*,

  Oracle.jdbc.driver.*"

  %>

  <%

  try

  {

  //注册驱动

  DriverManager.registerDriver(newOracle.jdbc.driver.OracleDriver());

  //使用Thin类型连接到数据库,返回Connnection对象,并转换成OracleConnection对象。

  OracleConnectionconn=(OracleConnection)DriverManager.getConnection("jdbc:Oracle:thin:@localhost:1521:orcl","bigmouse","mmouse");

  //设定所有Statemnt预取5行

  conn.setDefaultRowPrefetch(5);

  //创建Statement对象,并从Connection获得默认预取行值5。

  OracleStatementstmt=(OracleStatement)conn.createStatement();

  //显示默认预取行值和刚创建的Statement的预取值

  //Default=5;Current=5

  out.println("Default="+conn.getDefaultRowPrefetch()+";Current="+stmt.getRowPrefetch());

  out.println("

");

  //获得结果集

  ResultSetrs=stmt.executeQuery("SELECTtopicFROMmy_article");

  while(rs.next())

  {

  out.println(rs.getString(1));

  out.println("
");

  }

  //设定Statement的预取行,覆盖默认设置

  stmt.setRowPrefetch(3);

  //显示默认预取行值和刚创建的Statement的预取值

  //Default=5;Current=3

  out.println("Default="+conn.getDefaultRowPrefetch()+";Current="+stmt.getRowPrefetch());

  out.println("

");

  //获得结果集

  rs=stmt.executeQuery("SELECTtopicFROMmy_article");

  while(rs.next())

  {

  out.println(rs.getString(1));

  out.println("
");

  }

  rs.close();

  stmt.close();

  conn.close();

  }

  catch(Exceptione)

  {

  out.println(e.getMessage());

  }

  %>

  关于批量提交(BatchingUpdates)

  默认情况下,当PreparedStatement执行executeUpdate()后,就会马上提交SQL语句。可以使用OraclePreparedStatement.setExecuteBatch()来设定批量提交数目,当达到这个数值以前,并不会提交SQL语句,只有达到设定值或者执行OraclePreparedStatment.sendBatch()方法后才会提交这之前的所有语句。注意,LONG和LONGROW类型同样不支持批量提交功能。

  一个例子:

  <%@page

  import="java.sql.*,

  Oracle.jdbc.driver.*"

  %>

  <%

  try

  {

  //注册驱动

  DriverManager.registerDriver(newOracle.jdbc.driver.OracleDriver());

  //使用Thin类型连接到数据库,返回Connnection对象。

  Connectionconn=DriverManager.getConnection("jdbc:Oracle:thin:@localhost:1521:orcl","bigmouse","mmouse");

  //SQL语句

  //id,topic,content,post_date,cat_name

  StringstrSql="INSERTINTOmy_articleVALUES(bigmouse_seq.nextval,?,?,sysdate,'jsp')";

  //创建PreparedStatement对象

  PreparedStatementpstmt=conn.prepareStatement(strSql);

  //设定批量提交值

  ((OraclePreparedStatement)pstmt).setExecuteBatch(3);

  //显示批量提交值

  //Size=3

  out.println("Size="+((OraclePreparedStatement)pstmt).getExecuteBatch());

  out.println("

");

  pstmt.setString(1,"topic1");

  pstmt.setString(2,"content1");

  //下面这条语句不会提交,因为未到批量提交设定值。

  pstmt.executeUpdate();

  pstmt.setString(1,"topic2");

  pstmt.setString(2,"content2");

  //下面这条语句不会提交,因为未到批量提交设定值。

  pstmt.executeUpdate();

  pstmt.setString(1,"topic3");

  pstmt.setString(2,"content3");

  //下面这条语句会提交

  pstmt.executeUpdate();

  pstmt.setString(1,"topic4");

  pstmt.setString(2,"content4");

  //下面这条语句不会提交,因为未到批量提交设定值。

  pstmt.executeUpdate();

  //主动提交

  ((OraclePreparedStatement)pstmt).sendBatch();

  pstmt.close();

  conn.close();

  }

  catch(Exceptione)

  {

  out.println(e.getMessage());

  }

  %>

  指定字段类型

  当第一次提交SQL语句时,首先会确定结果集中的字段类型,当JDBC从结果集中取得数据时会进行转换。可以事先指定字段类型,这样可以提高效率。

  一个例子:

  <%@page

  import="java.sql.*,

  Oracle.jdbc.driver.*"

  %>

  <%

  try

  {

  //注册驱动

  DriverManager.registerDriver(newOracle.jdbc.driver.OracleDriver());

  //使用Thin类型连接到数据库,返回Connnection对象。

  Connectionconn=DriverManager.getConnection("jdbc:Oracle:thin:@localhost:1521:orcl","bigmouse","mmouse");

  Statementstmt=conn.createStatement();

  //先清除以前的定义

  ((OracleStatement)stmt).clearDefines();

  //将NUMBER类型转成String类型

  ((OracleStatement)stmt).defineColumnType(1,Types.VARCHAR);

  //获得结果集

  ResultSetrs=stmt.executeQuery("SELECTidFROMmy_article");

  while(rs.next())

  {

  out.println(rs.getString(1));

  out.println("
");

  }

  rs.close();

  stmt.close();

  conn.close();

  }

  catch(Exceptione)

  {

  out.println(e.getMessage());

  }

  %>

<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击