【问题标题】:How to create a function in MySQL from an SQL script, JDBC or Spring JdbcTemplate?如何从 SQL 脚本、JDBC 或 Spring JdbcTemplate 在 MySQL 中创建函数?
【发布时间】:2012-08-14 19:36:20
【问题描述】:

我正在寻找一种在 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`

有人知道怎么做吗?

【问题讨论】:

  • 你找到解决办法了吗?

标签: java mysql sql jdbc jdbctemplate


【解决方案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]);
                }

我希望这会有所帮助!

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 当然没问题,但在这种情况下真的对我有帮助吗?
    • 你有什么论据来支持这个明确的声明吗?
    猜你喜欢
    • 2016-04-15
    • 2012-04-13
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2019-01-08
    相关资源
    最近更新 更多