gpt4 book ai didi

Java Oracle 连接断开

转载 作者:行者123 更新时间:2023-11-28 22:28:54 25 4
gpt4 key购买 nike

我正在实现学校项目。我们必须在 Java EE 和 Oracle 中创建自己的 ORM。我已经尝试了两种数据库连接方式:

  1. DriverManager.getConnection(DSN, USER, PASSWORD);
  2. 上下文 initContext = new InitialContext();
    上下文 envContext = (上下文)initContext.lookup("java:comp/env");
    this.dataSource = (DataSource)envContext.lookup("jdbc/isets");

对我来说,一种方法比另一种方法效果更差。我有一个实体(表行),这个实体有一个包含另一个实体列表的属性。当我试图打印出这些实体时,有时看起来数据库连接断开了,因为一些实体没有加载。几乎每次都有几个打印不出来,有时一切正常(无法预测哪些打印不出来或什么时候可以)。

当我使用第一种连接方法时,它适用于很少的数据库查询。如果我试图从数据库中选择例如 10 个对象(在 10 个查询中),则会显示 Oracle 服务器的异常。另一方面,当我使用第二种方法时,会出现更多问题。第一个是几乎每次我运行该应用程序时,它都会无限加载(至少 10 分钟)。有时它加载正确,但根据第一种方法,更多的“子实体”加载不正确。

我想使用连接池,但我不知道问题出在哪里。我跟着这个"HOW TO" ,但它不想工作 :-(。

这是我的 context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ISETS-TOMCAT">
<Resource name="jdbc/isets"
auth="Container"
type="javax.sql.DataSource"

testWhileIdle="true"
testOnBorrow="true"
testOnReturn="false"
validationQuery="SELECT 1 FROM DUAL"

maxActive="15"
maxIdle="5"
maxWait="-1"

removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"

driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:XE"
username="SYSTEM"
password="admin"

defaultTransactionIsolation="SERIALIZABLE" />
</Context>

这是我的 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
<servlet-name>Controller</servlet-name>
<servlet-class>isets.controllers.Controller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>/Controller</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>60</session-timeout>
</session-config>
<resource-ref>
<description>ISETS Oracle pool</description>
<res-ref-name>jdbc/isets</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>

下面是建立连接的代码:

Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:comp/env");

dataSource = (DataSource)envContext.lookup("jdbc/isets");

connection = dataSource.getConnection();
connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);

我做错了什么吗?你能帮忙吗?谢谢,再见。

最佳答案

因为您使用的是 Connection.TRANSACTION_SERIALIZABLE,所以从一个连接进行的更改可能在另一个连接中不可见。我会尝试删除此设置。

关于Java Oracle 连接断开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30222254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com