我曾经在Eclipse中使用过一次GSON库,它非常简单。我只是将它作为外部库添加,并且在源文件中我已经导入了它,并且能够像Java中的其他类一样使用它。示例:
Gson gson = new Gson(); //and just use it最近我不得不处理SQLIte数据库文件,所以我下载了JDBC驱动程序库并将其添加到我的Eclipse项目中。但我注意到使用它有一种奇怪的语法(至少对我来说是这样)。我已经导入了java.sql.*,但为了能够使用它的类,我必须执行以下操作:
Class.forName("org.sqlite.JDBC");我知道这个命令的返回值是Class object (在运行时),但正如您从语法中看到的那样,它从未使用过。
请解释一下那里发生了什么,为什么我不能只使用SQL包类而不先调用Class.forName。
发布于 2014-05-02 03:20:50
它动态加载一个类。What does Class.forname method do?是一篇关于它的好文章,它也解释了为什么数据库驱动程序需要它:
让我们看看为什么需要Class.forName()来将驱动程序加载到内存中。所有的JDBC驱动程序都有一个向DriverManager注册自身的静态块,而DriverManager只有一个静态的初始化器。
MySQL JDBC驱动程序有一个静态初始化器,如下所示:
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。
发布于 2014-05-02 03:24:30
基本上,它让JVM注册您的代码正在使用的java.sql.*库的实现。通过这种方式,您可以依赖于标准接口,而无需经历需要实现级细节的困难和障碍。
https://stackoverflow.com/questions/23414852
复制相似问题