使用 DataSource 设置 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"))
如何使用 DataSource 设置此 属性?
如果您将数据源转换为您正在使用的特定实现,您将能够使用所有特定于您正在使用的 jdbc 驱动程序的 get/set 方法。
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
//...
MysqlDataSource mysql = (MysqlDataSource) context.lookup("jdbc/MySQLDataSource");
mysql.setRewriteBatchedStatements(true);
Connection conn = mysql.getConnection();
参考这个link: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&useUnicode=true&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 的回答以获取更多信息。
我正在使用 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 设置此 属性?
如果您将数据源转换为您正在使用的特定实现,您将能够使用所有特定于您正在使用的 jdbc 驱动程序的 get/set 方法。
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
//...
MysqlDataSource mysql = (MysqlDataSource) context.lookup("jdbc/MySQLDataSource");
mysql.setRewriteBatchedStatements(true);
Connection conn = mysql.getConnection();
参考这个link: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&useUnicode=true&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 的回答以获取更多信息。