2014-12-02 106 views
0

我想在一个jsp页面中显示来自两个表的数据。我收到以下错误。你能解释一下错误吗?结果集开始之前

java.sql.SQLException: Before start of result set 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1058) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:972) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:958) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:903) 
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:854) 
at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5772) 
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5692) 
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5732) 
at jsp_servlet.__userhome._jspService(__userhome.java:149) 
at weblogic.servlet.jsp.JspBase.service(JspBase.java:35) 
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280) 
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254) 
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136) 
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:346) 
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:243) 
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3432) 
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3402) 
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) 
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2285) 
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2201) 
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179) 
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1572) 
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:255) 
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311) 
at weblogic.work.ExecuteThread.run(ExecuteThread.java:263) 

UPDATE: 这是代码,造成

 PreparedStatement pstm = null; 
    String sql = "select * from owner"; 
    pstm = con.prepareStatement(sql); 
    ResultSet rs = pstm.executeQuery(); 
    ResultSet firstrs=rs; 
    String tname=rs.getString("tablename"); 
    String sql1="SELECT * FROM "+tname; 
    Statement stmt=con.createStatement(); 
    ResultSet rs1=stmt.executeQuery(sql1); 
    ResultSetMetaData rsmd=rs1.getMetaData(); 
+0

你可以发布你如何阅读结果集? – SeeTheC 2014-12-02 04:36:20

+0

[ResultSet异常 - 结果集开始之前]的可能重复(https://stackoverflow.com/questions/2120255/resultset-exception-before-start-of-result-set) – 2018-01-14 10:34:25

回答

1
PreparedStatement pstm = null; 
String sql = "select * from owner"; 
pstm = con.prepareStatement(sql); 
ResultSet rs = pstm.executeQuery(); 
ResultSet firstrs=rs; 
String tname=""; 
while(rs.next())//You have to write resultset like this because if result set is empty then it will gaves an error 
{ 
    tname=rs.getString("tablename"); 
    tname+=","; 
} 
if(!tname.equal("")) 
{ 
    String sql1="SELECT * FROM "+tname;///It select multiple tables results 
    Statement stmt=con.createStatement(); 
    ResultSet rs1=stmt.executeQuery(sql1); 
    ResultSetMetaData rsmd=rs1.getMetaData(); 
} 
0

这样做的真正原因是,您在结果集的第一行之前设置光标错误。

所以,通常的做法是进行测试,对检查它是否具有至少1行或无法正常内如果条件或循环中,如下所示:

PreparedStatement pstm = null; 
String sql = "select * from owner"; 
pstm = con.prepareStatement(sql); 
ResultSet rs = pstm.executeQuery(); 
ResultSet firstrs=rs; 
// So with the following line we set it to the first row of the result set. 
while (rs.next()) { 
     String tname=rs.getString("tablename"); 
} 

String sql1="SELECT * FROM "+tname; 
Statement stmt=con.createStatement(); 
ResultSet rs1=stmt.executeQuery(sql1); 

上面第一个答案是正确的。但我想让它更有意义。

最好的问候, Randika ResultSetMetaData rsmd = rs1.getMetaData();

相关问题