我正在尝试使用SQLite数据库创建一个简单的应用程序。我选择使用SQLiteJDBC驱动程序。
以下代码取自上述网站。我的问题是关于公共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方法有什么作用?是一篇很好的文章,它还解释了为什么数据库驱动程序需要它:
让我们看看为什么需要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,来实现此目的。网址。
问题内容: 和之间有什么区别? 我不了解其中的重大区别(我已经阅读了一些有关它们的信息!)。请你帮助我好吗? 问题答案: 也许一个示例演示如何使用两种方法将有助于你更好地理解事物。因此,请考虑以下类: 如其javadoc中所述,调用将返回与具有给定字符串名称的类或接口关联的对象,即它返回受type变量影响的对象。 然后,调用创建该 对象表示的类的新实例。就像通过带有空参数列表的表达式实例化该类。换
问题内容: 连接到MySQL数据库时,请执行以下步骤 实际上,我想知道语句的作用。 虽然此类不在mysql.jar中。它在哪里? 问题答案: 本类位于java.lang包,因此在分布用java,并自动导入到每个班级。 该方法所做的只是返回由类加载器加载的参数对象。然后,该方法返回该类的新实例。 因此,发生什么情况是您称之为 返回com.mysql.jdbc.Driver.class。然后,您调用该
问题内容: 我已经在使用商业JDBC驱动程序的示例应用程序中看到了这一行: 不使用返回值。 这条线有什么作用? 问题答案: 它执行该类的静态加载。因此,块中的所有内容都将运行。
问题内容: 以下代码: 是/是打开JDBC连接所必需的。 我听说现代JDBC驱动程序不再需要它。但是我无法在项目中将其删除,因为我遇到了异常。我正在使用Java7和tomcat7。 什么时候可以省略构建? 问题答案: 从JDBC 4.0开始,不需要Class.forName()。 这是JDBC的Java教程的摘录。 在 早期 版本的JDBC中,要获得连接,首先必须通过调用方法Class.forNa
问题内容: 命令会是什么 连接到Oracle数据库时该怎么做?是否有另一种做同一件事的方式? 问题答案: 它使用FQCN(完全限定的类名)获取对类对象的引用。 除了确保指定的类由当前的classloader加载之外,它在连接数据库方面不做任何事情。写作之间没有根本区别 调用显示在使用JDBC的旧代码中,因为这是加载JDBC驱动程序的旧方法。 从Java教程: 在早期版本的JDBC中,要获得连接,首
问题内容: 我需要使用字符串参数并在Python中创建以该字符串命名的类的对象。在Java中,我会使用。在Python中是否有等同功能? 感谢你的答复。回答那些想知道我在做什么的人:我想使用命令行参数作为类名,并实例化它。我实际上是在Jython中编程并实例化Java类,因此是问题的Java实质。 效果很好。非常感谢。 问题答案: python中的反射比Java中的反射更容易,更灵活。 没有直接函