黑马程序员技术交流社区

标题: jsp中Dao的错误. [打印本页]

作者: 龙秋地    时间: 2012-6-7 15:47
标题: jsp中Dao的错误.
  1. package dao;

  2. import java.sql.Connection;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.text.SimpleDateFormat;
  7. import java.util.Date;


  8. import com.yourcompany.struts.form.BorrowForm;
  9. import common.DbConnection;


  10. public class BorrowDao
  11. {
  12.        
  13.        
  14.         public int borrowBook(BorrowForm bf)
  15.         {
  16.                
  17.                        
  18.                        
  19.                         int a = 0;
  20.                        
  21.                         String sno = bf.getSno();
  22.                         String book_id = bf.getBook_id();
  23.                         String tname = bf.getTname();
  24.                         String id = bf.getId();
  25.                         Connection con = DbConnection.getConnection();
  26.                        
  27.                        
  28.                        
  29.                        
  30.                        
  31.                        
  32.                         long time=System.currentTimeMillis();
  33.                         long rtime=20*1000*60*60*24;  //可借20天
  34.                         long returntime = time+rtime;
  35.                        
  36.                         SimpleDateFormat format1 =new  SimpleDateFormat("yyyy-MM-dd");
  37.                         Date btime = new Date();
  38.                         String ndate = format1.format(btime);
  39.                         System.out.println(ndate);
  40.                        
  41.                        
  42.                         java.sql.Date obtime = java.sql.Date.valueOf(ndate);
  43.                        
  44.                         SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");
  45.                         Date myDate = new Date(returntime);
  46.                         String returntime1 = format2.format(myDate);
  47.                         java.sql.Date  returntime2= java.sql.Date.valueOf(returntime1);
  48.                         System.out.println(returntime1);
  49.                        
  50.                        
  51.                        
  52.                         int nownum=0,borrowed=0;      //booksinfo表中的现有数量-1,借阅次数+1;
  53.                        
  54.                         boolean bool=true;
  55.                        
  56.                         try {
  57.                                 PreparedStatement prst2;
  58.                                 prst2 = con.prepareStatement("select nownum,borrowed from booksinfo where id=?");                 [color=Red]  //提示这行有错误!!!空指针异常.哪异常?[/color]
  59.                                 prst2.setString(1, book_id);
  60.                                 ResultSet rs2 = prst2.executeQuery();
  61.                                
  62.                                 if(rs2.next())
  63.                                 {
  64.                                         nownum=rs2.getInt(1);
  65.                                         borrowed=rs2.getInt(2);
  66.                                         if(nownum<=0)
  67.                                         {       //防止图书借没了还能借出
  68.                                                 bool=false;
  69.                                                
  70.                                         }
  71.                                         else
  72.                                         {
  73.                                                         nownum--;
  74.                                                         borrowed++;
  75.                                         }
  76.                                 }
  77.                         } catch (SQLException e1) {
  78.                                 // TODO Auto-generated catch block
  79.                                 e1.printStackTrace();
  80.                         }
  81.                        
  82.                        
  83.                         if(bool)
  84.                         {               
  85.                                
  86.                                
  87.                                
  88.                                 try
  89.                                 {
  90.                                         PreparedStatement prst3;
  91.                                         prst3 = con.prepareStatement("update booksinfo set nownum="+nownum+",borrowed="+borrowed+" where id='"+book_id+"'");
  92.                                        
  93.                                        
  94.                                         PreparedStatement prst4 =
  95.                                                 con.prepareStatement
  96.                                                 ("insert  into borrowinfo (id,sno,tname,book_id,borrowedtime,returntime) values('"+id+"','"+sno+"','"+tname+"','"+book_id+"','"+obtime+"','"+returntime2+"'");
  97.                                   a = prst4.executeUpdate();
  98.                                   con.close();
  99.                                 } catch (SQLException e) {
  100.                                         // TODO Auto-generated catch block
  101.                                         e.printStackTrace();
  102.                                 }
  103.                                
  104.                          
  105.                         }
  106.                        
  107.                        
  108.                
  109.                
  110.                 return a;
  111.         }

  112.         private SimpleDateFormat SimpleDateFormat(String string) {
  113.                 // TODO Auto-generated method stub
  114.                 return null;
  115.         }

  116.        
  117. }
复制代码
这是我做的图书管理系统中借书的Dao,但是网页提示是:
java.lang.NullPointerException
        dao.BorrowDao.borrowBook(BorrowDao.java:63)
        com.yourcompany.struts.action.BorrowAction.execute(BorrowAction.java:41)
        org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
        org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
        org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
        org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        filter.CFilter.doFilter(CFilter.java:30)
我想问怎么就空指针异常了?我也没哪块是Null引用了啊.!!!!!!!!!!!!
愁死了,改一遍错一遍.
作者: 伊文龙    时间: 2012-6-7 16:42
62行 PreparedStatement prst2;改成 PreparedStatement prst2 = null;试试
局部变量没有默认初始化值。
作者: 龙秋地    时间: 2012-6-8 11:45
伊文龙 发表于 2012-6-7 16:42
62行 PreparedStatement prst2;改成 PreparedStatement prst2 = null;试试
局部变量没有默认初始化值。 ...

还是不行啊.
不过谢谢回答.
作者: 伊文龙    时间: 2012-6-8 11:49
龙秋地 发表于 2012-6-8 11:45
还是不行啊.
不过谢谢回答.

那你再检查检查数据库连接是否正常。
作者: 伊文龙    时间: 2012-6-8 11:50
伊文龙 发表于 2012-6-8 11:49
那你再检查检查数据库连接是否正常。

看看con的值~
作者: 符云爵    时间: 2012-6-8 11:59
PreparedStatement和ResultSet对象都不用关闭的么{:soso_e103:}
会不会是Connection对象已经为空?打印检查下咯
Connection对象也应该放在finally块中关闭。
作者: 赵兵锋    时间: 2012-6-8 12:20
建议追踪con的值,从30行获得处开始检查其是否为空,若为空就进DBconnection里检查。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2