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>&nbsp; </div></td>
        <td  > <div align="center"><a href="../admin/departinfo_modify.jsp?ROWID=<%=tableModel.getValueAt(row,0)%>"><%=NullToSpace.getNullcheck(tableModel.getValueAt(row,2))%></a>&nbsp;</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.
急求大侠帮忙,不胜感激!

解决方案 »

  1.   


    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位的,常或者短都会有问题
      

  2.   

    多表的放,要写明哪张表的rowid
      

  3.   


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

  4.   


    你把rowid 打印出来,
    看看你的rowid是什么值?
    怀疑为空
      

  5.   

    SELECT rowid,dwdm,dwmc,intro FROM departinfo ;
    ROWID              DWDM       DWMC
    ------------------ ---------- ------------------------
    INTROAAAImrAAJAAAAJXAAA 004        孤四污
    孤四污水处理站AAAImrAAJAAAAJYAAA 003        孤三污
    孤三污水处理站AAAImrAAJAAAAJYAAB 001        孤一污
    孤一污水处理站AAAImrAAJAAAAJYAAC 002        孤二污
    孤二污水处理站
    已选择4行。
    我不太明白第一行什么意思?
    在oracle的sql/plus里查询的,这样的话,用ROWID= <%=tableModel.getValueAt(row,0)%>能得到正确的rowid值吗?
      

  6.   

    肯定这个问题吧,INTRO从何处来?检查一下,tableModel.getValueAt(row,0)你第一个循环就得到rowid=INTRO,抱错了
      

  7.   

    不好意思,是我搞错了 INTRO 是表中第三列,因sql*plus区域有限,换行显示了,rowid格式没有问题。
      

  8.   

    晕死,你尽然把SELECT rowid,dwdm,dwmc,intro FROM departinfo ; 
    的结果贴出来,
    我让你把程序里面的用RESPONSE.WRITE()出来看看你把程序里面的SQL打印出来看看。
      

  9.   

    System.out.println("SQL:"+sql);能把结果贴出来吗?
      

  10.   

    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
      

  11.   


    SQL> select * from a where rowid='oracle.sql.ROWID@8d5a91';select * from a where rowid='oracle.sql.ROWID@8d5a91'ORA-01410: invalid ROWIDSQL> 这个rowid明显不符合规则,检查你的程序。
      

  12.   

    tableModel.getValueAt(row,1);就可以得到表中第一列单元格中的值,但用tableModel.getValueAt(row,0);为什么得不到标准格式的rowid呢?我刚接触java没多长时间,帮忙帮到底,帮我想想解决办法把,非常感谢!
      

  13.   

    今天我也遇到了这样的问题, 我的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好像有空格, 最好检查一下是不是类似的问题.
      

  14.   

    这是因为rowid的编码问题。rowid的生成规则中使用了'+',但'+'在JSP中只是一个字符串连接符,在JSP中就会显示成空格。