我想在一个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 :(得分: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();
}
答案 1 :(得分:0)
实际原因是,您已在结果集的第一行之前设置了Cursor。
通常的做法是对其进行测试以检查它是否至少有一行,通常在If条件下或循环内,如下所示:
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();