0

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

有谁知道该怎么做?

4

2 回答 2

2

您可以使用 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]);
                }

我希望这对您有帮助!

于 2012-10-24T15:45:45.010 回答
-2

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

于 2012-08-15T06:24:35.937 回答