大侠留步

Zero_Strong 2009-12-24 04:48:48
今天试着写个小程序,结果一直跑出空指向异常,看了半天也没明白,修求帮助
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
);
...全文
187 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不要把 Connection 写成成员变量,老老实实地把 Connection 搬到方法内部写成局部变量,否则会有问题的。
sdjnliu 2009-12-24
  • 打赏
  • 举报
回复
建议close()是用if判断
if(psmt!=null){
psmt.close();
}
wibnmo 2009-12-24
  • 打赏
  • 举报
回复
INSERT INTO Person(pid,name,age,address,birthday) VALUES (myseq.nextval,?,?,?,?)
sql语句有问题,所以在创建PreparedStatement的时候就没创建好。所以psmt为空。
我不知道myseq.nextval是什么意思。。
是不是这句出了问题?
苍蝇①号 2009-12-24
  • 打赏
  • 举报
回复
psmt = this.con.prepareStatement(sql);
这地方出异常,所以psmt为null,导致下面的空指针异常
Zero_Strong 2009-12-24
  • 打赏
  • 举报
回复
回来了,异常信息是这个

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,?,?,?,?)
caoyue19840531 2009-12-24
  • 打赏
  • 举报
回复
ding a ................
crazylaa 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zero_strong 的回复:]
轨迹错误出现在 psmt.close();那,我确实看不出有什么问题
表的属性都在我 那个脚本中,不是也发出来了吗
[/Quote]

con有问题,被别的地方close叻,然后psmt也被close叻,然后你再想close就空叻。
NickCheng 2009-12-24
  • 打赏
  • 举报
回复
up^^^^
老张-AI 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bolink5 的回复:]
  psmt = this.con.prepareStatement(sql);
  con对象你是否拿到了
  per.getBirthday().getTime()));
  per对象传进来的时候是否创建好了
  还有,你把错误信息晒晒。
  nullpointer 很常见但也很好解决
[/Quote]
看看楼上的

if(pstm!=null){
psmt.close();
}
bolink5 2009-12-24
  • 打赏
  • 举报
回复
psmt = this.con.prepareStatement(sql);
con对象你是否拿到了
per.getBirthday().getTime()));
per对象传进来的时候是否创建好了
还有,你把错误信息晒晒。
nullpointer 很常见但也很好解决
AspireHouse 2009-12-24
  • 打赏
  • 举报
回复
是不是你的con先close了
AspireHouse 2009-12-24
  • 打赏
  • 举报
回复
把异常信息全贴出来啊
laker_914 2009-12-24
  • 打赏
  • 举报
回复
把错误贴出来就行了
Zero_Strong 2009-12-24
  • 打赏
  • 举报
回复
轨迹错误出现在 psmt.close();那,我确实看不出有什么问题
表的属性都在我 那个脚本中,不是也发出来了吗
godismydaughter 2009-12-24
  • 打赏
  • 举报
回复
int len = psmt.executeUpdate();
可能是这句有错。
  • 打赏
  • 举报
回复
目前代码没问题
amdgaming 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 haobaofufob 的回复:]
lz最好把异常轨迹粘上来
[/Quote]
....
haobaofufob 2009-12-24
  • 打赏
  • 举报
回复
lz最好把异常轨迹粘上来
dong502 2009-12-24
  • 打赏
  • 举报
回复
哪一行报啊 把错误贴上来 是不是你Person 没有相对应的属性啊
2到20个英文 2009-12-24
  • 打赏
  • 举报
回复
psmt = this.con.prepareStatement(sql); 是不是这里报空呀

你可以打个断点调试下

this.con 是否获得了连接

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