繁体   English   中英

使用数据源设置JDBC属性

[英]Setting JDBC Properties Using DataSource

我正在使用DataSource对象连接到mysql数据库。

DataSource mysql = (DataSource) context.lookup("jdbc/MySQLDataSource");
Connection conn = mysql.getConnection();

我要设置属性

rewriteBatchedStatements=true

当我做一些批量上传时。 当人们使用如下所示的驱动程序管理器时,我已经看到了如何执行此操作的示例:

String myConnectionString =
    "jdbc:mysql://localhost:3307/mydb?" +
    "useUnicode=true&characterEncoding=UTF-8" +
    "&rewriteBatchedStatements=true";
try (Connection con = DriverManager.getConnection(myConnectionString, "root", "whatever"))

如何使用数据源设置此属性?

如果将数据源强制转换为正在使用的特定实现,则将能够使用特定于所使用的jdbc驱动程序的所有get / set方法。

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
//...
MysqlDataSource mysql = (MysqlDataSource) context.lookup("jdbc/MySQLDataSource");
mysql.setRewriteBatchedStatements(true);
Connection conn = mysql.getConnection();

请参阅以下链接以供参考: http : //dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html

除了@aguibert答案,您还可以在全局级别配置相同的内容,方法是编辑Resource名称的url ,如下所示:

<Resource name="jdbc/MySQLDataSource" auth="Container" 
               type="javax.sql.DataSource" 
               driverClassName="com.mysql.jdbc.Driver" 
               url="jdbc:mysql://localhost:3307/mydb?rewriteBatchedStatements=true&amp;useUnicode=true&amp;characterEncoding=UTF-8" 
               username="root" 
               password="root" 
               maxActive="100" 
               maxIdle="20" 
               maxWait="10000"/> 

我已通过执行以下步骤解决了此问题:

DataSource datasource = (DataSource) context.lookup("jdbc/MySQLDataSource");
MysqlDataSource mysql_datasource = datasource.unwrap(MysqlDataSource.class);
mysql_datasource.setRewriteBatchedStatements(true);
Connection conn = mysql.getConnection();

一切都顺利进行。 需要进行此额外的unwrap()调用,因为我在glassfish上尝试了此操作。 请在下面查看aguibert的答案以获取更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM