我有以下疑问。当您必须从 Java 应用程序查询数据库时,有几种方法可以做到这一点。我想出了一些方法,但每个方法都有一个缺点。
第一个是,你有一个类,例如。QueryManager
它为您提供查询功能,例如executeUpdate(...)
隐藏executeQuery(...)
连接管理的详细信息等(一种外观模式)。当您需要与数据库交互时,您会将查询作为字符串传递并管理ResultSet
.
我看到的问题是,如果数据库发生变化,无论是 DBMS 还是数据库本身,您最终都会一个接一个地修改 SQL。我认为这是一个巨大的依赖。此外,您正在向所有人展示您的数据库的结构,并且您正在让每个班级都处理ResultSet
. 另一方面,您可以通过使用此方法实现更高的模块化,因为您的类的模型(我是MVC 模式的粉丝)可以具有包可见性。
我想到的第二个想法是创建一个QueryManager
类,它不会为您提供查询方法,而是为您提供所需的方法。换句话说,每次你需要使用数据库时,你都会在这个类中创建一个方法,里面有SQL,它会返回你需要的信息。但是,我们在这里面临的问题是,您必须在返回ResultSet
所需数据的一个或一个模型之间做出选择。
前者将使您的类对 DB 的依赖比在前面的示例中要少,因为现在与 DBMS 没有广泛传播的依赖关系,因为所有 SQL 都包含在一个类/文件中。但是,它仍然存在与 DB 结构的依赖关系,并且您也在向所有人公开您的 DB 结构。
后者意味着这些模型不再是包可见性,它们必须是公共的,允许任何类修改它们,并破坏封装。
有没有其他方法可以解决所有以前的问题?如果不是,您认为哪种方法更好?
我不认为有绝对的答案(也许有),但我必须说,我们期待 DB 的结构和 DBMS 的结构发生变化。这可能有助于您的回答。但是尽量让它尽可能通用,因为我可能在其他项目中也有同样的疑问,但没有同样的限制。