我有几个存储过程要作为初始设置执行。因此,我所做的是将该存储过程放置在data.sql
中,并设置jpa.hibernate.ddl-auto=create
。
但是在我的springboot
应用程序启动时,该应用程序由于com.mysql.jdbc.exceptions.jdbc4.mysqlSyntaxerRoreXception而失败。这意味着它不能理解该过程的语法,但是可以在SQL
表单上手动执行相同的过程,不会有任何问题。那么如何通过data.sql
执行它呢
data.sql-
DELIMITER $$
CREATE PROCEDURE `GetStocks`(int_stockcode varchar(20))
BEGIN
DECLARE stock_name VARCHAR(100);
SELECT name FROM stock where stock_code = int_stockcode INTO stock_name;
END $$
DELIMITER ;
错误-
原因:org.springframework.jdbc.datasource.init.ScriptStatementFailedException:
无法执行类路径资源[default-data.SQL]的SQL脚本语句#29:DELIMITER$$CREATE PROCEDUREgetstocks
(int_stockcode varchar(20))BEGIN SELECT*FROM stock where stock_code=int_stockcode;嵌套异常是com.mysql.jdbc.exceptions.jdbc4.mysqlSyntaxerRoreXception:您的SQL语法有错误;查看与您的MySQL server版本相对应的手册,以了解在第1行“delimiter$$CREATE PROCEDUREgetstocks
(int_stockcode varchar(20))BEGIN selec”附近使用的正确语法
对于加载和创建数据库对象,最好坚持使用liquibase或Flyway。使用以下代码可以加载存储过程。
使用控制器加载存储过程,但它可以是一个简单的类,也可以通过事件侦听器进行配置。
@RestController
public class SqlLoaderController {
@Autowired
DataSource dataSource;
@GetMapping("/load")
public void loadScript() throws Exception
{
ResourceDatabasePopulator resourceDatabasePopulator=new ResourceDatabasePopulator();
resourceDatabasePopulator.setSeparator("DELIMITER");
InputStream is= new ClassPathResource("sql.txt").getInputStream();
resourceDatabasePopulator.addScript(new InputStreamResource(is));
resourceDatabasePopulator.execute(dataSource);
}
}
分隔符用于区分两个存储过程或数据库对象的开始和结束。sql.txt文件
CREATE PROCEDURE GetStocks(int_stockcode varchar(20))
BEGIN
DECLARE stock_name VARCHAR(100);
SELECT 1 FROM dual;
END;
DELIMITER
CREATE PROCEDURE GetStocks1(int_stockcode varchar(20))
BEGIN
DECLARE stock_name VARCHAR(100);
SELECT 1 FROM dual;
END;
DELIMITER
在我的Spring项目中,我使用HiberNate将我的实体类导出到以前创建的数据库。但是这需要最终用户知道如何在数据库管理器系统中创建数据库(目前我正在使用Postgreql)。 是否有任何方法,只要给定安装postgreql的机器(以及第一次运行应用程序时提供的用户名和密码),HiberNate在服务器中创建一个新数据库(如果它不存在)?
我创建了一个小应用程序来下载youtube视频,并将它们添加到我的音乐文件夹中,这样我就可以通过spotify收听它们。只要我通过IDE运行该应用程序,它就可以正常工作。我创建了一个。exe文件通过pyinstaller,但它在启动时崩溃,我尝试以管理员身份运行它,也尝试按照其他线程中的建议通过cmd运行它,但没有任何效果。 我使用以下方法创建了它: 这是python代码: 这是我得到的,我试图通
问题内容: 我正在使用hibernate模式开发应用程序。当我尝试创建登录页面时,出现Sql Injection问题。我有以下代码: 在这种情况下,如何防止Sql Injection?loginInfo表的创建表语法如下: 问题答案: 您还有其他选择,请参阅mkyong的这篇不错的文章。
当创建maven项目时,需要做大量的工作来创建指定的父包。如:用groupId com.test和artifactId jpa-demo创建maven项目时,后面只需要创建包:src/main/java中的com.test.jpa.demo。 那么,如何自动创建这些PAC? 嗯。在IntelliJ Idea中没有找到有用的插件。 有人知道一个好主意吗?tks.
问题内容: 我正在使用R包通过R访问我的PostgreSQL数据库(9.3)。我有一些非常长且较大的sql查询(从raster2pgsql生成的几个MB大。)。 如何在R中以语句形式发送/执行sql查询文件? 正常方式 似乎无法通过来工作。我试图通过读取整个sql文件作为字符向量,但是这也失败了,因为dbSendQuery显然仅支持单个命令? 问题答案: 或仅用于“ SQL”部分,而不是psql命
问题内容: 我需要在通过JPA EntityManager访问的数据库中创建一个新表。JPA NativeQueries是否支持“选择”或“更新”以外的查询?还是在JPA上下文中还有另一种先进的方法来执行复杂的SQL查询? 问题答案: jpa“本机查询”仅可用于DML语句(数据处理语言)。要发布任何DDL(例如创建表),您需要从EntityManager获取基础连接。 如何从EM中提取连接将取决于