Java 在从JSP页面调用的方法中始终引发异常
我知道这是一个测试查询,它可以工作并返回14Java 在从JSP页面调用的方法中始终引发异常,java,sql,jsp,postgresql,sqlexception,Java,Sql,Jsp,Postgresql,Sqlexception,我知道这是一个测试查询,它可以工作并返回14 private static final String TEST = "SELECT album_id FROM Album"; 每次执行以下方法时,都会引发异常,并返回变量x而不是我的album_id public String getAlbumId(String email, String album_name) { PreparedStatement stmt = null; Connection conn = null;
private static final String TEST = "SELECT album_id FROM Album";
每次执行以下方法时,都会引发异常,并返回变量x而不是我的album_id
public String getAlbumId(String email, String album_name) {
PreparedStatement stmt = null;
Connection conn = null;
ResultSet rs = null;
try{
conn = DbConnection.getConnection();
stmt = conn.prepareStatement(TEST);
//stmt.setString(1, email);
//stmt.setString(2, album_name);
rs = stmt.executeQuery();
String album_id = rs.getString(1);
return album_id;
}
catch(SQLException e) { String x="-1"; return x; }
}
调用此方法的jsp代码部分如下所示:
<table>
<%
AlbumDao album2 = new AlbumDao();
String myid;
int actualid;
for(String item : album_names) {
myid = album2.getAlbumId(email,item);
actualid = Integer.parseInt(myid);
System.out.println(myid);
%>
<tr>
<td><a href="display_album.jsp?album_id=<%=actualid%>"><% out.print(item);%></a></td>
</tr>
<%}%>
您需要在
rs.getString(1)
之前调用rs.next()。异常也暗示了同样的情况 请提供您遇到的异常的stackdump。可以。让我很快地把它添加到问题中,这听起来可能有点傻,但我假设您没有真正使用该查询?上面显示的查询是一个测试查询,我100%知道答案。我现在正在使用它,因为数据库中只有一张专辑。因此,只有一个返回值。异常stacktrace说它非常清晰。花点时间阅读它,也许用谷歌搜索一下。新手看到的大多数错误已经被纠正了无数次。谢谢!这解决了问题。只是想知道,在executeQuery()方法返回后,ResultSet指向什么?您是否使用rs.next()
将其定位到第一个元素?是的,Javadocs说,ResultSet对象维护一个指向其当前数据行的光标。最初,光标位于第一行之前。下一个方法将光标移动到下一行,因为当ResultSet对象中没有更多行时,它返回false,所以当首次创建ResultSet对象时,可以在while循环中使用它来迭代结果集,光标位于第一行之前。只有在调用“next”后,光标才指向第一行。这看起来很合理,因为有时你不会得到任何结果。有关更多详细信息,请参阅JDBC 4.1规范中的第15.2.2节,@asgs sorry在发布我的评论之前没有看到您的评论
org.postgresql.util.PSQLException: ResultSet not positioned properly, perhaps you need to call next.
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.checkResultSet(AbstractJdbc2ResultSet.java:2452)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getString(AbstractJdbc2ResultSet.java:1882)
at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:174)
at photoshare.AlbumDao.getAlbumId(AlbumDao.java:66)
at org.apache.jsp.index_jsp._jspService(org.apache.jsp.index_jsp:103)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:667)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)