什么是'Class.forName("org.sqlite.JDBC");' 做?

24 java sqlite jdbc

我正在尝试使用SQLite数据库创建一个简单的应用程序.我选择使用SQLiteJDBC驱动程序.

以下代码取自上述网站.我的问题是关于public static void main之后的行...

它写道: Class.forName("org.sqlite.JDBC");

我的问题是,这条线是什么意思?它做了什么?它似乎没有连接到其余的代码.Class.forName()应该返回一个班级,但这条线似乎独自站在体内.无论它返回的是代码的另一部分都没有使用,我可以看到.

请帮助澄清一下.提前致谢.

public class Test {
 public static void main(String[] args) throws Exception {
    Class.forName("org.sqlite.JDBC");
    Connection conn =
      DriverManager.getConnection("jdbc:sqlite:test.db");
    Statement stat = conn.createStatement();
    stat.executeUpdate("drop table if exists people;");
    stat.executeUpdate("create table people (name, occupation);");
    PreparedStatement prep = conn.prepareStatement(
      "insert into people values (?, ?);");

prep.setString(1, "Gandhi");
prep.setString(2, "politics");
prep.addBatch();
prep.setString(1, "Turing");
prep.setString(2, "computers");
prep.addBatch();

conn.setAutoCommit(false);
prep.executeBatch();
conn.setAutoCommit(true);

ResultSet rs = stat.executeQuery("select * from people;");
while (rs.next()) {
  System.out.println("name = " + rs.getString("name"));
  System.out.println("job = " + rs.getString("occupation"));
}
rs.close();
conn.close();
}
  }
Run Code Online (Sandbox Code Playgroud)

Jon*_*nas 26

它动态加载一个类.Class.forname方法有什么作用?是一篇很好的文章,它也解释了为什么数据库驱动程序需要它:

让我们看看为什么需要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!");
    }
}
Run Code Online (Sandbox Code Playgroud)

JVM执行静态块,驱动程序使用DriverManager注册自身.

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

  • 好答案.值得注意的是,Class.forName(...)机制不再是首选机制."现代化"JDBC驱动程序在[DriverManager查找]的jar中的"META-INF/java.sql.Driver"中有一个文件(http://download.oracle.com/javase/6/docs/api/java/ sql/DriverManager.html)自动发现驱动程序实现.不幸的是,SQLLite没有这个文件. (5认同)