我正在编写一个Java JDBC数据库应用程序,它连接到Oracle 11g数据库并使用c3p0连接池.出于示例的目的,我有3个数据库用户DEFAULT,TOM和BILL. c3p0使用DEFAULT数据库用户打开所有池化连接.我想从c3p0中检索一个池连接,并将Connection的用户更改为BILL而不是DEFAULT.是否可以在JDBC中执行此操作而不与数据库建立新连接?
我已经尝试过以下操作:
connect BILL/password;
java.sql.sqlException: ORA-00900: invalid sql statement
还有其他选择吗?是否有与上下文设置或切换有关的内容可以促进我正在尝试做的事情?
谢谢!
解决方法:
经过昨天的研究,我发现解决方案是使用Oracle代理身份验证.此解决方案不在JDBC规范中.但是,Oracle提供了实现此类解决方案的钩子.打开代理连接如下所示:
import oracle.jdbc.OracleConnection;
//Declare variables
String url = "...";
String username = "...";
String password = "...";
//Create the Connection
Connection conn = DriverManager.getConnection(url, username, password);
//Set the proxy properties
java.util.Properties prop = new java.util.Properties();
prop.put(OracleConnection.PROXY_USER_NAME, "BILL");
prop.put(OracleConnection.PROXY_USER_PASSWORD, "password");
//Cast the Connection to an OracleConnection and create the proxy session
((OracleConnection)conn).openProxySession(OracleConnection.PROXYTYPE_USER_NAME, prop);
/* The Connection credentials have Now been changed */
如果还有其他细微差别,我不会感到惊讶,但这是一个良好的开端.谢谢大家的帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。