官术网_书友最值得收藏!

JDBC 4.0 Version

The OC4J embedded in JDeveloper 10g does not support JDBC 4.0. When support gets added for JDBC 4.0, JDBC 4.0's features may be added to the JSP web application that we have developed in the previous section. Provision to set client info properties on the Connection object is a new feature in JDBC 4.0. Client info properties may be set using the setClientInfoProperty() method of the Connection object. Set client info properties ApplicationName, ClientUser, and ClientHostname as follows:

connection.setClientInfo("ApplicationName","DataDirectApp");
connection.setClientInfo("ClientUser","DataDirect");
connection.setClientInfo("ClientHostname","DataDirectHost");

If the database supports statement caching, we can set statement pooling to true. To find out whether the database supports statement pooling create a DatabaseMetaData object. Using the supportsStatementPooling() method test if the database supports statement pooling. If the database supports statement pooling check if the Statement is poolable using the isPoolable() method. If the Statement object is poolable, set the Statement object to poolable using the setPoolable() method:

DatabaseMetaData metaData=connection.getMetaData();
if(metaData.supportsStatementPooling())
{
if(stmt.isPoolable())
stmt.setPoolable(true);
}

We may use support for the wrapper pattern with the Wrapper interface, which is extended by the Statement interface. Oracle's extensions to the JDBC API provide an OracleStatement interface that extends the Statement interface. Using the wrapper pattern create an object of type OracleStatement type. First we need to check if the Statement object is a wrapper for the oracle.jdbc.OracleStatement using the isWrapperFor() method. Subsequently create an object of type OracleStatement type using the unwrap() method:

OracleStatement oracleStmt=null;
Class class = Class.forName("oracle.jdbc.OracleStatement");
if(stmt.isWrapperFor(class))
{
oracleStmt = (OracleStatement)stmt.unwrap(class);
}

The OracleStatement object may be used to set column types for different columns to be fetched from the database, using the defineColumnType() method. Also, the number of rows to be prefetched may be set, using the setRowPrefetch() method.

If the database supports ROWID of SQL type, we may add a column for the ROWID value of a row in the result set. A ROWID column value may be retrieved as a java.sql.RowId object using the getRowId() method. Oracle database 10g supports the ROWID data type. Therefore, modify the SELECT query to add a column for the ROWID pseudocolumn.

ResultSet resultSet= oracleStmt.executeQuery("Select ROWID, CATALOGID, JOURNAL, PUBLISHER, EDITION, TITLE, AUTHOR from Catalog");

We also have to add a column of type ROWID to the HTML table created from the result set. A ROWID column value is retrieved from a ResultSet object using the getRowId() method. The RowId object may be converted to a String value using the toString() method:

<%out.println(resultSet.getRowId("ROWID").toString());%>

Enhanced support for chained exceptions in the SQLException interface may be used in the JSP web application. We need to specify an errorPage in the input.jsp for error handling:

<%@ page errorPage="errorpage.jsp" %>

In the errorpage.jsp, the enhanced for-each loop is used to retrieve the chained exceptions and chained causes.

<%@ page isErrorPage="true" %>
<%
for(Throwable e : exception )
{
out.println("Error encountered: " + e);
}
%>

The JDBC 4.0 version of the input.jsp, which may run in JDeveloper when supports get added for JDBC 4.0 in the OC4J server, is listed below:

<%@ page contentType="text/html;charset=windows-1252"%>
<%@ page language="java" import="java.sql.*, javax.naming.*, javax.sql.*,oracle.jdbc.*" %>
<%@ page errorPage="errorpage.jsp" %>
<%
InitialContext initialContext = new InitialContext();
DataSource ds = (DataSource)
initialContext.lookup("java:comp/env/jdbc/OracleDS");
java.sql.Connection connection = ds.getConnection();
connection.setClientInfo("ApplicationName","DataDirectApp");
connection.setClientInfo("ClientUser","DataDirect");
connection.setClientInfo("ClientHostname","DataDirectHost");
Statement stmt=connection.createStatement();
DatabaseMetaData metaData=connection.getMetaData();
if(metaData.supportsStatementPooling())
{
if(stmt.isPoolable())
stmt.setPoolable(true);
}
OracleStatement oracleStmt=null;
Class class = Class.forName("oracle.jdbc.OracleStatement");
if(stmt.isWrapperFor(class))
{
oracleStmt = (OracleStatement)stmt.unwrap(class);
oracleStmt.defineColumnType(1, OracleTypes.VARCHAR);
oracleStmt.defineColumnType(2, OracleTypes.VARCHAR);
oracleStmt.defineColumnType(3, OracleTypes.VARCHAR);
oracleStmt.defineColumnType(4, OracleTypes.VARCHAR);
oracleStmt.defineColumnType(5, OracleTypes.VARCHAR);
oracleStmt.defineColumnType(6, OracleTypes.VARCHAR);
oracleStmt.defineColumnType(7, OracleTypes.VARCHAR);
oracleStmt.setRowPrefetch(2);
}
ResultSet resultSet=oracleStmt.executeQuery("Select ROWID, CATALOGID, JOURNAL, PUBLISHER, EDITION, TITLE, AUTHOR from Catalog");
%>
<table border="1" cellspacing="0">
<tr>
<th>Row Id</th>
<th>Catalog Id</th>
<th>Journal</th>
<th>Publisher</th>
<th>Edition</th>
<th>Title</th>
<th>Author</th>
</tr>
<%
while (resultSet.next())
{
%>
<tr>
<td><%out.println(resultSet.getRowId("ROWID").toString());%></td>
<td><%out.println(resultSet.getString(1));%></td>
<td><%out.println(resultSet.getString(2));%></td>
<td><%out.println(resultSet.getString(3));%></td>
<td><%out.println(resultSet.getString(4));%></td>
<td><%out.println(resultSet.getString(5));%></td>
<td><%out.println(resultSet.getString(6));%></td>
</tr>
<%
}
%>
</table>
<%
resultSet.close();
oracleStmt.close();
if(!connection.isClosed())
connection.close();
%>
主站蜘蛛池模板: 墨玉县| 肇源县| 日照市| 浪卡子县| 岳池县| 银川市| 云南省| 油尖旺区| 安康市| 保亭| 开封县| 新绛县| 富阳市| 凤凰县| 准格尔旗| 岳西县| 绥芬河市| 长葛市| 琼结县| 克山县| 郑州市| 固镇县| 德惠市| 松桃| 城口县| 龙岩市| 孝感市| 乐昌市| 施秉县| 沿河| 通许县| 张家港市| 萨迦县| 通城县| 平罗县| 南雄市| 岐山县| 龙里县| 策勒县| 汝南县| 中阳县|