Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与其使用大量java代码,为什么不以文本文件的形式向DB发送脚本呢?_Java_Mysql_Jdbc - Fatal编程技术网

与其使用大量java代码,为什么不以文本文件的形式向DB发送脚本呢?

与其使用大量java代码,为什么不以文本文件的形式向DB发送脚本呢?,java,mysql,jdbc,Java,Mysql,Jdbc,我认为编写java代码来执行DDL、DML等是很麻烦的,而且需要大量的键入。所以,我在想,如果数据库有/可以有以下功能-在文本文件中获取一个脚本并执行整个脚本 如果我们有类似的东西,那么我们可以用通常的、简单的方式将SQL查询输入到文本文件中。然后,java代码将该文本文件发送到DB,DB执行该文件,就像有人在其管理GUI中键入了脚本一样 这可能吗?这种系统的缺点是什么?您的建议本质上类似于在RDBMS上调用存储过程 缺点是,您的域逻辑现在驻留在持久层中,这(可能)是不好的,原因有几个 主要问题

我认为编写java代码来执行DDL、DML等是很麻烦的,而且需要大量的键入。所以,我在想,如果数据库有/可以有以下功能-在文本文件中获取一个脚本并执行整个脚本

如果我们有类似的东西,那么我们可以用通常的、简单的方式将SQL查询输入到文本文件中。然后,java代码将该文本文件发送到DB,DB执行该文件,就像有人在其管理GUI中键入了脚本一样


这可能吗?这种系统的缺点是什么?

您的建议本质上类似于在RDBMS上调用存储过程

缺点是,您的域逻辑现在驻留在持久层中,这(可能)是不好的,原因有几个


主要问题之一是:代码维护:从维护的角度来看,程序员是一场噩梦,程序员需要掌握domani逻辑和sql语句的技能。根据团队的规模,这可能是一个大问题。通常遵守分离关注点的规则

我所知道的几乎每个数据库都有这样的功能(包括标签中提到的MySQL)。您只需从命令行客户端执行类似的操作(此示例适用于MySQL)

mysql-h hostname-u user

没有中间层可以使用某种编程语言来传递文件。

您需要Java代码中的语句,因为大多数作为参数发送的值只有在运行时才知道:它们来自GUI,以及每个查询之间执行的所有业务代码。否则,是的,您想要的是存在的:它们被称为存储过程。

我会说,为您的DDL使用它。我总是在SQL脚本中删除我的表/索引/约束创建,然后运行它来设置我的数据库


然而,对于DML,正如其他海报所说,您将经常(通常)根据用户输入进行这些查询。如果用户在您的系统中创建了某些对象,您将通过一个或多个插入/更新来保存它。这些语句的参数将是用户输入系统的值。如果您使用Java的工具直接执行这些命令,它将更易于维护和理解。尝试用参数替换SQL文件中的令牌并将其传递到数据库将很快变得更加麻烦。

持久层是什么意思?传统上设计良好的应用程序有一个表示层(用于UI逻辑)、一个业务层(用于业务逻辑、事务性)和一个持久层(用于在数据库中保存数据并从数据库中检索数据)。
mysql -h hostname -u user < sql_script.sql