无效的 ROWID

happydaisy1985 2008-09-16 10:15:04
departinfo_query.jsp页面用来浏览部门信息,我想在departinfo_modify页面上来修改部门信息departinfo_browse.jsp查看更详细的信息,通过rowid来查询修改记录,但一直出现无效的rowid错误。各位高手清帮帮忙!
departinfo_query.jsp部分代码:
<%String sql;

sql="SELECT rowid,dwdm,dwmc FROM departinfo";
TableModel tableModel= browseSession.getTableModelForSQL(sql);
int rowCount=tableModel.getRowCount();//显示在表中的行数
%>

<%for(int row=0;row<rowCount;row++){ %>
<tr height="27">
<td><div align="center"><a href="../admin/departinfo_browse.jsp?ROWID=<%=tableModel.getValueAt(row,0)%>"><%=NullToSpace.getNullcheck(tableModel.getValueAt(row,1))%></a>  </div></td>
<td > <div align="center"><a href="../admin/departinfo_modify.jsp?ROWID=<%=tableModel.getValueAt(row,0)%>"><%=NullToSpace.getNullcheck(tableModel.getValueAt(row,2))%></a> </div></td>
</tr>
<%}%>
departinfo_modify部分代码:
<%String sql;
Connection conn=((DatabaseDataSource)browseSession.getDataSource()).getConnection() ;
Statement st=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY) ;
sql="SELECT rowid,dwdm,dwmc,intro FROM departinfo where rowid='"+request.getParameter("ROWID")+"'";
ResultSet rs=st.executeQuery(sql) ;
ResultSetMetaData metaData = rs.getMetaData();
rs.next();
%>
<div align="center">
<h3>单位站点信息修改</h3>
<form name="AddNews" method="POST" action="departinfo_save.jsp" onSubmit="return CheckNews();">
<table width=600 border="4" cellspacing="0" bordercolorlight="#669999" bordercolordark="#FFFFFF" class="TD">
<tr class="chinese">
<td width="130" height="25" align="right" bgcolor="#BDD7D9">单位代码 :</td>
<td height="25" colspan="2"><input name="dwdm" type="text" class="chinese" id="dwdm" size="40" maxlength="20" value="<%=rs.getString("dwdm")%>" onBlur="isNull(this);"></td>
</tr>
<tr class="chinese">
<td width="130" height="25" align="right" bgcolor="#BDD7D9">单位名称 :</td>
<td height="25" colspan="2"><input name="dwmc" type="text" class="chinese" id="dwmc" size="40" maxlength="60" value="<%=rs.getString("dwmc")%>" onBlur="isNull(this);"></td>
</tr>
<tr class="chinese">
<td height="25" align="center" colspan="3" bgcolor="#BDD7D9">站点信息</td>
</tr>
<tr>
<td height="25" colspan="3"><div align="center">
<textarea name="intro" class="chinese" style="display:none"><%=rs.getString(4)%></textarea>
<iframe ID="DreamEditor" src="../eWebEditor.jsp?id=intro&style=CoolBlue" frameborder="0" scrolling="no" width="620" height="350"></iframe>
</div></td>
</tr>
<tr>
<td colspan=3><p align="center">
<input type="hidden" name="ROWID" value="<%=rs.getString("ROWID")%>"/>
<input name="action" type="submit" class="button" value="删除信息" >
<input name="action" type="submit" class="button" id="B2" value="修改信息">
<br></p></td>
</tr>
departinfo_browse.jsp部分代码:
<%String sql;
Connection conn=((DatabaseDataSource)browseSession.getDataSource()).getConnection() ;
Statement st=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY) ;
sql="SELECT rowid,dwdm,dwmc,intro FROM departinfo WHERE rowid='"+request.getParameter("ROWID")+"'";
ResultSet rs=st.executeQuery(sql) ;
ResultSetMetaData metaData = rs.getMetaData();
rs.next();
%>
错误代码:
exception

javax.servlet.ServletException: ORA-01410: 无效的 ROWID

org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.admin.departinfo_005fbrowse_jsp._jspService(departinfo_005fbrowse_jsp.java:131)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

java.sql.SQLException: ORA-01410: 无效的 ROWID

oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)
oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208)
oracle.jdbc.ttc7.Oall7.receive(Oall7.java:543)
oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1451)
oracle.jdbc.ttc7.TTC7Protocol.fetch(TTC7Protocol.java:943)
oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.java:2126)
oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2331)
oracle.jdbc.driver.OracleStatement.doScrollStmtExecuteQuery(OracleStatement.java:6223)
oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:640)
org.apache.jsp.admin.departinfo_005fbrowse_jsp._jspService(departinfo_005fbrowse_jsp.java:87)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.
急求大侠帮忙,不胜感激!
...全文
50117 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
shengfen154 2010-03-24
  • 打赏
  • 举报
回复
这是因为rowid的编码问题。rowid的生成规则中使用了'+',但'+'在JSP中只是一个字符串连接符,在JSP中就会显示成空格。
Vial 2009-01-09
  • 打赏
  • 举报
回复
今天我也遇到了这样的问题, 我的sql如下:
DELETE FROM czzf_detail WHERE rowid = 'AAAG9wAAJAAAADYAA ' AND hand_flag=1; 这个语句不能执行,报无效rowid.
DELETE FROM czzf_detail WHERE rowid = 'AAAG9wAAJAAAADYAA+' AND hand_flag=1; 这个语句可以执行.
数据库中实际的rowid为"AAAG9wAAJAAAADYAA+",
在jsp传递并通过getParameter获取参数值时,
rowid中的特殊符号(+)被过滤了.
你的rowid好像有空格, 最好检查一下是不是类似的问题.
mantisXF 2008-09-16
  • 打赏
  • 举报
