我可以使用 JDBC 驱动程序和以下 Java 代码连接到 Oracle 11.2 数据库:
import java.sql.*;
import javax.sql.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import oracle.jdbc.OracleTypes;
...
Connection conn=null;
// connect to database
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup("jdbc/myPool");
conn = ds.getConnection();
但现在我需要将选项 SetFloatAndDoubleUseBinary
设置为 true。请在此处查看第 4-16 页
http://docs.oracle.com/cd/E14072_01/java.112/e10589.pdf
所以我尝试从这里开始学习示例:
http://docs.oracle.com/cd/E11882_01/java.112/e16548/urls.htm
然后我将代码修改为:
import java.sql.*;
import java.util.Properties;
import javax.sql.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import oracle.jdbc.OracleTypes;
...
Connection conn=null;
// set connection properties
Properties info = new java.util.Properties();
info.put ("SetFloatAndDoubleUseBinary","true");
// connect to database
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup("jdbc/myPool");
conn = ds.getConnection(info);
我得到以下编译错误:
myClass.java:1145: cannot find symbol
symbol : method getConnection(java.util.Properties)
location: interface javax.sql.DataSource
conn = ds.getConnection(info);
^
有人知道我如何在这里正确设置 SetFloatAndDoubleUseBinary
吗?
更新 1
更改为:
import java.sql.*;
import java.util.Properties;
import javax.sql.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import oracle.jdbc.OracleTypes;
import oracle.jdbc.*; // NEW
import oracle.jdbc.pool.*; // NEW
...
Connection conn=null;
// set connection properties
Properties info = new java.util.Properties();
info.put ("SetFloatAndDoubleUseBinary","true");
// connect to database
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup("jdbc/myPool");
((OracleDataSource)ds).setConnectionProperties(info); // NEW
conn = ds.getConnection(); // NEW
给出以下运行时错误:
堆栈跟踪:java.lang.ClassCastException:com.sun.gjc.spi.jdbc40.DataSource40 无法转换为 oracle.jdbc.pool.OracleDataSource
最佳答案
DataSource
通常配置在应用服务器上。例如,在 Glassfish
中,您可以像这样在管理控制台中设置此属性:
然后打电话
ds.getConnection()
来自您的客户端代码。
编辑:
如果你想访问javax.sql.DataSource
的实现类,你应该使用DataSource#unwrap方法而不是简单的转换。
例如:
DataSource ds = (DataSource) ctx.lookup("jdbc/MyPool");
OracleDataSource oracleDS = ds.unwrap(OracleDataSource.class)
确保您的 jdbc 驱动程序 jar 位于类路径中。
但是如果您将来希望切换到另一个数据库供应商,那么您的代码将是不可移植的。
编辑 2:
此外,对于 Glassfish
,请参阅 Configuring Specific JDBC Connection Pool Features Oracle 管理指南。
关于java - 如何设置连接属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12148976/