Java 使用jdbc4连接到数据库引擎的通用代码?

Java 使用jdbc4连接到数据库引擎的通用代码?,java,jdbc,driver,Java,Jdbc,Driver,我正在开发一个模拟数据立方体及其操作的应用程序。对于这个应用程序,我需要提供对各种数据库引擎的支持,如PostgreSQL、MySQL等。 我计划提供一个界面,用户可以在其中选择引擎并指定其详细信息 我已经能够使用可用的JDBC4驱动程序连接到PostgreSQL。对于这种连接,我必须在编译过程中通过在类路径中包含.jar驱动程序来编译我的程序代码。 但是应用程序作为产品应该在JRE上运行,并且不需要重新编译代码。这可能吗 该应用程序还应可自定义为数据库可用的较新版本的驱动程序和引擎。如何做到这

我正在开发一个模拟数据立方体及其操作的应用程序。对于这个应用程序,我需要提供对各种数据库引擎的支持,如PostgreSQL、MySQL等。 我计划提供一个界面,用户可以在其中选择引擎并指定其详细信息

我已经能够使用可用的JDBC4驱动程序连接到PostgreSQL。对于这种连接,我必须在编译过程中通过在类路径中包含.jar驱动程序来编译我的程序代码。 但是应用程序作为产品应该在JRE上运行,并且不需要重新编译代码。这可能吗


该应用程序还应可自定义为数据库可用的较新版本的驱动程序和引擎。如何做到这一点?

我认为您可能需要对DB框架有更多的了解。这是我几年前开始的一个幼稚的框架

您可以查看它以获得灵感:

对于这种连接,我必须在编译过程中通过在类路径中包含.jar驱动程序来编译我的程序代码

你不应该这样做。这实际上就是JDBC的全部要点。您应该提供驱动程序类名(以及连接URL、用户名和/或密码)作为字符串,可以从一些外部配置(属性?)文件中检索。例如

String driverClassName = getItFromConfigurationFileSomehow();
Class.forName(driverClassName);
// ...
更重要的是,由于JDBC4,根本不需要使用
类#forName()
。只需将JDBC驱动程序放在运行时类路径中,让
ServiceLoader
API自动加载驱动程序


您只需将代码重写为only使用
java.sql
接口/类,如
java.sql.Connection
等,而不是
org.postgresql
接口/类,这样在编译期间就不需要JDBC驱动程序。换句话说,您不应该有任何一行代码导入/引用特定于JDBC驱动程序的接口/类。

您可以通过BalusC提到的反射加载驱动程序类,然后使用DriverManager获得连接。然后,您坚持使用java.sql或javax.sql接口,应该就可以开始了

如果您打算将此代码用于任何类型的web应用程序,这种方法都可以工作,但会有严重的缺点。这种方法会干扰应用程序的重新加载,这是开发过程中的一大难题

如果希望在web应用程序中使用此选项,则应将其作为从数据源检索数据库连接的选项。这样,web容器就是实际加载驱动程序的容器,而您的应用程序不会因为加载驱动程序类而受到惩罚


您的数据库库代码只需要使用数据源API来检索连接,然后使用java[x].sql接口来操作数据库。因此,你可以考虑查看这个开源解决方案:蒙德里安——这是数据仓库的交叉关系数据库解决方案。应用程序应该提供一个模拟,而不是真实的数据仓库复杂能力。这可以单独使用Java.SQL来完成。不使用数据库引擎驱动程序?怎样?请详细说明JDBCAPI的全部要点是,您不需要针对特定的JDBC驱动程序进行编译。您只需将其放入运行时类路径并以某种方式指定驱动程序类名,或者只需使用新的JDBC4 serviceloader API(这样您就根本不需要
class\forName()
)。只有您自己的代码错误地导入/使用JDBC驱动程序特定的类。将所有
org.postgresql
导入/引用替换为
java.sql
导入/引用。