JDBC连接

2023-11-13

JDBC连接

  • 加载JDBC驱动程序
  • 打开JDBC连接
    • 打开带有URL的连接
    • 使用URL、用户和密码打开连接
    • 使用URL和属性打开连接
  • 关闭JDBC连接
    • 通过Try With Resources关闭连接
  • setAutoCommit()
  • commit()
  • rollback()
  • createStatement()
  • prepareStatement()
  • getMetaData()

JDBC连接类java.sql.Connection表示到关系数据库的数据库连接。在通过JDBC从数据库读取数据或向数据库写入数据之前,您需要打开与数据库的连接。本JDBC连接教程将向您展示如何做到这一点。

加载JDBC驱动程序

在打开到数据库的JDBC连接之前,您需要做的第一件事是加载数据库的JDBC驱动程序。事实上,从Java6开始,这不再是必要的,但这样做不会失败。您可以像这样加载JDBC驱动程序:

Class.forName(“driverClassName”);

每个JDBC驱动程序都有一个主驱动程序类,该类在加载驱动程序时初始化驱动程序。例如,要加载Oracle驱动程序,可以编写以下内容:

Class.forName(oracle.jdbc.driver.OracleDriver);

你只需要加载一次驱动程序。您不需要在每次连接打开之前加载它。仅在第一个JDBC连接打开之前。

打开JDBC连接

通过调用java.sql.DriverManager类方法getConnection()打开JDBC连接。这种方法有三种变体。我将在以下部分中展示每种变体。

打开带有URL的连接

第一种方法变体只将数据库的URL作为参数。以下是仅使用URL作为参数调用getConnection()的方式:

String url = "jdbc:oracle:thin:@127.0.0.1:1522:cs";
Connection connection = DriverManager.getConnection(url);

url是数据库的url。您应该查看数据库和JDBC驱动程序的文档,以了解特定数据库的格式。上面显示的url是一个Oracle。

使用URL、用户和密码打开连接

getConnection()的第二个变体将数据库URL、用户名和密码作为参数。下面是一个调用getConnection()变体的示例:

String url = "jdbc:oracle:thin:@127.0.0.1:1522:cs";
String user = "test";
String password = "password";

Connection connection =
    DriverManager.getConnection(url, user, password);

用户和密码参数是数据库的用户名和密码。

使用URL和属性打开连接

getConnection()的第三个变体采用数据库URLProperties对象作为参数。以下是调用getConnection()的此变体的示例:

String url = "jdbc:oracle:thin:@127.0.0.1:1522:cs";

Properties properties = new Properties( );
properties.put( "user", "test" );
properties.put( "password", "password" );

Connection connection =
    DriverManager.getConnection(url, properties);

Properties对象用于在打开连接时传递数据库所需的特殊属性。给定数据库到底需要什么属性,取决于数据库及其功能等。您必须查看给定数据库及其JDBC驱动程序的文档才能了解这一点。

关闭JDBC连接

一旦你使用完数据库连接,你就应该关闭它。这是通过调用connection.close()方法来完成的,如下所示:

connection.close();

完成JDBC连接后关闭它很重要。数据库连接占用大量资源,无论是在您自己的应用程序中,还是在数据库服务器上。因此,保持未使用的数据库连接处于打开状态将需要数据库保留为该连接分配的不必要资源。

通过Try With Resources关闭连接

可以通过Java 7中添加的Java Try with resources构造自动关闭JDBC连接。以下是如何做到这一点的示例:

String url = "jdbc:oracle:thin:@127.0.0.1:1522:cs";
String user = "test";
String password = "password";

try(Connection connection =
    DriverManager.getConnection(url, user, password)) {

    //use the JDBC Connection inhere
}

正如您所看到的,JDBC连接是在try块的括号中打开的。在try块中,您可以像往常一样使用数据库连接。一旦执行退出try块,JDBC连接将自动为您关闭。这样您就不会忘记自己关闭JDBC连接。

setAutoCommit()

JDBC连接setAutoCommit()方法用于将连接切换到或退出自动提交模式。在自动提交模式下,发送到数据库的每个更新都将立即提交,就像在自己的事务中执行一样。当不处于自动提交模式时,必须通过调用Connection commit()方法显式提交每个数据库事务。在后面的JDBC事务章节有更详细的解释
以下是将JDBC连接切换到自动提交模式的示例:

connection.setAutoCommit(true);

下面是一个将JDBC连接从自动提交模式切换出来的示例:

connection.setAutoCommit(false);

如果没有指定自动提交模式,JDBC连接的默认模式是打开自动提交模式。

commit()

JDBC Connection commit()方法提交事务。JDBC事务教程中详细介绍了事务的工作方式和处理方式。下面是一个通过JDBC连接提交事务的简单示例。请注意,正确的异常处理已被排除在本示例之外,以使其简洁明了。

connection.setAutoCommit(false);

//对JDBC连接执行操作
//将成为事务的一部分
connection.commit();

请记住,如果事务中的某些操作失败,您很可能希望调用rollback()方法而不是commit()

rollback()

Java JDBC Connection rollback()方法回滚当前正在进行的事务中执行的操作。JDBC事务教程中详细介绍了如何处理对commit()和/或rollback()的调用。下面是一个调用JDBC Connection rollback()方法的简单示例:

try{
    connection.setAutoCommit(false);

    // perform operations on the JDBC Connection
    // which are to be part of the transaction

    connection.commit();
} catch (SQLException e) {
    connection.rollback();
}

请注意rollback()是如何在try-catch块的catch块中调用的。如果在尝试执行事务中的操作时抛出异常,则会回滚整个事务。

createStatement()

JDBC连接createStatement()创建一个JDBC语句对象。语句实例可用于对数据库执行SQL更新,或对数据库执行SQL查询。以下是通过JDBC Connection createStatement()方法创建JDBC语句实例的示例:

Statement statement = connection.createStatement();

JDBC Connection createStatement()创建一个JDBC PreparedStatement对象。PreparedStatement实例可用于对数据库执行SQL更新,或对数据库执行SQL查询。以下是通过JDBC Connection createStatement()方法创建JDBC prepareStatement实例的示例:

String sql = "select * from test where id=?";

PreparedStatement preparedStatement =
        connection.prepareStatement(sql);

getMetaData()

JDBC Connection getMetaData()方法返回一个JDBC DatabaseMetaData对象,该对象可用于内省JDBC Connection连接到的数据库。JDBC DatabaseMetaData教程介绍了如何使用DatabaseMetaData。以下是通过JDBC Connection getMetaData()方法创建JDBC DatabaseMetaData对象的示例:

DatabaseMetaData databaseMetaData = connection.getMetaData();

下一篇:JDBC:查询数据库

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDBC连接 的相关文章

  • 如果列名不同,则一对多休眠连接

    我有三个具有以下结构的表 合同 gt Contract id 主要 customer company id Vendor company id 公司 gt Company id 主要 创建日期 创建者 Company Timeline gt
  • android.view.InflateException:二进制 XML 文件行 #11:膨胀类 ImageView 时出错

    我只是尝试制作一个小的 android java xml 应用程序来计算游戏的分数 它给了我这个错误 Error inflateing class ImageView 有人知道解决方案吗 我实际上搜索了 ppl 说添加这个 android
  • 如何提取文件 jre-9/lib/modules?

    In JRE 9 lib目录 至少在 Windows 上 有一个名为modules其大小约为107 MB 是否可以提取该文件或在其中列出 java 模块 我可以看到一个名为jmod可以在jdk 9 bin jmod exe 但那是为了阅读
  • JavaFX 2.0 FXML 子窗口

    经过多次搜索我发现了这个问题如何创建 javafx 2 0 应用程序 MDI https stackoverflow com questions 10915388 how to create a javafx 2 0 application
  • 在 Java 中从 SOAPMessage 获取原始 XML

    我已经在 J AX WS 中设置了 SOAP WebServiceProvider 但我无法弄清楚如何从 SOAPMessage 或任何 Node 对象获取原始 XML 下面是我现在获得的代码示例 以及我试图获取 XML 的位置 WebSe
  • 尝试获取屏幕上绘制的每个随机圆圈的 x、y 坐标

    您好 我正在制作一款游戏 该游戏将在屏幕上创建随机圆圈 随机创建的圆圈的值为红色或绿色 我的问题是 我希望不仅能够确定用户何时单击其中一个圆圈 而且还能够确定他们最终单击的圆圈 红色或绿色 下面是我的代码 我的主要问题是试图找到将要绘制的圆
  • 检查 IPv4 地址是否在私有范围内

    在 Python 中 使用 IPy 模块您可以执行以下操作 gt gt gt ip iptype PRIVATE 有没有一个库或简单的方法可以在 Java 中执行相同的操作 似乎不完全是但是InetAddress有一些 isXX 方法 例如
  • 使用 JSch 分别为各个提示提供输入

    问题是 SSH 连接需要在常规登录后提供另一个用户 ID 和密码信息 我正在使用 JSch 连接到远程服务器 它接受以下形式的输入InputStream 和这个InputStream只能通过一次 由于会话是交互式的 这会导致问题 我尝试将输
  • Android volley使用RequestFuture.get()时出现超时异常

    在我的片段中 我尝试使用 TMDB 的开放电影数据库来获取有关 正在播放 电影的详细信息 如果我使用 RequestFuture get time TimeUnit 方法来执行此齐射请求 我总是会收到超时错误 如果我在 Safari 中手动
  • Java - JPanel 内有边距和 JTextArea

    我想创建这样的东西 主面板有其边距 x 并且 TextArea 位于该面板的中心 几乎填满了面板 底部是另一个具有自定义尺寸 高度 y 的面板 可以使用某些快捷方式将其切换为可见和不可见 底部面板有 FlowLayout 和几个元素 问题是
  • 从 HttpClient 3 转换为 4

    我已经成功地对所有内容进行了更改 但以下内容除外 HttpClient client HttpPost method client new DefaultHttpClient method new HttpPost url InputStr
  • Cucumber DataTable 错误 - io.cucumber.datatable.UndefinedDataTableTypeException:无法将 DataTable 转换为 cucumber.api.DataTable

    尝试使用 cucumber selenium java intelliJ 运行场景 但在其中一个步骤中出现有关 DataTable 的错误 在我开始使用测试运行程序并更改周围的一些内容之前 数据表工作正常并正确转换该步骤的参数 但我就是无法
  • Android 解析 JSON 卡在 get 任务上

    我正在尝试解析一些 JSON 数据 我的代码工作了一段时间 我不确定我改变了什么突然破坏了代码 当我运行代码时 我没有收到任何运行时错误或警告 我创建一个新的 AsyncTask 并执行它 当我打电话时 get 在这个新任务中 调试器在此行
  • 多线程——更快的方法?

    我有一堂有吸气剂的课程getInt 和一个二传手setInt 在某个领域 比如说领域 Integer Int 一个类的一个对象 比如说SomeClass The setInt 这里是同步的 getInt isn t 我正在更新的值Int来自
  • MongoDB java 驱动程序 3.0 在身份验证时无法捕获异常

    我超级卡住o 0 在尝试通过 Java 驱动程序进行身份验证时 存在捕获异常的问题 正如你可能会看到的Throwable类不工作 private MongoClient mongoClient private MongoDatabase m
  • JAXB 编组器无参数默认构造函数

    我想从 java 库中编组一个 java 对象 当使用 JAXB marschaller 编组 java 对象时 我遇到了一个问题 A 类没有无参数默认构造函数 我使用Java Decompiler来检查类的实现 它是这样的 public
  • 在循环中按名称访问变量

    我正在开发一个 Android 项目 并且有很多可绘制对象 这些绘图的名称都类似于icon 0 png icon 1 png icon 100 png 我想将这些可绘制对象的所有资源 ID 添加到整数 ArrayList 中 对于那些不了解
  • Java 中处理异步响应的设计模式

    我读过类似问答的答案 如何在 JAVA 中创建异步 HTTP 请求 https stackoverflow com questions 3142915 how do you create an asynchronous http reque
  • Java String ReplaceAll 方法给出非法重复错误?

    我有一个字符串 当我尝试运行时replaceAll方法 我收到这个奇怪的错误 String str something op str str replaceAll o n it works fine str str replaceAll n
  • JPA 将 BigDecimal 作为整数保存在数据库中

    我在数据库中有这个字段 ITEMCOST NUMERIC 13 DEFAULT 0 NOT NULL 在JAVA中 Entity中的字段定义如下 Column name ITEMCOST private BigDecimal itemCos

