【问题标题】:Execute Initiating Statements After Connection Is Acquired获取连接后执行初始化语句
【发布时间】:2013-11-08 01:27:20
【问题描述】:

我正在使用 Spring JDBC + C3P0。我想将'sql_mode'变量设置为空字符串''。

首先我尝试在 JDBC url 中设置它:

DataSource dataSource = new DriverManagerDataSource(
    "jdbc:mysql://127.0.0.1/test?sessionVariables=sql_mode=''",
    "root", "password");

但它不起作用。

所以我想知道是否有办法在获取连接后立即执行一些语句,例如“SET sql_mode=''”。

谢谢。

【问题讨论】:

  • 在下面添加到 samlewis 的建议,如果您想要的只是一些初始化 sql,您可以使用已经实现的 ConnectionCustomizer,并将您的初始化 SQL 添加到您的配置中。请参阅 mchange.com/projects/c3p0/#user_extensions_to_configurationsgithub.com/swaldman/c3p0/blob/master/src/java/com/mchange/v2/… 这是最近添加到库中的内容,如果需要,请使用 c3p0-0.9.5-pre5 或更高版本。
  • @SteveWaldman 这个定制器好像只支持一个sql?
  • 是的。它主要用作使用用户定义的配置扩展的示例(并且当人们抱怨缺少 initSql 配置时,它也可以用来转移烦恼,某些池提供并且有时会要求该配置)。很容易修改以分号拆分。或者,我可以尝试添加对复合键的支持,以便您可以定义 initSql.statement1、initSql.statement2 等。

标签: java spring jdbc c3p0


【解决方案1】:

您可以使用 C3P0 实现 ConnectionCustomizerhttp://www.mchange.com/projects/c3p0/#connection_customizers

public class MyConnectionCustomizer extends AbstractConnectionCustomizer {

  public void onCheckOut( Connection c, String parentDataSourceIdentityToken ) { 
    //Run your statements here 
  }
{

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多