yorknong 发表于 2018-9-22 13:17:37

Oracle JDBC Drivers (Thin & OCI Drivers)

Oracle8   JDBC   Drivers  Oracle8提供两种JDBCDriver,JDBC   Thin和JDBC   OCI(Oracle   Call   Interface)。JDBCThine是Type4   Driver,JDBC   OCI是Type2   Driver。JDBC   一共有4种类型的Driver:
  Type1:JDBC-ODBC桥,将JDBC调用转换到ODBC调用。
  Type2:使用本地API,将JDBC调用转换到特定的DBMS调用。
   Type3:网络JDBC,将JDBC调用转换成与DBMS无关的网络协议,然后再转换成特定的DBMS协议。   
  Type4:本地JDBC,将JDBC调用直接转换成特定DBMS协议。
  Type1和Type2需要在客户机安装特定的二进制代码,后两种Driver则不需要。因此JDBC   OCIDriver不能用于Applet中,因为它调用C库,是与平台相关的,无法下载到客户机的未知平台浏览器中运行。对于Applet中访问数据库,只能用JDBC   Thine   Driver。
  关于JDBC   OCI   Driver
  由于调用了本地C库,据说(Oracle一向比较能吹,不知道是不是真的@_@)效率很高,建议在Application中使用此种Driver。若要使用OCI   Driver,必须在客户端安装Oracle   Net8才行。连接方法:
  DriverManager.registerDriver(new   oracle.jdbc.driver.OracleDriver());
  DriverManager.getConnection("jdbc:oracle:oci8:@(description=(address=(host=localhost)(protocol=tcp)(port=1521))(connect_data=(sid=orcl)))","bigmouse",   "mouse");
  关于JDBC   Thin   Driver
  由于JDBC   Thin   Driver使用TCP/IP   Sockets连接,因此必须先要启动Oracle   TNS   Listener服务。连接方法:
  DriverManager.registerDriver(new   oracle.jdbc.driver.OracleDriver());
  DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl   ",   "bigmouse",   "mouse");
  关于预取行(Prefetching   Rows)
  一般情况下,JDBC从结果集中一次只读取一行。可以使用OracleStatement.setRowPrefetch()指定特定Statement一次取出的行数,这可以提高JDBC的性能。使用OracleConnection.setDefaultRowPrefetch()可以指定所有Statement一次取出的行数,默认是10行。需要注意的是,Statement只在创建的时候从Connection获得预取行数,如果后来Connection改变了此值,则先前创建的Statement并不会自动跟着改变预取行数值。另外,对于LONG和LONGROW类型,设定预取行的值无效,JDBC每次只会取一行。
  一个例子:
  
  
  关于批量提交(Batching   Updates)
  默认情况下,当PreparedStatement执行executeUpdate()后,就会马上提交SQL语句。可以使用OraclePreparedStatement.setExecuteBatch()来设定批量提交数目,当达到这个数值以前,并不会提交SQL语句,只有达到设定值或者执行OraclePreparedStatment.sendBatch()方法后才会提交这之前的所有语句。注意,LONG和LONG   ROW类型同样不支持批量提交功能。
  一个例子:
  
  
  指定字段类型
  当第一次提交SQL语句时,首先会确定结果集中的字段类型,当JDBC从结果集中取得数据时会进行转换。可以事先指定字段类型,这样可以提高效率。
  一个例子:
  
  
页: [1]
查看完整版本: Oracle JDBC Drivers (Thin & OCI Drivers)