2012-08-14 35 views
0

我正在尋找一種方法在MySQL中創建函數,最好是從腳本(從Java執行),但標準JDBC或Spring的JdbcTemplate也可以。如何從SQL腳本,JDBC或Spring JdbcTemplate在MySQL中創建函數?

我已經成功地使用成功創建從mysql命令行控制檯功能:

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

但由於沒有一個有效的SQL語法DELIMITER我從腳本運行時,它會得到一個異常:

[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 $$

當我嘗試從春天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` 

有誰知道如何去?

+0

您是否找到了解決方案? – 2017-10-20 15:22:57

回答

-2

當您使用Spring Framework時,請使用Hibernate Framework來連接數據。

+0

當然,這沒有問題,但這真的會幫助我在這種情況下? – Johan 2012-08-15 12:42:05

+0

你有任何參數來備份這個權威性聲明嗎? – 2013-01-08 22:35:06

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]); 
       } 

我希望這幫助!