我需要在Spring-Standalone应用程序中更改Oraclesession的NLS_NUMERIC_CHARACTERS。我正在使用JdbcTemplates:
logger.info("Setting NLS-Parameter.");
jdbcTemplate.execute("alter session set NLS_NUMERIC_CHARACTERS='.,'");
logger.info(jdbcTemplate.queryForObject("select value from nls_session_parameters where parameter = 'NLS_NUMERIC_CHARACTERS'", String.class));
但它不会改变:
Setting NLS-Parameter.
,.
我以编程方式初始化JdbcTemplate:
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(ORACLE_JDBC_DRIVER);
dataSource.setUrl(url);
dataSource.setUsername(schema);
dataSource.setPassword(password);
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);
所有其他语句均正常运行。仅更改会话不起作用。数据库是Oracle 18 Standart。
DriverManagerDataSource
数据源从每个getConnection调用返回一个新的Connection。
因此,DriverManagerDataSource
,JdbcTemplate#execute(StatementCallback<T> action)
和JdbcTemplate#execute(StatementCallback<T> action)
最终都会被调用,每次执行都会获得JdbcTemplate#execute(final String sql)
。
JdbcTemplate#queryForObject(String sql, Class<T> requiredType)
语句更改session的newly created connection,因此仅适用于执行该语句的连接。所做的更改不会影响其他连接。