使用DataSource设置JDBC属性

时间:2015-07-13 13:14:11

标签: java mysql jdbc 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"))

如何使用DataSource设置此属性?

3 个答案:

答案 0 :(得分:1)

如果将数据源转换为您正在使用的特定实现,您将能够使用特定于您正在使用的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

答案 1 :(得分:0)

添加到@aguibert答案,您也可以在全局级别配置相同内容,方法是修改url名称的Resource,如下所示:

<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"/> 

答案 2 :(得分:0)

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

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检查答案以获取更多信息。