今天试着写个小程序,结果一直跑出空指向异常,看了半天也没明白,修求帮助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
);
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
);
可能是这句有错。
表的属性都在我 那个脚本中,不是也发出来了吗
con对象你是否拿到了
per.getBirthday().getTime()));
per对象传进来的时候是否创建好了
还有,你把错误信息晒晒。
nullpointer 很常见但也很好解决
psmt.close();
}
con有问题,被别的地方close叻,然后psmt也被close叻,然后你再想close就空叻。
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,?,?,?,?)
这地方出异常,所以psmt为null,导致下面的空指针异常
sql语句有问题,所以在创建PreparedStatement的时候就没创建好。所以psmt为空。
我不知道myseq.nextval是什么意思。。
是不是这句出了问题?
if(psmt!=null){
psmt.close();
}