随机推荐

  • 基于CH340的一键下载电路

    一 CH340简介 CH340 是一个 USB 总线的转接芯片 实现 USB 转串口或者 USB 转打印口 CH340是国产芯片 应用场合居多 市场占有率很高 常用的USB转串口芯片还有CP2102 PL2303 FT232等 相比之下CH
  • Vue的页面跳转与刷新

    Vue刷新页面 在开发的过程中 有时候我们需要刷新整个页面 this router go 0 Vue页面跳转 例如 在用户登录成功之后跳转到系统首页 this router push home
  • 基础算法题——虫洞(简单版、vector)

    虫洞 简单 题目链接 解题步骤 求出第 i 个星球作为中心子星系时 f i 的大小 对每个 i 与 n f i 异或后的结果相加 再对998244353取模即可得到答案 问题关键点 求第 i 个星球 f i 的大小 个人解题思路 暴力 利用
  • cpython下载_一、Python简介及下载安装

    一 关于Python Python是目前比较受欢迎的脚本语言之一 具有简洁性 易读性以及可扩展性的特点 Python与Java均可以写网页 也可以写后台功能 区别是Python执行效率低 开发效率高 而Java执行效率高 开发效率低 pyt
  • Linux--vim安装、简介、模式及命令

    目录 1 vim简介 1 命令模式转为插入模式 2 命令模式转为末行模式 3 转换图 4 vim常用命令 复制 删除 1 删除 2 拷贝 3 粘贴 4 撤销 5 恢复撤销 6 替换 7 光标移动 1 行开头 2 行末尾 3 最后一行 4 第
  • SAP 销售订单及发票 利润中心替代 Userexit出口 配置及程序

    在跨公司销售业务中 跨公司销售订单的发票时无法从销售订单中将利润中心带到发票中 所以在跨公司的发票创建过程中需要配置出口来获取对应销售订单行项目的利润中心 事务代码 0KEM 配置步骤 1 创建一个新的替代 2 创建一个步骤 3 维护一个先
  • 华为数通方向HCIP-DataCom H12-831题库(单选题:1-20)

    第1题 关于IPSG下列说法错误的是 A IPSG可以防范IP地址欺骗攻击 B IPSG是一种基于三层接口的源IP地址过滤技术 C IPSG可以开启IP报文检查告警功能 联动网管进行告警 D 可以通过IPSG防止主机私自更改IP地址 答案
  • 更改默认滚动条的样式

    在前端开发的过程中 通常会需要更改滚动条的默认样式 代码如下 webkit scrollbar 滚动条整体样式 width 4px 高宽分别对应横竖滚动条的尺寸 height 1px webkit scrollbar thumb 滚动条里面
  • echarts前后端交互数据_Web的前后端交互

    1503年 列奥纳多 达 芬奇回到佛罗伦萨 开始绘制 蒙娜丽莎 耗时四年 塑造了资本主义上升时期一位城市有产阶级的妇女形象 将自己内心的的妇女通过画卷展示给了众人 期间无数的灵感 无数的情绪 无数的状态这是大家不能所得知的 更不用说付出的心
  • MAC系统 批量删除一个项目中的所有.svn

    打开终端 进入项目所在的文件夹 使用命令find type d name svn xargs rm rvf就可将项目的 svn全部删除
  • Oracle存储过程总结(一、基本应用)

    1 创建存储过程 create or replace procedure test var name 1 in type var name 2 out type as 声明变量 变量名 变量类型 begin 存储过程的执行体 end tes
  • React系列之useState

    目录 1 基础使用 2 状态的读取和修改 3 组件的更新过程 4 使用规则 1 基础使用 作用 useState为函数组件提供状态 state 使用步骤 导入 useState 函数 调用 useState 函数 并传入状态的初始值 从us
  • 人脸识别刷脸以往大多应用在安防领域

    最近你会看到各大媒体 网络平台都是关于刷脸的报道 感觉不聊聊刷脸是不是就已经跟这个时代脱节了 简单的说 刷脸支付是一种连手机都不需要的新型支付方式 刷脸支付意味着在手机没电 信号不好 因为卡顿打不开支付宝和微信 甚至出门忘记带手机时也能完成
  • AMBA低功耗接口(一)Q_Channel

    AMBA提供了 低功耗的接口 用于实现power控制功能 目前 AMBA里面 包含2种低功耗接口 Q Channel 实现简单的power控制 如上电 下电 P Channel 实现复杂的power控制 如全上电 半上电 1 4上电等 AR
  • 微服务springcloud环境下基于Netty搭建websocket集群实现服务器消息推送----netty是yyds

    netty搭建websocket 1 背景 2 websocket 3 netty 3 1 socket 3 2 Java IO模型 3 3 netty 3 3 1 概念 3 3 2 三大特点 3 3 3 主从Reactor架构图 3 3
  • 期货基础知识

    一 期货是什么 期货是与现货相对应 并由现货衍生而来 期货通常指期货合约 期货与现货完全不同 现货是实实在在可以交易的货 商品 期货主要不是货 而是以某种大众产品如棉花 大豆 石油等及金融资产如股票 债券等为标的标准化可交易合约 因此 这个
  • C++11下的单例模式

    动机 在软件系统中 经常有这样一些特殊的类 必须保证它们在系统中只存在一个实例 才能确保它们的逻辑正确性 以及良好的效率 绕过常规的构造器 提供一种机制来保证一个类只有一个实例 定义 保证一个类仅有一个实例 并提供一个该实例的全局访问点 1
  • Java 反射小案例(使用配置文件)

    Java 反射小案例 使用配置文件 记录学习过程 定义两个类一个Student 一个Person 还有一个 主类Reflect Test 再加一个配置文件 两类 public class Student public void sleep
  • RabbitMQ死信队列学习笔记

    视频地址 死信的概念 先从概念解释上搞清楚这个定义 死信 顾名思义就是无法被消费的消息 字面意思可以这样理解 一般来说 producer 将消息投递到 broker 或者直接到 queue 里了 consumer 从 queue 取出消息进
  • JDBC连接

    JDBC连接 加载JDBC驱动程序 打开JDBC连接 打开带有URL的连接 使用URL 用户和密码打开连接 使用URL和属性打开连接 关闭JDBC连接 通过Try With Resources关闭连接 setAutoCommit commi