- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
如果我有一个使用 SQL 数据库的 Java 应用程序,并且该应用程序是第一次使用,那么初始化(即创建数据库和所有必要的表、初始记录插入等)是否有任何继承优势?通过 SQL 脚本文件或通过 Java 代码访问数据库?
首先想到的是机器上的用户权限、速度、可靠性/稳定性。
最佳答案
无论您是通过 JDBC 还是通过 SQL 脚本创建表和列等,在这两种情况下,都只是将 SQL 命令输入数据库引擎。所以,不,数据库不关心你用哪种方式。
user privileges on a machine, speed, reliability/stability
无论是调用 JDBC 还是运行脚本,您都必须具有适当的用户权限和数据库访问权限。我看不出有什么问题。
至于速度,同样,您最终会将 SQL 语句发送到数据库引擎,所以没有区别。可靠性和稳定性同上。
有一些提高速度的策略,例如在服务器机器上本地工作(而不是通过网络),以及 bulk loading .无论是通过 JDBC 还是 SQL 脚本,这些策略都适用。
你应该了解 database migration工具。
比如我最喜欢的Flyway是一个基于 Java 的工具,可以自动运行一套 SQL 脚本。 Flyway 可以选择调用您编写的 Java 类来操作数据库,以应对 SQL 不够用的复杂场景。所以你在你的问题中得到了最好的两条路线,通过 JDBC或通过 SQL 脚本。
Flyway 的工作原理是自动为自己的内务管理创建一个表。在该表中,它跟踪已运行的脚本。每次调用 Flyway 时,它都会检查之前运行的脚本并将其与当前找到的所有脚本进行比较。然后执行和跟踪发现的任何新脚本。您编写的任何数据库操作 Java 类也是如此。
请注意这种方法在开发和测试中的用处。只要您愿意,您就可以启动一个新的数据库,只需删除或添加各种脚本,即可将其升级到应用程序发展过程中的任何一点。测试人员可以添加额外的脚本来加载数据以创建特定的用例场景。所有这些都可以通过自动化工具重复完成。
在生产中也很有用。通过完全自动化数据库结构的更新,您可以消除人为错误。部署将是一个更平静的过程。当然,对于 continuous integration ,实际上需要一个数据库迁移工具。
您可以通过 Java 调用 Flyway,通常是在应用启动的初始化阶段。或者,您可以选择通过控制台上的命令行工具或作为构建过程的一部分来调用 Flyway。控制台工具用 JVM 包装 Flyway和 JDBC drivers从而隐藏了 Flyway 在 Java 上运行的事实。因此,即使是非 Java 商店也可以充分利用 Flyway。
近年来,迁移工具有了长足的进步。考虑采用Flyway,Liquibase ,或一些类似的工具。
关于java - 通过脚本文件或通过 Java 代码初始化 SQL 数据库是否有任何继承优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56284937/
我有一个 if 语句,如下所示 if (not(fullpath.lower().endswith(".pdf")) or not (fullpath.lower().endswith(tup
然而,在 PHP 中,可以: only appears if $foo is true. only appears if $foo is false. 在 Javascript 中,能否在一个脚
XML有很多好处。它既是机器可读的,也是人类可读的,它具有标准化的格式,并且用途广泛。 它也有一些缺点。它是冗长的,不是传输大量数据的非常有效的方法。 XML最有用的方面之一是模式语言。使用模式,您可
由于长期使用 SQL2000,我并没有真正深入了解公用表表达式。 我给出的答案here (#4025380)和 here (#4018793)违背了潮流,因为他们没有使用 CTE。 我很欣赏它们对于递
我有一个应用程序: void deleteObj(id){ MyObj obj = getObjById(id); if (obj == null) { throw n
我的代码如下。可能我以类似的方式多次使用它,即简单地说,我正在以这种方式管理 session 和事务: List users= null; try{ sess
在开发J2EE Web应用程序时,我通常会按以下方式组织我的包结构 com.jameselsey.. 控制器-控制器/操作转到此处 服务-事务服务类,由控制器调用 域-应用程序使用的我的域类/对象 D
这更多是出于好奇而不是任何重要问题,但我只是想知道 memmove 中的以下片段文档: Copying takes place as if an intermediate buffer were us
路径压缩涉及将根指定为路径上每个节点的新父节点——这可能会降低根的等级,并可能降低路径上所有节点的等级。有办法解决这个问题吗?有必要处理这个吗?或者,也许可以将等级视为树高的上限而不是确切的高度? 谢
我有两个类,A 和 B。A 是 B 的父类,我有一个函数接收指向 A 类型类的指针,检查它是否也是 B 类型,如果是将调用另一个函数,该函数接受一个指向类型 B 的类的指针。当函数调用另一个函数时,我
有没有办法让 valgrind 使用多个处理器? 我正在使用 valgrind 的 callgrind 进行一些瓶颈分析,并注意到我的应用程序中的资源使用行为与在 valgrind/callgrind
假设我们要使用 ReaderT [(a,b)]超过 Maybe monad,然后我们想在列表中进行查找。 现在,一个简单且不常见的方法是: 第一种可能性 find a = ReaderT (looku
我的代码似乎有问题。我需要说的是: if ( $('html').attr('lang').val() == 'fr-FR' ) { // do this } else { // do
根据this文章(2018 年 4 月)AKS 在可用性集中运行时能够跨故障域智能放置 Pod,但尚不考虑更新域。很快就会使用更新域将 Pod 放入 AKS 中吗? 最佳答案 当您设置集群时,它已经自
course | section | type comart2 : bsit201 : lec comart2 :
我正在开发自己的 SDK,而这又依赖于某些第 3 方 SDK。例如 - OkHttp。 我应该将 OkHttp 添加到我的 build.gradle 中,还是让我的 SDK 用户包含它?在这种情况下,
随着 Rust 越来越充实,我对它的兴趣开始激起。我喜欢它支持代数数据类型,尤其是那些匹配的事实,但是对其他功能习语有什么想法吗? 例如标准库中是否有标准过滤器/映射/归约函数的集合,更重要的是,您能
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 年前。 Improve
我一直在研究 PHP 中的对象。我见过的所有示例甚至在它们自己的对象上都使用了对象构造函数。 PHP 会强制您这样做吗?如果是,为什么? 例如: firstname = $firstname;
...比关联数组? 关联数组会占用更多内存吗? $arr = array(1, 1, 1); $arr[10] = 1; $arr[] = 1; // <- index is 11; does the
我是一名优秀的程序员,十分优秀!