簡體   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