无法从 Glassfish 池连接到外部 Oracle 数据库,但我可以从 DBeaver
Can't connect to external Oracle database from Glassfish pool, but I can from DBeaver
首先,如果我说错了什么,我很抱歉,英语不是我的母语。此外,出于安全(和保密协议)原因,我正在更改真实姓名
每当我尝试使用 Glassfish 从我的 Java 项目连接到使用 URL "jdbc:oracle:thin:@//HOST:1521/SID"、DBUSER=auser、DBPASSWORD=apass123 的外部数据库时,它会抛出
ORA-01017: invalid username/password; logon denied
以下是我配置 Glassfish 池的方式:
DataSource and Driver
URL, DBUSER and DBPASSWORD
Glassfish 的 domain.xml
<jdbc-connection-pool datasource-classname="oracle.jdbc.pool.OracleDataSource" name="NamePool" res-type="javax.sql.DataSource">
<property name="URL" value="jdbc:oracle:thin:@//HOST:1521/SID"></property>
<property name="DBPASSWORD" value="apass123"></property>
<property name="DBUSER" value="auser"></property>
</jdbc-connection-pool>
<jdbc-resource pool-name="NamePool" jndi-name="jdbc/jndiORA"></jdbc-resource>
我的项目 connect.java,在 dataSource.getConnection()
处抛出错误
import javax.sql.DataSource;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public static void Connect(String query) throws NamingException {
InitialContext ctx = new InitialContext();
DataSource dataSource = (DataSource) ctx.lookup("jdbc/jndiORA");
try (Connection conn = dataSource.getConnection()) {
try (Statement stmt = conn.createStatement()) {
ResultSet rs = stmt.executeQuery(query);
}
}
}
但是当我尝试使用相同的凭据连接 DBeaver 时,它确实有效!
DBeaver Oracle Connection Settings
DBeaver connection, shows the schemas and can do queries
尝试了类似主题中提供的一些答案,没有得到肯定的结果
- 使用 "auser" 和 "apass123" 代替 auser 和 apass123
- 用 \(\auser 和 \apass)转义第一个字符
- 已下载 ojdbc6.jar
的最新版本
我不是外部数据库的管理员,所以无法尝试 "alter system set sec_case_sensitive_logon" 解决方案
非常感谢你所做的一切!
属性应该是 user
和 password
,而不是 dbuser
和 dbpassword
<jdbc-connection-pool datasource-classname="oracle.jdbc.pool.OracleDataSource" name="NamePool" res-type="javax.sql.DataSource">
<property name="URL" value="jdbc:oracle:thin:@//HOST:1521/SID"></property>
<property name="USER" value="auser"></property>
<property name="PASSWORD" value="apass123"></property>
</jdbc-connection-pool>
此外 /SID
实际上是 /service-name
,因此请检查它是否正确,并且您正在尝试向右 CDB/PDB - 尽管来自 DBeaver 的屏幕截图有点令人困惑,因为似乎在连接面板中指定了 SID,但在第二张图片中显示了服务名称 URL。
检查您的连接 URL(示例:jdbc:oracle:thin:@myhost:1521/myorcldbservicename)。始终使用服务名称而不是 SID。此外,使用普通 Java 程序 DataSourceSample.java 验证您的连接是否正常工作。这将消除任何与数据库相关的问题。
首先,如果我说错了什么,我很抱歉,英语不是我的母语。此外,出于安全(和保密协议)原因,我正在更改真实姓名
每当我尝试使用 Glassfish 从我的 Java 项目连接到使用 URL "jdbc:oracle:thin:@//HOST:1521/SID"、DBUSER=auser、DBPASSWORD=apass123 的外部数据库时,它会抛出
ORA-01017: invalid username/password; logon denied
以下是我配置 Glassfish 池的方式:
DataSource and Driver
URL, DBUSER and DBPASSWORD
Glassfish 的 domain.xml
<jdbc-connection-pool datasource-classname="oracle.jdbc.pool.OracleDataSource" name="NamePool" res-type="javax.sql.DataSource">
<property name="URL" value="jdbc:oracle:thin:@//HOST:1521/SID"></property>
<property name="DBPASSWORD" value="apass123"></property>
<property name="DBUSER" value="auser"></property>
</jdbc-connection-pool>
<jdbc-resource pool-name="NamePool" jndi-name="jdbc/jndiORA"></jdbc-resource>
我的项目 connect.java,在 dataSource.getConnection()
import javax.sql.DataSource;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public static void Connect(String query) throws NamingException {
InitialContext ctx = new InitialContext();
DataSource dataSource = (DataSource) ctx.lookup("jdbc/jndiORA");
try (Connection conn = dataSource.getConnection()) {
try (Statement stmt = conn.createStatement()) {
ResultSet rs = stmt.executeQuery(query);
}
}
}
但是当我尝试使用相同的凭据连接 DBeaver 时,它确实有效!
DBeaver Oracle Connection Settings
DBeaver connection, shows the schemas and can do queries
尝试了类似主题中提供的一些答案,没有得到肯定的结果
- 使用 "auser" 和 "apass123" 代替 auser 和 apass123
- 用 \(\auser 和 \apass)转义第一个字符
- 已下载 ojdbc6.jar 的最新版本
我不是外部数据库的管理员,所以无法尝试 "alter system set sec_case_sensitive_logon" 解决方案
非常感谢你所做的一切!
属性应该是 user
和 password
,而不是 dbuser
和 dbpassword
<jdbc-connection-pool datasource-classname="oracle.jdbc.pool.OracleDataSource" name="NamePool" res-type="javax.sql.DataSource">
<property name="URL" value="jdbc:oracle:thin:@//HOST:1521/SID"></property>
<property name="USER" value="auser"></property>
<property name="PASSWORD" value="apass123"></property>
</jdbc-connection-pool>
此外 /SID
实际上是 /service-name
,因此请检查它是否正确,并且您正在尝试向右 CDB/PDB - 尽管来自 DBeaver 的屏幕截图有点令人困惑,因为似乎在连接面板中指定了 SID,但在第二张图片中显示了服务名称 URL。
检查您的连接 URL(示例:jdbc:oracle:thin:@myhost:1521/myorcldbservicename)。始终使用服务名称而不是 SID。此外,使用普通 Java 程序 DataSourceSample.java 验证您的连接是否正常工作。这将消除任何与数据库相关的问题。