如何从 SQL 脚本、JDBC 或 Spring JdbcTemplate 在 MySQL 中创建函数?

     2023-03-27     172

关键词:

【中文标题】如何从 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 连接数据。

【讨论】:

当然没问题,但在这种情况下真的对我有帮助吗? 你有什么论据来支持这个明确的声明吗?

Spring JDBC 在运行 SQL 脚本时无法处理 DECLARE 语句

】SpringJDBC在运行SQL脚本时无法处理DECLARE语句【英文标题】:SpringJDBCcannothandleDECLAREstatementwhenrunningSQLScript【发布时间】:2020-02-1212:11:24【问题描述】:我有一个带有OracleSQL数据库的SpringCRUD应用程序。我有几个集成测试并使用@Sql... 查看详情

jsp页面前台用jdbc如何获取sql数据库里的数据。

...的。求指导。用什么方法。在jsp页面的前台中获取数据。如何在前台显示数据库里的某一个表。1、在后台写一个JDBC方法,从数据库中查询出数据来,封装到一个集合中,比如List或Map,然后放到request中,在前台直接从request获取... 查看详情

从 Spring JDBC 模板执行 SQL 文件

】从SpringJDBC模板执行SQL文件【英文标题】:ExecuteSQLfilefromSpringJDBCTemplate【发布时间】:2015-08-2406:53:29【问题描述】:我正在尝试编写一些代码来读取SQL文件(多个CREATETABLE语句,由;分隔)并执行所有语句。在纯JDBC中,我可以这... 查看详情

如何使用 JDBC 执行 .sql 脚本文件 [重复]

】如何使用JDBC执行.sql脚本文件[重复]【英文标题】:Howtoexecute.sqlscriptfileusingJDBC[duplicate]【发布时间】:2010-12-0215:00:10【问题描述】:可能重复:Runninga.sqlscriptusingMySQLwithJDBC我有一个包含40-50个SQL语句的SQL脚本文件。是否可以使... 查看详情

无法从 .sql 文件创建存储过程 - JDBC

...目期间执行一个.sql文件。谷歌建议的2个选项:手动解析脚本(通过拆分“;”字符)或使用ant.我更喜欢简单的方法,所以ant是一个不错的选择。这是我用来设置数据库的代码:publicvoid 查看详情

从 Camel 和 Spring Boot 到 MS SQL Server 的 JDBC

】从Camel和SpringBoot到MSSQLServer的JDBC【英文标题】:JDBCfromCamelandSpringBoottoMSSQLServer【发布时间】:2021-08-2717:57:04【问题描述】:我正在尝试使用SpringBoot从Camel访问SQLServer,但我收到错误消息“com.bw.ReportRouter中的字段数据源需要\'org... 查看详情

Jmeter 从文件运行 SQL 脚本

】Jmeter从文件运行SQL脚本【英文标题】:JmeterRunSQLscriptfromfile【发布时间】:2017-08-0215:13:58【问题描述】:我正在尝试在JmeterSetUp线程中运行几个SQL脚本。是否可以通过Jmeter从.SQL文件运行SQL代码,以便在执行其他线程之前初始化... 查看详情

Spring JDBC Template SQL-Query 按日期过滤

】SpringJDBCTemplateSQL-Query按日期过滤【英文标题】:SpringJDBCTemplateSQL-Queryfilteredbydate【发布时间】:2015-08-0610:07:04【问题描述】:我需要按两个日期过滤我的查询。当我使用OracleSQLDeveloper或直接从Eclipse查询它时,这是有效的:select... 查看详情

Spring JDBC + Postgres SQL + Java 8 - 从/到 LocalDate 的转换

】SpringJDBC+PostgresSQL+Java8-从/到LocalDate的转换【英文标题】:SpringJDBC+PostgresSQL+Java8-conversionfrom/toLocalDate【发布时间】:2014-10-2114:49:10【问题描述】:我正在使用PostgresSQL9.2、4.0.5版的SpringJDBC和Java8。Java8引入了新的日期/时间API,我... 查看详情

