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

2024-03-23

我正在尝试使用 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(使用前将#替换为@)

'Class.forName("org.sqlite.JDBC");' 是什么意思做? 的相关文章

  • 相当于 java PBKDF2WithHmacSHA1 的 Python

    我的任务是构建一个 API 的使用者 该 API 需要带有 UNIX 时间种子值的加密令牌 我看到的示例是使用我不熟悉的 Java 实现的 在阅读文档和其他堆栈文章后一直无法找到解决方案 使用javax crypto SecretKey j
  • 我需要在 Java 9 中使用哪个模块才能使用 JPA?

    我正在使用一个需要 JPA 的项目测试 Java 9 javax persistence 类 当我添加module info java并声明我的模块 下的所有类javax persistece包变得不可用 我搜索了很多 但找不到在 Java
  • 修改sqlite3中的列类型

    我对 SQLite 3 还很陌生 现在我必须向现有的表中添加一列 我开始这样做 ALTER TABLE thetable ADD COLUMN category 当然 我忘记指定该列的类型 我想做的第一件事就是删除该列 然后重新添加它 然而
  • Spring MVC - 自动查找验证器

    假设我有一个像这样的示例实体类 public class Address 和相应的验证器 Component public AddressValidator implements Validator Override public bool
  • 如何访问EmbeddedSolrServer实例的管理界面?

    在我的网络应用程序中 我正在运行org apache solr client solrj embedded EmbeddedSolrServer出于调试目的 我想访问管理界面 这就是我实例化服务器的方式 new EmbeddedSolrSe
  • 如何在android中使用retrofit访问404错误?

    我正在使用改造 2 访问 REST API 以使用原始正文插入 JSON 数据 我从服务器获得成功响应 但在响应时收到 404 错误 我想访问404错误请帮我解决这个问题 ApiUtil getServiceClass sendFinalC
  • grails 中的 log4j:如何登录文件?

    我的 grails config groovy 中有这个 log4j 配置 log4j error org codehaus groovy grails web servlet controllers org codehaus groovy
  • Map:为 Integer 和 Double 类型定义方法,但不为 String 类型定义方法

    我正在尝试定义一个方法putIfGreaterThan 为了我的新Map class 给定一个键 仅当新值大于旧值时 它才会用新值替换旧值 我知道我可以通过组合来实现这一点 通过有一个private final Map
  • Java:从 ScriptEngine javascript 返回一个对象

    我正在尝试使用 Java 来评估 javascript脚本引擎 https docs oracle com javase 7 docs api javax script ScriptEngine html班级 这是我正在尝试做的事情的一个简
  • Android 中表与游标的并集

    我正在尝试将两个具有相同字段的表合并起来 通过内容提供程序 创建一个用于创建 ListView 的游标 Override public Cursor query Uri uri String projection String select
  • 无法删除临时文件夹(有时)

    当我启动应用程序时 我创建一个临时文件夹 public static File createTempDir String name throws IOException File tempDir File createTempFile na
  • Java:如果数组大小未知,如何初始化?

    我要求用户输入 1 到 100 之间的一些数字并将它们分配到一个数组中 数组大小未初始化 因为它取决于用户输入数字的次数 我应该如何分配数组长度 如果用户输入 5 6 7 8 9 5 个数字 则 int list becomes int l
  • Netty Nio java 中的通信

    我想在 Netty nio 中创建一个具有两个客户端和一个服务器的通信系统 更具体地说 首先 我希望当两个客户端与服务器连接时从服务器发送消息 然后能够在两个客户端之间交换数据 我正在使用本示例提供的代码 https github com
  • 覆盖Java中的属性[重复]

    这个问题在这里已经有答案了 在 Java 中 我最近有几个项目 我使用了这样的设计模式 public abstract class A public abstract int getProperty public class B exten
  • Java/Hibernate - 异常:内部连接池已达到其最大大小,当前没有可用的连接

    我第一次在大学项目中使用 Hibernate 而且我还是个新手 我想我遵循了我的教授和我阅读的一些教程给出的所有指示 但我不断收到标题中的异常 Exception in thread main org hibernate Hibernate
  • Unix 纪元时间转 Java Date 对象

    我有一个包含以下内容的字符串UNIX 纪元时间 https en wikipedia org wiki Unix time 我需要将其转换为 Java Date 对象 String date 1081157732 DateFormat df
  • Zookeeper 未启动,nohup 错误

    我已经下载了zookeeper 3 4 5 tar gz 解压后我将conf zoo cfg写为 tickTime 2000 dataDir var zookeeper clientPort 2181 现在我尝试通过 bin zkServe
  • Swing GUI 出现 IntelliJ 错误“contentPane 无法设置为 null。”从终端编译时

    当我从 IntelliJ 编译我的项目时 没有任何问题 我的程序运行顺利 但是当我尝试使用 javac 从终端编译它时 警告 注意 Victor presentation TableControllerMenu java 使用未经检查或不安
  • 在edittext android中插入imageview

    我想将 imageview 放在 edittext 中 可能吗 我检查了 evernote 应用程序 它能够将照片放在编辑文本部分 我想让我的应用程序完全相同 我如何才能将从图库中选择的图像视图放入编辑文本中 我首先尝试将 imagevie
  • 为什么我们不能在函数式接口中重载抽象方法? (爪哇)

    所以我熟悉java中的函数式接口 以及它们与lambda表达式的使用 一个函数式接口只能包含一个抽象方法 当从 lambda 表达式使用这一孤独方法时 您不需要指定其名称 因为接口中只有一个抽象方法 编译器知道这就是您正在引用的方法 Exa

随机推荐

  • 有没有办法使用Python将窗口移动到另一个显示器?

    我需要获取窗口的句柄 然后将其移动到我的辅助监视器 这对于 python 2 6 可行吗 最好使用标准库 Use the pywin32 http sourceforge net projects pywin32 模块来访问本机 Win32
  • 更改 Excel Web 查询的 URL

    我有一个 Excel 2010 电子表格 它从数据连接获取信息 连接属性上有 连接字符串 它是一个带有多个参数的 URL 这些参数在查询字符串中传递到服务器 如果单击 编辑查询 您可以更改 URL 然后根据新 URL 导入新数据 我需要通过
  • 如何让填充的组合框在 Swift 中显示其选项?

    使用此代码 我可以填充中的项目NSComboBox 但是当您在应用程序中展开组合框时 组合框本身始终为空 记录的项目数量是准确的 我知道这是相当基本的 但我已经阅读并重新阅读了developer apple com 上的文档 并在 Swif
  • 从 Internet Explorer 启动 Chrome 浏览器

    我们有一个 Web 应用程序 它的一些功能只能在 Chrome 中使用 我想使用 Google Chrome 浏览器启动这个 Web 应用程序 并通过超链接将 Web 应用程序的 url 作为来自 Internet Explorer 的参数
  • Python ntplib 响应中的所有字段是什么?它们是如何使用的?

    我想测量本地时钟和 运行 NTP 服务器的远程处理器 我可以获得响应的 tx time 如下所示 但更好的估计将包括对网络延迟的一些估计 NTP 响应消息中还应使用其他字段 import ntplib from time import ct
  • Jquery Datatable:makeEditable 不是函数错误

    这是我的代码 但它在 firebug 上出错说 updateTable dataTable bServerSide true sAjaxSource UpdateTS bProcessing true aoColumns sName ID
  • view_config 装饰器中的多个权限?

    我正在为基于 Pyramid 框架的 Web 应用程序配置访问控制 我正在使用以下命令为我的视图可调用对象设置权限 view config装饰师 我有两个权限 即 read and write 现在 我想要某些观点需要both权限 我无法弄
  • 如何在 javascript canvas 中绘制并将其与形状进行比较?

    因此 为了简短起见 我想知道如何能够跟踪用户从点击到松开的绘图 并将其与完美的圆形进行比较以检查其准确性 这可能吗 如果可能的话 与完美圆相比 检查其准确性的最佳方法是什么 如何 还想一下 如果用户画了一个圆 但起点和终点不完全重合 也许画
  • 尝试在脚本中将子项设置为我的游戏对象时发生错误

    GameObject enemy Instantiate spawnObject spawnPosition spawnObject transform rotation as GameObject enemy transform pare
  • 如何在 Ubuntu Docker 镜像中运行 wget?

    我正在尝试在 Ubuntu 容器中下载 Debian 软件包 如下所示 sudo docker run ubuntu 14 04 wget https downloads packages s3 amazonaws com ubuntu 1
  • logrotate 后缀:dateext + 旋转

    是否可以同时使用 dateext 和旋转选项 配置必须如下所示 var log verybig log monthly size 100M dateext dateformat Y m rotate 5 create missingok c
  • 我应该在实现文件中使用未命名的名称空间吗?

    我在外部 cpp 文件中定义了一些函数 这里不涉及类 当然还有一个合适的 h 文件 使用了 cpp文件中的一些函数only在该 cpp 文件中没有其他地方 它们甚至没有在 h 文件中提及 我应该将这些函数放入未命名的命名空间中 还是可以将它
  • 无法从 Task<> 隐式转换类型

    我正在尝试掌握 NET 4 5 中的异步方法语法 我认为我已经完全理解了这些示例 但是无论异步方法的类型是什么 即Task
  • 如何将 STDIN 内容转换为数组?

    我有一个包含以下内容的文件 INPUT 123 n 456 n 789 我想像这样运行我的脚本 script rb myArray STDIN to s myArray split n puts field size 我预计会打印 3 但我
  • 如何集成Neo4j数据库、NestJS框架和GraphQL?

    我正在尝试将我的 REST API NestJS 与带有 GraphQL 查询的新 Neo4j 数据库集成 有人成功吗 提前致谢 编辑1 我添加了我的代码 import Resolver from nestjs graphql import
  • 如何减少 Perl CGI 脚本的启动时间?

    我正在开发一些 CGI 脚本 并且正在尝试找到一种解决方案来减少使用 use 导入大量模块时产生的 启动时间 Update 提供的解决方案很好 但我正在使用的脚本在控制台和 CGI 模式下运行 检查是否存在一些典型的 HTTP 环境变量 在
  • Android 状态栏通知:使其不可清除并返回到应用程序(不启动新实例)

    我正在开发一个 Android 应用程序 我想要一个用户无法清除的状态栏通知 有谁知道这是怎么做到的吗 我在 Skimble 等应用程序中见过它们 在使用该应用程序时会出现不可清除的通知 另外 当用户单击 按下通知时 我希望它返回到已经运行
  • 如何指定指向重载函数的指针?

    我想将重载函数传递给std for each 算法 例如 class A void f char c void f int i void scan const std string s std for each s begin s end
  • 修剪 JSON.NET 中的 json 字符串

    我在用JObject ToString 方法将 JSON 对象转换为字符串 但是如何修剪输出以删除标记之间的空格 无需求助于使用正则表达式 只需使用Formatting None option string json jObject ToS
  • 'Class.forName("org.sqlite.JDBC");' 是什么意思做?

    我正在尝试使用 SQLite 数据库创建一个简单的应用程序 我选择使用SQLiteJDBC 驱动程序 http www zentus com sqlitejdbc 下面的代码取自上述网站 我的问题是关于 public static void