我可以使用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)
确保你在classpath上有你的jdbc驱动程序jar.
但是,如果您希望将来切换到另一个数据库供应商,那么您的代码将是不可移植的.
编辑2:
另外,对于Glassfish,请参阅Oracle管理指南的Configuring Specific JDBC Connection Pool Features.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。