我正在尝试使用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.
归档时间: |
|
查看次数: |
16234 次 |
最近记录: |