发布网友
共3个回答
热心网友
0行更新,说明你没有id为1的这条数据。
然后报null,肯定是你主键没有获取到。你在sql窗口用select seq.nextval from al;查查看序列是否成功生成。如果成功,分析下,你这种jdbc方式写入,oracle不像sqlserver那样主键自动增长,你要再sql语句里面明明确确的要写出来id,否知他不会帮你插入主键值的。这就是为什么会报这个错误的原因,你要这样写insert into Dog(id,name,health,love ,strain) values(?,?,?,?,?),想像sqlserver那样就要写个触发器才能实现。
不知楼主明白了没有
热心网友
create sequence dog_seq
start with 1
increment by 1;
加上分号了吗?执行看看是否创建成功、只有主键非空的报NULL就是没值啊
select dog_seq.nextval from al;追问加了 还是一样 id就是主键 怎么会报null呢? 还有就是 start with 1 序列貌似没起作用 ID主键怎么还是从2开始??
追答你SQL写的是对的、代码里的SQL拼接漏了主键:
String sql = "insert into Dog(id, name,health,love ,strain)values(dog_seq.nextval,?,?,?,?)";
直接用Sequence插入比较好些。
热心网友
你为什么不把主键一起插入呢?用.nextval一起插入啊,。还有,如果使用很频繁的话,建议你写一个baseDao通用组件。以后不用这么麻烦,而且不用以出错。。希望对你有所帮助。