回复
System.out.println("SQL:"+sql);

能把结果贴出来吗?
hyrongg 2008-09-16
  • 打赏
  • 举报
回复
晕死,你尽然把SELECT rowid,dwdm,dwmc,intro FROM departinfo ;
的结果贴出来,
我让你把程序里面的用RESPONSE.WRITE()出来看看

你把程序里面的SQL打印出来看看。
happydaisy1985 2008-09-16
  • 打赏
  • 举报
回复
不好意思,是我搞错了 INTRO 是表中第三列,因sql*plus区域有限,换行显示了,rowid格式没有问题。
hyrongg 2008-09-16
  • 打赏
  • 举报
回复
肯定这个问题吧,INTRO从何处来?检查一下,

tableModel.getValueAt(row,0)

你第一个循环就得到rowid=INTRO,抱错了
happydaisy1985 2008-09-16
  • 打赏
  • 举报
回复
SELECT rowid,dwdm,dwmc,intro FROM departinfo ;
ROWID DWDM DWMC
------------------ ---------- ------------------------
INTRO

AAAImrAAJAAAAJXAAA 004 孤四污
孤四污水处理站

AAAImrAAJAAAAJYAAA 003 孤三污
孤三污水处理站

AAAImrAAJAAAAJYAAB 001 孤一污
孤一污水处理站

AAAImrAAJAAAAJYAAC 002 孤二污
孤二污水处理站


已选择4行。
我不太明白第一行什么意思?
在oracle的sql/plus里查询的,这样的话,用ROWID= <%=tableModel.getValueAt(row,0)%>能得到正确的rowid值吗?
hyrongg 2008-09-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 happydaisy1985 的回复:]

但是我在sql="SELECT rowid,dwdm,dwmc,intro FROM departinfo WHERE rowid='"+request.getParameter("")+"'"; 引用的ROWID是“ROWID= <%=tableModel.getValueAt(row,0)%>“得到的,没有进行的格式上的修改啊?
一楼的朋友能给出修改建议吗?
[/Quote]

你把rowid 打印出来,
看看你的rowid是什么值?
怀疑为空
happydaisy1985 2008-09-16
  • 打赏
  • 举报
回复

但是我在sql="SELECT rowid,dwdm,dwmc,intro FROM departinfo WHERE rowid='"+request.getParameter("")+"'"; 引用的ROWID是“ROWID= <%=tableModel.getValueAt(row,0)%>“得到的,没有进行的格式上的修改啊?
一楼的朋友能给出修改建议吗?
hebo2005 2008-09-16
  • 打赏
  • 举报
回复
多表的放,要写明哪张表的rowid
hyrongg 2008-09-16
  • 打赏
  • 举报
回复

sql="SELECT rowid,dwdm,dwmc,intro FROM departinfo WHERE rowid='"+request.getParameter("ROWID")+"'";

request.getParameter("ROWID")不是一个合法的rowid,

SQL> select * from a;

CNAME
--------------------
张三
李四

SQL> select rowid,a.* from a;

ROWID CNAME
------------------ --------------------
AAAHbmAABAAAMZCAAA 张三
AAAHbmAABAAAMZCAAB 李四

SQL> select rowid,a.* from a where rowid='AAAHbmAABAAAMZCAAB';

ROWID CNAME
------------------ --------------------
AAAHbmAABAAAMZCAAB 李四

SQL> select rowid,a.* from a where rowid='AAAHbmAABAAAMZCAAB11';

select rowid,a.* from a where rowid='AAAHbmAABAAAMZCAAB11'

ORA-01410: invalid ROWID


Rowid是一个18位的,常或者短都会有问题
happydaisy1985 2008-09-16
  • 打赏
  • 举报
回复
tableModel.getValueAt(row,1);就可以得到表中第一列单元格中的值,但用tableModel.getValueAt(row,0);为什么得不到标准格式的rowid呢?我刚接触java没多长时间,帮忙帮到底,帮我想想解决办法把,非常感谢!
hyrongg 2008-09-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 happydaisy1985 的回复:]
sql="SELECT rowid,dwdm,dwmc,intro FROM departinfo WHERE rowid='"+request.getParameter("")+"'";
tableModel.getValueAt(row,0);
得到的rowid都是以这种形式来表示的
ROWID=oracle.sql.ROWID@8d5a91
ROWID=oracle.sql.ROWID@3508c0
ROWID=oracle.sql.ROWID@1d183b7
ROWID=oracle.sql.ROWID@1e937f
[/Quote]

SQL> select * from a where rowid='oracle.sql.ROWID@8d5a91';

select * from a where rowid='oracle.sql.ROWID@8d5a91'

ORA-01410: invalid ROWID

SQL>

这个rowid明显不符合规则,检查你的程序。
happydaisy1985 2008-09-16
  • 打赏
  • 举报
回复
sql="SELECT rowid,dwdm,dwmc,intro FROM departinfo WHERE rowid='"+request.getParameter("")+"'";
tableModel.getValueAt(row,0);
得到的rowid都是以这种形式来表示的
ROWID=oracle.sql.ROWID@8d5a91
ROWID=oracle.sql.ROWID@3508c0
ROWID=oracle.sql.ROWID@1d183b7
ROWID=oracle.sql.ROWID@1e937f

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