环境:oracle 11g
java :sdk 1.5表 t_sys_user nm_sid int,st_name varchar2(10),nm_status numeric
其中nm_status 有设置默认值为1
sql=insert into t_sys_user (nm_sid,st_name,nm_status) values(seq.nextval,?,?);
因为考虑是做批量插入,所以sql不想变化,就用这个sql
然后取集合里
preparedStatement.setString(1,'值')
preparedStatement.setInt(2,'值')
因为值可能会空,所以当空值时
setNull(2,Types.varchar)或setNull(2,Types.Numeric);//因为取字段的类型还有些麻烦就先简单这样放
当nm_status是空值时,插入的数据库里该字段也是空
有没有简单点方法处理,不要又像取主键一样还要先查表
java :sdk 1.5表 t_sys_user nm_sid int,st_name varchar2(10),nm_status numeric
其中nm_status 有设置默认值为1
sql=insert into t_sys_user (nm_sid,st_name,nm_status) values(seq.nextval,?,?);
因为考虑是做批量插入,所以sql不想变化,就用这个sql
然后取集合里
preparedStatement.setString(1,'值')
preparedStatement.setInt(2,'值')
因为值可能会空,所以当空值时
setNull(2,Types.varchar)或setNull(2,Types.Numeric);//因为取字段的类型还有些麻烦就先简单这样放
当nm_status是空值时,插入的数据库里该字段也是空
有没有简单点方法处理,不要又像取主键一样还要先查表
那就直接按集合里的值是否为空做判断,如果空就调用setNull(2,Types.Numeric),非空就setObject就好了
insert into t_sys_user (nm_sid,st_name) values(seq.nextval,?);
这样写我知道是会自动赋值的。
但我考虑是要批量操作,preparedStatement就按字段最多的sql生成一个,
要不然就是几个preparedStatement,所以sql是固定的
sql=insert into t_sys_user (nm_sid,st_name,nm_status) values(seq.nextval,?,?);
preparedStatement.setString(1,'值')
preparedStatement.setInt(2,('值'==null)? '1' : '值'); //null时设置成缺省值
能不能像找主键一样conn.getMetaData().getPrimaryKeys(catalog, schema, table);
我好像没找到这样的方法。
真不行我就在oracle里查user_tab_columns里找默认值
DatabaseMetaData当时调用的时候,看到一大段字段名,也想不到去查api的,其实getColumns()里都有描述。
COLUMN_DEF String => 默认值(可为 null)。
不过日期型会返回(getdate()),还要再判断一下,唉。
谢谢大家,结贴了
not null