来自Java文档
在以前的JDBC版本中,要获得连接,首先必须通过调用Class.forName方法来初始化JDBC驱动程序.
在类路径中找到的任何JDBC 4.0驱动程序都会自动加载.(但是,必须使用方法Class.forName手动加载JDBC 4.0之前的任何驱动程序.)
我有一个连接到SQL Server Express 2016的平针织Webservice.它有一个4.2驱动程序的sqljdbc42.jar,在CLASSPATH中
但是,如果我省略了Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")调用,我DriverManager.getConnection会抛出一个SQLException(没有为jdbc找到合适的驱动程序:sqlserver:// localhost:1433; ....")
getConnection添加Class.forName呼叫后,启动成功.
我在Java 8上.
我错过了什么?
更新:我刚刚尝试了一个命令行程序,它没有forName.但是,在我的Eclipse IDE中,我将我的REST服务作为localhost上的Tomcat 8.0服务器运行,它不起作用.
DriverManager由于SPI(服务提供者接口),当类本身初始化时,驱动程序会自动初始化.这意味着在内部它将尝试查找META-INF/services/java.sql.Driver上下文类加载器中可用的任何文件,并且对于找到的每个文件,它将创建在文件中定义的类的实例,在这种情况下实际上是JDBC驱动程序的FQN ,是JDBC从哪里开始自动初始化驱动程序JDBC 4.0.
但是这只能在初始化类时从上下文类加载器中获得驱动程序时才能工作DriverManager.确保这一点的一个好方法是Class Loader在层次结构中从足够高的位置使驱动程序可用.在你的情况下,你应该把你的司机tomcat/lib.实际上,通过这种方式,您的驱动程序将从Common CL哪个应该足够高.关于在Tomcat中CL层次的更多细节在这里.
| 归档时间: |
|
| 查看次数: |
530 次 |
| 最近记录: |