我正在尝试使用 SQLite 数据库创建一个简单的应用程序。我选择使用SQLiteJDBC 驱动程序 http://www.zentus.com/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();
}
}
它动态加载一个类。Class.forname 方法有什么作用? http://www.xyzws.com/Javafaq/what-does-classforname-method-do/17是一篇关于它的好文章,它还解释了为什么数据库驱动程序需要它:
让我们看看为什么需要 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 执行静态块,并且 Driver 将自身注册到 DriverManager。
您需要一个数据库连接来操作数据库。为了创建与数据库的连接,DriverManager 类必须知道要使用哪个数据库驱动程序。它通过迭代已向其注册的驱动程序数组(内部为 Vector)并调用数组中每个驱动程序的 AcceptURL(url) 方法来实现这一点,从而有效地要求驱动程序告诉它是否可以处理 JDBC网址。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)