首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java JAR (库)用法

问Java JAR (库)用法
EN

Stack Overflow用户
提问于 2014-05-02 03:16:01
回答 2查看 76关注 0票数 1

我曾经在Eclipse中使用过一次GSON库,它非常简单。我只是将它作为外部库添加,并且在源文件中我已经导入了它,并且能够像Java中的其他类一样使用它。示例:

代码语言:javascript
复制
Gson gson = new Gson(); //and just use it

最近我不得不处理SQLIte数据库文件,所以我下载了JDBC驱动程序库并将其添加到我的Eclipse项目中。但我注意到使用它有一种奇怪的语法(至少对我来说是这样)。我已经导入了java.sql.*,但为了能够使用它的类,我必须执行以下操作:

代码语言:javascript
复制
 Class.forName("org.sqlite.JDBC");

我知道这个命令的返回值是Class object (在运行时),但正如您从语法中看到的那样,它从未使用过。

请解释一下那里发生了什么,为什么我不能只使用SQL包类而不先调用Class.forName。

EN

回答 2

Stack Overflow用户

发布于 2014-05-02 03:20:50

它动态加载一个类。What does Class.forname method do?是一篇关于它的好文章,它也解释了为什么数据库驱动程序需要它:

让我们看看为什么需要Class.forName()来将驱动程序加载到内存中。所有的JDBC驱动程序都有一个向DriverManager注册自身的静态块,而DriverManager只有一个静态的初始化器。

MySQL JDBC驱动程序有一个静态初始化器,如下所示:

代码语言:javascript
复制
static {
    try {
        java.sql.DriverManager.registerDriver(new Driver());
    } catch (SQLException E) {
        throw new RuntimeException("Can't register driver!");
    }
}

JVM执行静态块,驱动程序向DriverManager注册自身。

您需要一个数据库连接来操作数据库。为了创建到数据库的连接,DriverManager类必须知道要使用哪个数据库驱动程序。它通过迭代已向其注册的驱动程序数组(内部为Vector)并对数组中的每个驱动程序调用acceptsURL( URL )方法来实现这一点,从而有效地要求驱动程序告诉它是否可以处理JDBC URL。

来源- What does 'Class.forName("org.sqlite.JDBC");' do?

票数 1
EN

Stack Overflow用户

发布于 2014-05-02 03:24:30

基本上,它让JVM注册您的代码正在使用的java.sql.*库的实现。通过这种方式,您可以依赖于标准接口,而无需经历需要实现级细节的困难和障碍。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23414852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档