未在应用程序的数据库列中设置缺省值

时间:2013-03-15 14:24:25

标签: java database oracle jdbc websphere

我在websphere中运行了一个应用程序。我已在服务器上配置数据源并从jndi获取数据源。 我正在使用Spring Jdbc,并且运行了几个select语句。

现在我有一个从'toad'内部成功运行的insert语句,但是同一个insert语句从应用程序失败。

java.sql.SQLException: ORA-01400: cannot insert NULL into ("SCHEMA1"."XYZ"."CREATED_BY")

CREATED_BY is a VARCHAR2 (30 Byte) with DEFAULT set to 'SYS_CONTEXT ('USERENV', 'OS_USER')'

注意:我没有在insert语句中指定列。我的发言如下:

Insert into SCHEMA1.XYZ(some_column, another_column, is_active) values ('sadsf','sdfsdfsdf','Y')  

我正在使用jdbcTemplate基本上做:

jdbcTemplate.update(theQuery);

我正在配置我的数据源,如下所示:

<beans:bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <beans:property name="jndiName" value="jdbc/MyDatasource" />
</beans:bean>

现在我希望这可以来自设置JAAS时使用的用户名 - 数据源的J2C身份验证数据。

我不想指定所有可以使用每个查询轻松自动填充的审核列。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

来自SYS_CONTEXT

  

命名空间USERENV的预定义参数
  OS_USER启动数据库会话的客户端进程的操作系统用户名。

还有

  

CLIENT_IDENTIFIER返回应用程序通过DBMS_SESSION.SET_IDENTIFIER过程,OCI属性OCI_ATTR_CLIENT_IDENTIFIER或Java类Oracle.jdbc.OracleConnection.setClientIdentifier设置的标识符。各种数据库组件使用此属性来标识作为同一数据库用户进行身份验证的轻量级应用程序用户。

     

SESSION_USER用于对当前用户进行身份验证的数据库用户名。该值在整个会话期间保持不变。

我不熟悉Oracle身份验证,但后者中的一个可能更适合您的任务。