2014-09-30 65 views
0

我在其他文章中檢查過這個問題,它說要指向表中的第一行,我需要執行「result.next()」。 但我仍然遇到這個問題,我檢查了函數的輸入,沒關係,並且匹配數據庫中的信息。 它不執行「while」循環,就像表格的內容是空的一樣... 我使用GWT,所以調試很痛苦!SQLException:結果集開始之前

表:picId(primary_key),書,fromChapter,toChapter ....(重要的)

內容:書= 1,章= 6 和數據庫中包含這樣的行。 我希望我不會像往常一樣在這裏失去一些愚蠢的東西! :)

public List<PicAsset> getPicture(int book, int chapter) throws Exception 

    { 

    System.out.print("getPicture ok " + book +"," + chapter); 
    Connection conn = null; 
    PreparedStatement pstmt = null; 
    ResultSet result = null; 
    List<PicAsset> relevantAssets = new ArrayList<PicAsset>(); 
    PicAsset relAsset; 


    try { 
     conn = getConnection(); 
     pstmt = conn.prepareStatement("SELECT * FROM picasset WHERE book = ? AND fromChapter = ?"); 

     //System.out.print("connection" + conn); 
     pstmt.setInt(1, book); 
     pstmt.setInt(2, chapter); 
     // pstmt.setInt(3, chapter); 
     // pstmt.setInt(4, chapter); 
     result = pstmt.executeQuery(); 


     while (result.next()) { 

      System.out.print(result.next()); 
      relAsset = new PicAsset(result.getInt("picId"),result.getInt("book"), result.getInt("fromChapter"), result.getInt("toChapter"),result.getInt("fromVerse"),result.getInt("toVerse"),result.getString("creator"),result.getString("discription"),result.getString("source"),result.getString("title"),result.getString("duration"),result.getString("url")); 
      relevantAssets.add(relAsset); 

     } 
    } 

     catch (SQLException sqle) 
     { 
      sqle.printStackTrace(); 
     } 
     finally 
     { 
      // Cleanup 
      result.close(); 
      pstmt.close(); 
      conn.close(); 
     } 

    return relevantAssets; 


    } 
} 

堆棧跟蹤:

getPicture ok 1,[email protected]on: Before start of result set 
    at com.mysql.jdbc.ResultSet.checkRowPos(ResultSet.java:700) 
    at com.mysql.jdbc.ResultSet.getNativeString(ResultSet.java:3747) 
    at com.mysql.jdbc.ResultSet.getStringInternal(ResultSet.java:4979) 
    at com.mysql.jdbc.ResultSet.getString(ResultSet.java:4810) 
    at com.biblereader.server.MySQLConnection.getPicture(MySQLConnection.java:151) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561) 
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:265) 
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:305) 
    at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:755) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) 
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:501) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) 
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) 
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) 
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086) 
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428) 
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) 
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 
    at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:68) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 
    at org.eclipse.jetty.server.Server.handle(Server.java:370) 
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) 
    at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:960) 
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1021) 
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865) 
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240) 
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) 
    at java.lang.Thread.run(Unknown Source) 
+2

你可以發佈堆棧跟蹤 – 6ton 2014-09-30 14:52:32

+0

從來沒有使用過的堆棧跟蹤我正在閱讀關於它如何幫助我找到bug – 2014-09-30 15:07:35

+0

@MarounSassine「discription」是否真的拼寫,因爲它在數據庫中? – 2014-09-30 15:24:23

回答

2

的問題似乎是在這裏;

while (result.next()) { 

    System.out.print(result.next()); 

    ... 

在while循環中第一次調用result.next()會將光標移至第一個結果。打印中的第二個將其推進到第二個結果(可能不存在)。

如果查詢中只有一個結果,則在第二次調用next()後遊標無效,從下一行的遊標獲取數據將失敗。

+0

不,我不這麼認爲,因爲如果我用System.out.print(「我在這個時候」)替換「System.out.print(result.next());」;它永遠不會在控制檯中打印......因此,由於某種原因,result.next()始終爲空 – 2014-09-30 17:06:55

+0

@MarounSassine根據平臺的不同,您可能希望使用'println'而不是'print',或者緩衝可能導致輸出不是顯示。崩潰在'getString'裏面,我看不到沒有結果的情況。 – 2014-09-30 17:10:58

+0

console:「getPicture ok 1,6in while Starting Jetty on port 8888 [WARN]調度傳入的RPC調用時發生異常 com.google.gwt.user.client.rpc.SerializationException:類型爲'com.biblereader.shared.PicAsset'was was不包含在可由此SerializationPolicy或其Class對象序列化的類型集中的內容不能被加載。出於安全性考慮,此類型不會被序列化:instance = [email protected]「 I已經添加了一個默認的構造函數到PicAsset類,它的工作......一個問題與「IsSerializable」...我不知道它爲什麼現在工作 – 2014-09-30 17:17:12

相關問題