如何使用带有 Spring JDBC 的 MERGE 语句插入/更新单个记录

】如何使用带有SpringJDBC的MERGE语句插入/更新单个记录【英文标题】:Howtoinsert/updateasinglerecordusingaMERGEstatementwithSpringJDBC【发布时间】:2018-08-0616:03:43【问题描述】:我有一个使用MERGE语句创建的更新/插入SQL查询。使用JdbcTemplate或... 查看详情

如何从 JDBC 创建或替换 Oracle 中的过程?

】如何从JDBC创建或替换Oracle中的过程?【英文标题】:HowtocreateorreplaceaprocedureinOraclefromJDBC?【发布时间】:2012-04-2402:31:08【问题描述】:如何在JDBC中创建或替换过程?我在oracle中创建了该过程,但无法从Java中替换该过程。我有... 查看详情

从 Bash 或 Perl 脚本运行 SQL 语句?

】从Bash或Perl脚本运行SQL语句?【英文标题】:RunningSQLStatementfromBashorPerlScript?【发布时间】:2016-03-2318:56:13【问题描述】:我想编写一个脚本,Perl或Bash,我可以在其中运行一个或多个SelectSQL语句以从远程数据库中获取一些信息... 查看详情

JDBC:如何从结果集中检索 SQL COUNT 函数的结果?

】JDBC:如何从结果集中检索SQLCOUNT函数的结果?【英文标题】:JDBC:HowtoretrievetheresultofSQLCOUNTfunctionfromtheresultset?【发布时间】:2014-06-1517:17:27【问题描述】:通常,当我们想要从数据库中检索表中存在的值时,我们会调用ResultSet... 查看详情

如何配置 Spring 使 JPA(Hibernate)和 JDBC(JdbcTemplate 或 MyBatis)共享同一个事务

】如何配置Spring使JPA(Hibernate)和JDBC(JdbcTemplate或MyBatis)共享同一个事务【英文标题】:HowtoconfigureSpringtomakeJPA(Hibernate)andJDBC(JdbcTemplateorMyBatis)sharethesametransaction【发布时间】:2011-10-1006:47:25【问题描述】:我有一个数据源,我... 查看详情

通常如何从 Google Apps 脚本访问 BigQuery

】通常如何从GoogleApps脚本访问BigQuery【英文标题】:HowtoaccessBigQuerygenerallyfromGoogleAppsScript【发布时间】:2018-05-3018:47:24【问题描述】:我有一个当前使用JDBC访问GCPSQL数据库的GoogleApps脚本应用程序。使用普通的SQL数据库并不能解... 查看详情

spring之jdbc框架

...不必要的代码来处理异常,打开和关闭数据库连接等。但SpringJDBC框架负责所有的低层细节,从开始打开连接,准备和执行SQL语句,处理异常,处理事务,到最后关闭连接。所以当从数据库中获取数据时,你所做的是定义连接参... 查看详情

如何使用 Spring 管理具有不同 jdbc(或休眠?)的多个“运行时注意到”数据库连接?

】如何使用Spring管理具有不同jdbc(或休眠?)的多个“运行时注意到”数据库连接?【英文标题】:HowtouseSpringtomangemulitple"runtimenoticed"databaseconnectionwithdifferentjdbc(orhibernate?)?【发布时间】:2013-01-1501:57:30【问题描述】:... 查看详情

从jdbc到spring-boot-starter-jdbc

从jdbc到spring-boot-starter-jdbcjdbc是什么JDBC是一种用于执行SQL语句的API,可以为多种关系数据库提供统一访问,它是由一组用Java语言编写的类和接口。是Java访问数据库的标准规范。JDBC是Java提供的一种标准规范,具体的实现由各个... 查看详情