我发现我的网络服务器出现了奇怪的行为。我对Java数据库的返回输出没有反映出我对数据库所做的更改。
我的servlet使用JDBC连接池连接到Oracle数据库。
以下是设置:
<JDBCCONNECTIONPOOL name="mypool" datasourceclassname="oracle.jdbc.pool.OracleDataSource" steadypoolsize="8"
maxpoolsize="32" poolresizequantity="2" idletimeout="300" maxwaittime="60000"
connectionvalidationrequired="off" connectionvalidationmethod="auto-commit"
validationtablename="" failallconnections="off" transactionisolationlevel="serializable"
isolationlevelguaranteed="off">
要查看我的表格更改,我需要重新启动我的网络服务器。
这是一些小故障,还是我需要更改配置?
我确信我已经在SQL Developer上提交了所有更改。
由于
P.S。一个解释将被赞赏(奖励积分!)
答案 0 :(得分:1)
我知道你有:
transactionisolationlevel="serializable"
如果这是映射到oracle连接,你看到的行为就是我所期望的。
即。即使其他会话提交,在与数据库的java连接提交之前,您也不会看到该行。
例如,使用2个sql * plus会话。
SESSION 1 SESSION 2
SQL> create table foobar(id number); SQL> alter session set isolation_level=serializable;
Table created. Session altered.
SQL> insert into foobar values (1); SQL> select * from foobar;
1 row created. no rows selected
预期结果到目前为止,第2次会议无法看到该行。现在我们在第1节中提交:
SQL> commit;
Commit complete.
SQL> select * from foobar;
no rows selected
但是会话2仍然无法看到它。
SQL> commit;
Commit complete.
SQL> alter session set isolation_level=serializable;
Session altered.
SQL> select * from foobar;
ID
----------
1
但是现在它可以一次提交session2。