繁体   English   中英

如何通过SQL脚本,JDBC或Spring JdbcTemplate在MySQL中创建函数?

[英]How to create a function in MySQL from an SQL script, JDBC or Spring JdbcTemplate?

我正在寻找一种最好在MySQL中从脚本( 从Java执行 )创建函数的方法,但是标准JDBC或Spring的JdbcTemplate也可以工作。

我已经成功地使用以下命令从mysql命令行控制台成功创建了该函数:

DELIMITER $$
CREATE FUNCTION test() RETURNS double DETERMINISTIC
BEGIN
  RETURN 63;
END$$

但是由于DELIMITER使用的不是有效的SQL语法,因此从脚本运行它时会遇到异常:

[42000][1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$

当我尝试使用Spring JDBC模板创建它时

jdbcTemplate.execute("CREATE FUNCTION some() RETURNS double DETERMINISTIC\n" +
            "BEGIN\n" +
            "RETURN 63;\n" +
            "END;");

我得到以下异常:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 
'CREATE FUNCTION some() RETURNS double DETERMINISTIC
BEGIN
RETURN 63;
END' at line 1`

有人知道怎么做吗?

您可以使用jdbc来执行此操作,但是在脚本上不要声明任何定界符,然后将自己的分隔符放在单独的函数或过程声明中,脚本将类似于:

CREATE FUNCTION do_something() RETURNS double DETERMINISTIC
BEGIN
  RETURN 63;
END;;
CREATE FUNCTION do_other_thing() RETURNS double DETERMINISTIC
BEGIN
  RETURN 63;
END;;

将您的sql脚本放入StringBuilder后,使用的代码将像这样

 String[] sql = stringBuilder.toString().split(";;");
    for (int i = 0; i < sql.length; i++) {
                     statment.executeUpdate(sql[i]);
                }

希望对您有帮助!

使用Spring Framework时,请使用Hibernate Framework连接数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM