从mysql中选择的数据,但该过程抛出NullPointerException

时间:2016-05-21 23:15:21

标签: java mysql jdbc nullpointerexception

我试图从mysql中选择一些行并将其放入ArrayList中 在java类

这是查询:

"SELECT user_id,book_id,preference FROM rating LIMIT %d OFFSET %d"

我尝试在将数据存储到ArrayList

之前验证数据
ratesDATA bk = new ratesDATA();
                bk.setUser_id(rs.getLong("user_id"));
                bk.setBook_id(rs.getLong("book_id"));
                bk.setPref(rs.getDouble("preference"));
                System.out.println("TTTTNNNN"+rs.getLong("user_id")+"/"+rs.getLong("book_id")+"/"+rs.getDouble("preference"));

                list.add(bk);

这是我在GlassFish服务器日志中找到的:(我使用servlet将行限制为10行)

------- 10个正确的行,然后是Exception ------

Infos:   TTTTNNNN1/0/4.0
Infos:   TTTTNNNN1/3/3.0
Infos:   TTTTNNNN1/4/3.0
Infos:   TTTTNNNN1/5/1.0
Infos:   TTTTNNNN1/6/4.0
Infos:   TTTTNNNN1/8/2.0
Infos:   TTTTNNNN2/0/3.0
Infos:   TTTTNNNN2/1/3.0
Infos:   TTTTNNNN2/4/2.0
Infos:   TTTTNNNN2/7/1.0
 java.lang.NullPointerException
    at com.vaannila.ratesDATA.loadList(ratesDATA.java:134)
    at com.servlet.nextRatesPage.doGet(nextRatesPage.java:57)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)

这是完整的程序代码:

public void loadList(int firstrow,int rowcount) 
    {

            com.mysql.jdbc.PreparedStatement ps = null;  



    list= new ArrayList<ratesDATA>();
            ResultSet rs = null;  

             String url="jdbc:mysql://127.0.0.1:3306/pfadb";
            String name="root";
            String pw="root";
            String driver="com.mysql.jdbc.Driver";    


            Connection connexion=null;


try
{    
    Class.forName(driver).newInstance();
    connexion=DriverManager.getConnection(url,name,pw);        
    String SQL_SUBLIST = "SELECT user_id,book_id,preference  FROM rating LIMIT %d OFFSET %d";

//String q = String.format(SQL_SUBLIST, firstrow, rowcount);
String q = String.format(SQL_SUBLIST, rowcount, firstrow); 

           Statement commande=connexion.createStatement();
              rs=commande.executeQuery(q);                 
               while (rs.next())
                {
                ratesDATA bk = new ratesDATA();
                bk.setUser_id(rs.getLong("user_id"));
                bk.setBook_id(rs.getLong("book_id"));
                bk.setPref(rs.getDouble("preference"));
                System.out.println("TTTTNNNN"+rs.getLong("user_id")+"/"+rs.getLong("book_id")+"/"+rs.getDouble("preference"));

                list.add(bk);

                }

                } 

                catch(Exception e)
                {
                e.printStackTrace();

                }
                finally
                {
                try
                {
                connexion.close();
                ps.close();
                }
                catch(Exception e)
                {
                e.printStackTrace();
                }
                }     








    }

这是servlet的完整代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
       int page = 1;
        try{
                    int recordsPerPage = 10;
        if(request.getParameter("page") != null)
            page = Integer.parseInt(request.getParameter("page"));
        ratesDATA dao = new ratesDATA();
                dao.loadList((page-1)*recordsPerPage,recordsPerPage);

        List<ratesDATA> list = dao.getList();



        int noOfRecords = dao.getNoOfRecords();
        int noOfPages = (int) Math.ceil(noOfRecords * 1.0 / recordsPerPage);

        request.setAttribute("rateslist", list);
        request.setAttribute("noOfPages", noOfPages);
        request.setAttribute("currentPage", page);
        RequestDispatcher view = request.getRequestDispatcher("adminRates.jsp");
        view.forward(request, response); 


                } catch (Exception ex) {
                    System.out.println("TTTTTTTTTTTTTTTT"+ex.getMessage());

        }
    } 

2 个答案:

答案 0 :(得分:0)

在关闭连接之前关闭语句

ps指的是什么?

    ps.close();

答案 1 :(得分:0)

最后更改代码。不需要再次尝试阻止并将ps更改为rs。

finally {
    rs.close();
    connexion.close(); 
}