今天试着写个小程序,结果一直跑出空指向异常,看了半天也没明白,修求帮助public boolean doCreate(Person per) throws Exception {
boolean flag = false;
PreparedStatement psmt = null;
String sql = "INSERT INTO Person(pid,name,age,address,birthday)"
+ " VALUES (myseq.nextval,?,?,?,?)";
System.out.print(sql);
try {
psmt = this.con.prepareStatement(sql);
psmt.setString(1, per.getName());
psmt.setInt(2, per.getAge());
psmt.setString(3, per.getAddress());
psmt.setDate(4, new java.sql.Date(per.getBirthday().getTime()));

int len = psmt.executeUpdate();
if (len > 0) {
flag = true;

}
} catch (Exception e) {

throw e;
} finally {
try {
psmt.close();
} catch (Exception e) {
throw e;
}
}
return flag;
数据库是这样的
DROP SEQUENCE myseq;
DROP TABLE Person;
CREATE SEQUENCE myseq;
CREATE TABLE Person(
    pid    NUMBER   PRIMARY KEY ,
    name   VARCHAR2(50)  NOT NULL,
    age    NUMBER      NOT NULL,
    address VARCHAR2(200) NOT NULL,
    birthday  DATE  NOT NULL
);

解决方案 »

  1.   

      psmt = this.con.prepareStatement(sql);  是不是这里报空呀你可以打个断点调试下this.con  是否获得了连接
      

  2.   

    哪一行报啊 把错误贴上来  是不是你Person  没有相对应的属性啊
      

  3.   

      int len = psmt.executeUpdate();
    可能是这句有错。
      

  4.   

    轨迹错误出现在 psmt.close();那,我确实看不出有什么问题
    表的属性都在我 那个脚本中,不是也发出来了吗
      

  5.   

      psmt = this.con.prepareStatement(sql);
       con对象你是否拿到了
      per.getBirthday().getTime()));
      per对象传进来的时候是否创建好了
       还有,你把错误信息晒晒。
       nullpointer 很常见但也很好解决
      

  6.   

    看看楼上的 if(pstm!=null){
     psmt.close();
    }
      

  7.   


    con有问题,被别的地方close叻,然后psmt也被close叻,然后你再想close就空叻。
      

  8.   

    回来了,异常信息是这个java.lang.NullPointerException
    at org.lf.info.dao.impl.IPersonImpl.doCreate(IPersonImpl.java:44)
    at org.lf.info.dao.proxy.IPersonProxy.doCreate(IPersonProxy.java:24)
    at org.lf.operate.OperatePerson.insert(OperatePerson.java:27)
    at org.lf.info.menu.Menu.show(Menu.java:23)
    at org.lf.info.menu.Menu.<init>(Menu.java:8)
    at org.lf.info.menu.Menu.main(Menu.java:53)
    INSERT INTO Person(pid,name,age,address,birthday) VALUES (myseq.nextval,?,?,?,?)
      

  9.   

     psmt = this.con.prepareStatement(sql);
    这地方出异常,所以psmt为null,导致下面的空指针异常
      

  10.   

    INSERT INTO Person(pid,name,age,address,birthday) VALUES (myseq.nextval,?,?,?,?)
    sql语句有问题,所以在创建PreparedStatement的时候就没创建好。所以psmt为空。
    我不知道myseq.nextval是什么意思。。
    是不是这句出了问题?
      

  11.   

    建议close()是用if判断
    if(psmt!=null){
    psmt.close();
    }
      

  12.   

    不要把 Connection 写成成员变量,老老实实地把 Connection 搬到方法内部写成局部变量,否则会有问题的。