2014-01-27 4 views
1
String temp[]=bookName.split(" "); 
    ArrayList list=new ArrayList(); 

    try { 
     con=ds.getConnection(); 
     pst=con.prepareStatement("select distinct book_name from booksinventory"); 
     rs=pst.executeQuery(); 

     for(int i=0;i<temp.length;i++) 
     { 
      while(rs.next()) 
      { 
       //System.out.println(rs.getString(1)+" contains "+temp[i]); 
       line no 631 --> System.out.println(rs.getString(1)+" contains "+temp[i]+":"+(rs.getString(1).toUpperCase()).contains(temp[i].toUpperCase())); 
       if((rs.getString(1).toUpperCase()).contains(temp[i].toUpperCase())) 
       { 
        list.add(rs.getString(1)); 
        System.out.println(list); 
       } 
      } 
      rs.beforeFirst(); 
     } 
     System.out.println(list); 
     Set<String> set=new HashSet<String>(); 
     set.addAll(list); 
     list.removeAll(list); 
     list.addAll(set); 
     list.removeAll(Collections.singleton(null)); 

     con.close(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return list; 

Здесь я пытаюсь выполнить поиск по моим записям, чтобы проверить, присутствует ли в записи определенный набор ключевых слов. Я попробовал почти все не могу понять ошибку .. Я думаю, что его с утверждением «rs.beforeFirst()», поскольку он печатает только для первой итерации .. Ниже из консоли ..Java: ResultSet error

16:55:06,240 INFO [STDOUT] Let us C contains let:true 
    16:55:06,240 INFO [STDOUT] [Let us C] 
    16:55:06,240 INFO [STDOUT] Let us C++ contains let:true 
    16:55:06,240 INFO [STDOUT] [Let us C, Let us C++] 
    16:55:06,240 INFO [STDOUT] Let us HTML contains let:true 
    16:55:06,240 INFO [STDOUT] [Let us C, Let us C++, Let us HTML] 
    16:55:06,240 INFO [STDOUT] dfgdfg contains let:false 
    16:55:06,240 INFO [STDOUT] digital electronics contains let:false 
    16:55:06,240 INFO [STDOUT] java contains let:false 
    16:55:06,241 INFO [STDOUT] oops contains let:false 
    16:55:06,241 INFO [STDOUT] quantum computing contains let:false 
    16:55:06,241 INFO [STDOUT] sdf contains let:false 
    16:55:06,241 ERROR [[SearchBooksCombo]] Servlet.service() for servlet SearchBooksCombo threw exception 
    java.lang.NullPointerException 
     at com.classes.dao.LibraryDAO.getMatchingBooks(LibraryDAO.java:631) 
     at com.classes.servlets.SearchBooksCombo.doGet(SearchBooksCombo.java:37) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654) 
     at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:557) 
     at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:481) 
     at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968) 
     at org.apache.jsp.addCopy_jsp._jspService(addCopy_jsp.java:80) 
     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373) 
     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336) 
     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
     at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182) 
     at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
     at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) 
     at java.lang.Thread.run(Unknown Source) 
    16:55:06,241 ERROR [[jsp]] Servlet.service() for servlet jsp threw exception 
    java.lang.NullPointerException 
     at com.classes.dao.LibraryDAO.getMatchingBooks(LibraryDAO.java:631) 
     at com.classes.servlets.SearchBooksCombo.doGet(SearchBooksCombo.java:37) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654) 
     at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:557) 
     at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:481) 
     at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968) 
     at org.apache.jsp.addCopy_jsp._jspService(addCopy_jsp.java:80) 
     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373) 
     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336) 
     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
     at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182) 
     at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
     at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) 
     at java.lang.Thread.run(Unknown Source) 
    16:55:06,242 INFO [CachedConnectionManager] Closing a connection for you. Please close them yourself: [email protected]b 
    java.lang.Throwable: STACKTRACE 
     at org.jboss.resource.connectionmanager.CachedConnectionManager.registerConnection(CachedConnectionManager.java:290) 
     at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:423) 
     at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:849) 
     at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:89) 
     at com.classes.dao.LibraryDAO.getMatchingBooks(LibraryDAO.java:622) 
     at com.classes.servlets.SearchBooksCombo.doGet(SearchBooksCombo.java:37) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654) 
     at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:557) 
     at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:481) 
     at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968) 
     at org.apache.jsp.addCopy_jsp._jspService(addCopy_jsp.java:80) 
     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373) 
     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336) 
     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
     at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182) 
     at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
     at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) 
     at java.lang.Thread.run(Unknown Source) 
+1

Какая строка в коде 631? –

+0

LibraryDAO ... проверьте, создан ли его объект или нет. –

+0

Его работа отлично подходит для первой итерации .. В моем db у меня есть книги вроде Let C, Let C++ и т. Д. (Я их не называю: D) .. Когда bookName содержит «let us» .. он хранит все книги с «пусть» на свое имя (как видно на консоли) .. но не переходят ко второму для итерации .. что может быть проблемой? – user3240277

ответ

1

«потому что это только печать для первой итерации».

От ResultSet javadoc.

по умолчанию ResultSet объект не является обновляемым и есть курсор, который движется только вперед. Таким образом, вы можете проходить через него только один раз и только от первой строки до последней строки. Можно создавать объекты ResultSet, которые можно прокручивать и/или обновлять. Следующий фрагмент кода, в котором con является действительным объектом Connection, иллюстрирует, как сделать набор результатов, который прокручивается и нечувствителен к обновлениям другими, и который может быть обновляемым. Смотрите поля ResultSet для других параметров.

Statement stmt = con.createStatement(
            ResultSet.TYPE_SCROLL_INSENSITIVE, 
            ResultSet.CONCUR_UPDATABLE); 
    ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2"); 
    // rs will be scrollable, will not show changes made by others, 
    // and will be updatable 
+0

К сожалению! Как я могу забыть это! Благодаря ! :) – user3240277

1

Вот как я бы написать этот класс, основанный на том, что вы опубликовали:

package persistence; 

import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.ArrayList; 
import java.util.List; 

/** 
* BookDao description here 
* @author Michael 
* @link http://stackoverflow.com/questions/21380043/javaresultset-error#21380043 
* @since 1/27/14 6:51 AM 
*/ 
public class BookDao { 


    public static final String SELECT_BOOK_NAMES = "select distinct book_name from booksinventory"; 
    private Connection con; 

    public BookDao(Connection con) { 
     this.con = con; 
    } 

    public List<String> getAllBookNamesByKeywords() throws SQLException { 
     List<String> list = new ArrayList<String>(); 
     PreparedStatement ps = null; 
     ResultSet rs = null; 
     try { 
      ps = con.prepareStatement(SELECT_BOOK_NAMES); 
      rs = ps.executeQuery(); 
      while(rs.next()) { 
       list.add(rs.getString(1)); 
      } 
     } finally { 
      DatabaseUtils.close(rs); 
      DatabaseUtils.close(ps); 
     } 
     return list; 
    } 
} 

Вы делаете много вещей, которые ненужным либо неправильно.

+0

Вы не учитываете, какие книги будут добавлены в список из-за критериев поиска ('temp'). Кроме того, это на самом деле намного более чище! – bobbel

+1

Это не будет масштабироваться по мере увеличения количества имен книг. Лучшее решение позволит базе данных справиться с тем, что хорошо. Я думаю, что лучший запрос, возможно, индексатор, будет гораздо более масштабируемым. – duffymo