JDBC字符串中的Mysql会话变量

时间:2009-11-09 16:26:19

标签: java mysql jdbc

使用此连接字符串从java连接到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 /分贝noDatetimeStringSync =真安培;了useUnicode = YES&安培;的characterEncoding = UTF-8和; UNIQUE_CHECKS = blahblah`

不会产生任何错误。

干杯!

5 个答案:

答案 0 :(得分:8)

如何使用sessionVariables:

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

答案 1 :(得分: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);

答案 2 :(得分:1)

您可以使用Statement.execute()来运行数据库理解的每个语句,包括这样的SET语句。

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

答案 3 :(得分: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";

这是限制,抱歉没有提前指出。

答案 4 :(得分:0)

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