当前位置: 首页 > 面试题库 >

通过Web应用程序中的JDBC连接到数据库时,何时需要Class.forName?

祁鸿晖
2023-03-14
问题内容

根据本教程,Class.forNameJDBC
4.0+驱动程序不再需要调用。我成功地遵循了示例中的方法(只是调用DriverManager.getConnection)使用MySQL的独立程序,但是当我尝试从属于在Tomcat
7上运行的Web应用程序的类的类连接到完全相同的数据库时,它不会工作 相反,我有一个No suitable driver found例外。

mysql-connector-java-5.1.18-bin.jar文件位于tomcat\webapps\DatabaseProject\WEB- INF\lib,我进行了三遍检查,但无法正常工作,因此我开始尝试。我添加了一个呼叫,Class.forName并且成功了。那是唯一改变的事情。

无论如何,我的问题是,有人知道为什么这样做有效吗?我唯一的理论是我也hsqldb.jar参与tomcat\lib另一个项目,也许驾驶员莫名其妙地感到困惑?但是我给人的印象是,DriverManager应该能够自动告诉要使用哪个驱动程序,所以这不应该是一个问题…无论如何,如果有人可以向我介绍这里发生的事情,我将非常感激它。


问题答案:

JDBC4驱动程序包含一个文件:

META-INF/services/java.sql.Driver

在使用ServiceProvider机制向JVM注册Driver实现的jar中(请参阅javadocs以获取java.util.ServiceLoader)。这就是为什么Class.forName不再需要。

我的猜测是这是一个类加载器问题。在ServiceLoaderjavadoc中提到:

该提供程序必须可以从最初查询以查找配置文件的同一类加载程序进行访问;请注意,这不一定是实际从中加载文件的类加载器。

我会尝试将驱动程序放在tomcat\lib目录而不是Web应用程序目录中,以查看是否有所不同(不同的类加载器?)。

如果通过ide启动Web应用程序并设置断点,则一旦达到断点,就可以使用“求值表达式”功能执行:ServiceLoader.load(Driver.class)。这将为您提供一ServiceLoader堂课,您可以查看一下已注册的驱动程序。您可以检查mysql驱动程序是否存在,在列表中的位置等等,这可能有助于在此处弄清楚行为。



 类似资料:
  • 我正在尝试通过JDBC连接到使用Eclipse(版本Juno)的IBMDB2数据库。我已经将驱动程序(外部jar文件)添加到我的项目中,并且驱动程序已正确加载… 我还知道连接数据(数据库路径、用户名、密码)是正确的。但我得到一个java.lang.NoClassDefFoundError: 项目属性肯定有问题但是我真的不知道去哪里找。

  • 我有一个IP地址每次我收到连接失败的消息时,我都尝试了很多连接到该服务器的方法。出于安全原因,我隐藏了用户名和密码。 代码: 我有例外 组织。postgresql。util。PSQLException:连接尝试失败。在org。postgresql。果心v3。连接工厂impl。org上的openConnectionImpl(ConnectionFactoryImpl.java:292)。postgr

  • 连接失败,出现此异常。我无法追踪到底发生了什么? 另外,getconnection之后的db2diag.log是:

  • 我是Android应用程序开发新手,我正在尝试使用本机MS JDBC驱动程序(sqljdbc4.jar)连接到Azure SQL DB,我不断遇到以下错误: “错误 不过,我可以用与squirrel相同的连接字符串连接到DB。 我使用android Studio 2.1.3,我真的一筹莫展...这是代码: 我甚至试着用代码打开1433端口上的一个插座: 尽管我打电话时得到了正确的,但没有成功 我是

  • 问题内容: 我正在研究将由学校使用的应用程序。每所学校将建立自己的数据库。每个学校都会为应用程序提供自己的“设置”文件。设置文件将包含创建设置文件的特定学校的数据库URL。这样一来,使用该应用程序的学生如果想连接到其他数据库,就只能加载其他设置文件。 我的问题是,如何保护用于连接数据库的用户名和密码?因此,只有应用程序具有对数据库的读写访问权限。应用程序仅具有该特定学校的读写权限吗? 如果您需要更

  • 本文向大家介绍如何使用JDBC程序连接到PostgreSQL数据库?,包括了如何使用JDBC程序连接到PostgreSQL数据库?的使用技巧和注意事项,需要的朋友参考一下 PostgreSQL是一个由全球志愿者团队开发的开源关系数据库管理系统(DBMS)。PostgreSQL不受任何公司或其他私人实体的控制,并且源代码是免费提供的。 PostgreSQL可在所有主要操作系统上运行,包括Linux,