微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 如何设置连接属性?

我可以使用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] 举报,一经查实,本站将立刻删除。

相关推荐