0

できればスクリプト( Javaから実行)からMySQLで関数を作成する方法を探していますが、標準の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 に答える