📄 使用cachedrowset实现数据库的断接.htm
字号:
<BR><BR> rowSet.updateString(2,
"(111) <BR>111-1111"); // initialize phone
<BR><BR> rowSet.insertRow();
// insert the <BR>row
<BR><BR> rowSet.moveToCurrentRow();
// move <BR>back to previous cursor position
<BR><BR><BR><BR> moveToInsertRow()将游标移动到可能包含初始列值的空白行。调用insertRow()将新行插入到游标最近位置的后面。然后,在调用其它导航命令之前调用moveToCurrentRow()重置游标位置。最后,必须为RowSet调用acceptChanges()以更新数据库。将它应用到JSP中可能需要一些修改,大多数记录的entry/edit表单按照下面的步骤插入行:
<BR><BR><BR> <BR>
<LI>在当前游标的位置后面插入一个新的行<BR><BR><BR> <BR>
<LI>将所有字段初始化为空<BR><BR><BR> <BR>
<LI>在表单中显示新插入的行,以便用户进行编辑或保存<BR><BR><BR> 要加入记录插入功能,您的JSP需要监听一个新的请求参数"insert"。下面就是JSP页面的插入操作代码:
<BR><BR><BR> } else if (
req.getParameter("insert") != <BR>null) {
<BR><BR> Contacts.moveToInsertRow();
<BR><BR> Contacts.updateString(1,
"");
<BR><BR><BR> Contacts.updateString(2,
"");
<BR><BR><BR> Contacts.insertRow();
<BR><BR> Contacts.moveToCurrentRow();
<BR><BR> Contacts.next();
<BR><BR> }
<BR><BR><BR><BR><B>CachedRowSet
的其它用途</B><BR><BR> <BR><BR> 对缓冲ResultSet扩展的需求远远不只限制在JSP的开发中,CachedRowSet适合于需要将表格数据进行串行化并发送到客户端的任何一种情况,如移动计算设备。虽然用户可能周期地断开网络数据源,但它们仍然有填加和维护数据的需求。可以使用CachedRowSet作为从EJB会话bean中存取/更新数据的一种方法。<BR><BR> 记住,CachedRowSet完全在存储器中存储,如果应用程序需要对非常大的数据集进行操作,CachedRowSet显然不是最佳选择。<BR><BR> 清单4显示了以CachedRowSet为数据模型的一个完整的JSP
entry/edit页面代码。为清晰起见,我在JSP页面中加入了数据模型初始化代码,这些代码在useBean标签中体现。
<BR>在更大型的工程应用中,我建议遵从MVC
(Model-View-Controller)准则,将数据模型初始化代码放在一个servlet控制器中。<BR><BR><BR><BR><B>清单4:JSP示例update/entry表单</B><BR><BR><BR><BR><%@
page import="sun.jdbc.rowset.CachedRowSet" %>
<BR><BR><BR><HTML> <BR><BR><HEAD>
<BR><BR><jsp:useBean id="Contacts"
class="sun.jdbc.rowset.CachedRowSet"
<BR>scope="session"> <BR><BR><%
<BR><BR> Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
<BR><BR><BR> // initialize our
CachedRowSet bean
<BR><BR> Contacts.setUsername("user");
<BR><BR> Contacts.setPassword("password");
<BR><BR> Contacts.setUrl("jdbc:odbc:mydsn");
<BR><BR> // some drivers require this
<BR><BR> Contacts.setTableName("Contacts");
<BR><BR> Contacts.setCommand("SELECT
name, telephone from <BR>Contacts");
<BR><BR> Contacts.execute();
<BR><BR> Contacts.first();
<BR><BR>%> <BR><BR></jsp:useBean>
<BR><BR><BR><BR><% <BR><BR> // get
the servlet request object
<BR><BR> javax.servlet.ServletRequest
req = pageContext.getRequest();
<BR><BR><BR><BR><BR> // process updates
<BR><BR> boolean updateRow = false;
<BR><BR> String contactName =
Contacts.getString(1); <BR><BR> String
newValue = req.getParameter("ContactName");
<BR><BR><BR> if (( newValue != null)
&& (!newValue.equals( <BR>contactName )))
{
<BR><BR> Contacts.updateString(
1,req.getParameter("ContactName"));
<BR><BR><BR> updateRow =
true; <BR><BR> }
<BR><BR> String contactPhone =
Contacts.getString(2);
<BR><BR> newValue =
req.getParameter("ContactPhone");
<BR><BR><BR> if (( newValue != null)
&& (!newValue.equals(contactPhone))) <BR>{
<BR><BR> Contacts.updateString(
2,req.getParameter("ContactPhone"));
<BR><BR><BR> updateRow =
true; <BR><BR> } <BR><BR> if
(updateRow) Contacts.updateRow();
<BR><BR><BR><BR> // process navigation
commands <BR><BR> if (
req.getParameter("next") != null ) {
<BR><BR><BR> if (!
Contacts.next() ) Contacts.last();
<BR><BR><BR> } else if (
req.getParameter("prev") != null) <BR>{
<BR><BR> if (!
Contacts.previous()) Contacts.first();
<BR><BR><BR> } else if (
req.getParameter("save") != null) <BR>{
<BR><BR> Contacts.acceptChanges();
<BR><BR> } else if (
req.getParameter("insert") != <BR>null) {
<BR><BR> Contacts.moveToInsertRow();
<BR><BR> Contacts.updateString(1,
"");
<BR><BR><BR> Contacts.updateString(2,
"");
<BR><BR><BR> Contacts.insertRow();
<BR><BR> Contacts.moveToCurrentRow();
<BR><BR> Contacts.next();
<BR><BR> } else if (
req.getParameter("delete") != <BR>null) {
<BR><BR> Contacts.deleteRow();
<BR><BR> if
(!Contacts.next()) Contacts.last();
<BR><BR> } <BR><BR>%>
<BR><BR><STYLE> <BR><BR> BODY {
font-style: verdana } <BR><BR></STYLE>
<BR><BR><TITLE> <BR><BR>CachedRowSetExample
<BR><BR></TITLE> <BR><BR></HEAD>
<BR><BR><BODY BGCOLOR='lightgrey'>
<BR><BR><H2>Contacts</H2>
<BR><BR><FORM> <BR><BR><TABLE
BORDER='0'>
<BR><BR><TR><TD>Name:</TD><TD>Telephone
number:</TD></TR>
<BR><BR><BR><TR> <BR><BR><TD><INPUT
TYPE='text'
<BR><BR> NAME="ContactName"
<BR><BR><BR> VALUE='<%=Contacts.getString(1)%>'
<BR>/></TD> <BR><BR><TD><INPUT
TYPE="text"
<BR><BR> NAME="ContactPhone"
<BR><BR><BR> VALUE='<%=Contacts.getString(2)%>'
<BR>/></TD> <BR><BR></TABLE>
<BR><BR><INPUT TYPE="submit" NAME="prev"
VALUE=" <BR>< "/> <BR><BR><INPUT
TYPE="submit" NAME="next" VALUE=" <BR>> "/>
<BR><BR><INPUT TYPE="submit" NAME="insert"
VALUE="Insert"/> <BR><BR><BR><INPUT
TYPE="submit" NAME="delete" VALUE="Delete"/>
<BR><BR><BR><INPUT TYPE="submit" NAME="save"
VALUE="Save"/> <BR><BR><BR>Record
<%=Contacts.getRow()%> of
<%=Contacts.size()%>
<BR><BR><BR></FORM> <BR><BR></BODY>
<BR><BR></HTML>
<BR><BR><BR><BR><BR><BR>下面的图片显示的是上面的JSP代码在浏览器中的显示结果。<BR><BR>
<CENTER><BR><IMG
src=""><BR></CENTER><BR><BR><BR><BR><BR> 清单4中的JSP在浏览器中的显式
<BR><BR><BR> <BR><BR><B>结论</B><BR><BR><BR><BR> JSP应用要求一个数据缓冲中间层以改善连接资源的共享。由于对大部分的中小规模应用来说,EJB显得太大材小用了。CachedRowSet通过提供一种不捆绑数据库连接就可以实现对JDBC数据实现统一访问的方法填补了期间的空白。CachedRowSet还在典型的entry/edit
<BR>JSP应用中简化了数据访问代码。上面的示例页面仅仅需要一个SQL语句就可以在数据库上实现更新、插入和删除。更重要的是,CachedRowSet对原始数据源进行任意的断接和重连。<BR><BR> <BR><BR>出处:www.javaworld.com
</LI></TD>
<TD vAlign=top width="14%">
<DIV align=right><FONT
color=gray> </FONT></DIV>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-1552958637257019";
google_ad_width = 160;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -