如何从 SQL 脚本、JDBC 或 Spring JdbcTemplate 在 MySQL 中创建函数?
Posted
技术标签:
【中文标题】如何从 SQL 脚本、JDBC 或 Spring JdbcTemplate 在 MySQL 中创建函数?【英文标题】:How to create a function in MySQL from an SQL script, JDBC or Spring JdbcTemplate? 【发布时间】: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`
有人知道怎么做吗?
【问题讨论】:
你找到解决办法了吗? 【参考方案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 连接数据。
【讨论】:
当然没问题,但在这种情况下真的对我有帮助吗? 你有什么论据来支持这个明确的声明吗?以上是关于如何从 SQL 脚本、JDBC 或 Spring JdbcTemplate 在 MySQL 中创建函数?的主要内容,如果未能解决你的问题,请参考以下文章
Spring JDBC 在运行 SQL 脚本时无法处理 DECLARE 语句