前言
我在外面接私活还是在公司做开发的时候我们可能使用的数据库没有DDL权限,那么说到没有DDL权限什么是没有DDL权限呢就是你没有权限去改数据库中的字段等等,只有通过公司的平台来进行管理,咱们废话不多说直接说重点,比如说我们在平台管理数据库的时候点的库表ID是自增的但是一写多表的添加等等,都无法把你所关联的ID获取到这样的话就会报空指针的错误,以下是我的一个解决方案:
设置序列
那么说到这里可能不懂什么是序列,序列呢就是相当于数据库ID自增的生成器,因为我用的是Oracle模式的数据库,我给大家举个例子:
假如你创建了序列:
CREATE SEQUENCE QF1205_SEQ
START WITH 1
INCREMENT BY 1;
意思是:
- 从 1 开始
- 每次 +1
- 永远递增
用法:
每次你执行:
SELECT QF1205_SEQ.NEXTVAL FROM DUAL;
数据库就会:
|调用次数|返回值|
|:-:|:-:|
|第一次|1|
|第二次|2|
|第三次|3|
|第四次|4|
⚠ 注意:它不会回退。
在你项目里是干嘛的?
你现在表:
QF1205
有个主键字段:
FWID
这个字段是 NOT NULL。
但你插入时没给值。
所以数据库报:
ORA-01400 不能插入 NULL
正确做法
插入时要这样:
INSERT INTO QF1205 (FWID, FWBM, ...)
VALUES (QF1205_SEQ.NEXTVAL, 'xxx', ...);
FWID 就自动生成了。
MyBatis里怎么用?
就是你现在在写的:
<selectKey keyProperty="FWID"
resultType="long"
order="BEFORE">
SELECT QF1205_SEQ.NEXTVAL FROM DUAL
</selectKey>
意思是:
1️⃣ 先执行序列
2️⃣ 把值赋给 FWID
3️⃣ 再执行 insert