我可以使用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();
Run Code Online (Sandbox Code Playgroud)
但是现在我需要将选项设置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);
Run Code Online (Sandbox Code Playgroud)
并且出现以下编译错误:
myClass.java:1145: cannot find symbol
symbol : method getConnection(java.util.Properties)
location: interface javax.sql.DataSource
conn = ds.getConnection(info);
^
Run Code Online (Sandbox Code Playgroud)
有人知道我该如何正确设置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
Run Code Online (Sandbox Code Playgroud)
给出以下运行时错误:
stack trace: java.lang.ClassCastException: com.sun.gjc.spi.jdbc40.DataSource40 cannot be cast to oracle.jdbc.pool.OracleDataSource
这种形式getConnection()是特定于更通用的接口的OracleDataSource,并且不存在于更通用的DataSource接口中。
解决办法很简单,替换这一行:
DataSource ds = (DataSource)context.lookup("jdbc/myPool");
Run Code Online (Sandbox Code Playgroud)
有了这个:
OracleDataSource ds = (OracleDataSource)context.lookup("jdbc/myPool");
Run Code Online (Sandbox Code Playgroud)
当然,这意味着从现在开始您的应用程序将仅适用于 Oracle 数据库。根据您的需要,这可能是也可能不是一个好主意。
| 归档时间: |
|
| 查看次数: |
13663 次 |
| 最近记录: |