2009-11-09 82 views
3

正在使用此连接字符串从Java连接到MySQL:Mysql的会话变量

jdbc:mysql://localhost:3306/db?noDatetimeStringSync=true&useUnicode=yes&characterEncoding=UTF-8

是有可能设置会话变量中的字符串,使SET UNIQUE_CHECKS=0;会在连接到服务器时执行?明显

jdbc:mysql://localhost:3306/db?noDatetimeStringSync=true&useUnicode=yes&characterEncoding=UTF-8&unique_checks=0

似乎不起作用,基于这样的事实,

“的jdbc:mysql的://本地主机:3306/DB noDatetimeStringSync =真& useUnicode = yes & characterEncoding = UTF-8 & unique_checks = blahblah`

不会产生任何错误。

干杯!

回答

1

因此,您的问题更多“我如何在Java中串接字符串?” ?

如果是这样,那么就使用+操作:

int uniqueChecks = 0; // Assign session variable here. 
String url = "jdbc:mysql://localhost:3306/db?unique_checks=" + uniqueChecks; 

另外,您也可以使用String#format()其中可以使用%d模式表示十进制:

int uniqueChecks = 0; // Assign session variable here. 
String url = String.format("jdbc:mysql://localhost:3306/db?unique_checks=%d", uniqueChecks); 
1

您可以使用Statement.execute()几乎可以运行数据库理解的所有语句,包括这样的SET-声明。

使用URL参数或专用方法的优点是,JDBC驱动程序实际上知道该选项已设置并可以做出相应的反应。这对于这个特定的选项可能有用或不必要,但对其他选项至关重要(例如用这样的语句来切换自动提交是一个非常糟糕的主意)。

0

BalusC,感谢您的回复!实际上我需要在Talend etl工具(它本身就是一个java代码生成器)中做到这一点,我唯一可以编辑的行是“jdbc:mysql:// localhost:3306/db?noDatetimeStringSync = true & useUnicode = yes & characterEncoding = UTF-8" 的字符串,它被翻译成这个java代码:

String url_tMysqlBulkExec_1 = "jdbc:mysql://" 
+ "localhost" + 
":" 
+ "3306" 
+ "/" 
+ "db" 
+ "?" 
+ "noDatetimeStringSync=true&useUnicode=yes&characterEncoding=UTF-8&unique_checks=0"; 

是那样的限制,抱歉没有指出这一点早。

+0

哦确定。我只想说,你应该发布'评论'并编辑你的主题开始,而不是通过这种方式发布这个回复:)把这个论坛当作是一个博客。 – BalusC 2009-11-09 17:29:05

0

根据mysql docs,没有可能设置unique_checks设置,我想我需要寻找除URL参数之外的其他解决方案(Joachim,感谢提醒我这些东西被称为“URL参数” - 帮助了很多而谷歌搜索:)

7

如何使用sessionVariables:

jdbc:mysql://localhost:3306/db?noDatetimeStringSync=true&useUnicode=yes&characterEncoding=UTF-8&sessionVariables=unique_checks=0