JDBC连接

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 transactionconnection.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:查询数据库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/59773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

100天精通Golang(基础入门篇)——第19天:深入剖析Go语言中方法(Method)的妙用与实践

🌷🍁 博主猫头虎 带您 Go to Golang Language.✨✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1…

【SQL】关系模型与查询和更新数据

一、关系模型 1.1 主键 主键是关系表中记录的唯一标识。主键的选取非常重要:主键不要带有业务含义,而应该使用BIGINT自增或者GUID类型。主键也不应该允许NULL。 可以使用多个列作为联合主键,但联合主键并不常用。 1.2 外键 FOREIGN KEY …

剪绳子c、c++实现

给你一根长度为 n 的绳子&#xff0c;请把绳子剪成整数长的 m 段&#xff08; m 、 n 都是整数&#xff0c; n > 1 并且 m > 1 &#xff0c; m < n &#xff09;&#xff0c;每段绳子的长度记为 k[1],...,k[m] 。请问 k[1]*k[2]*...*k[m] 可能的最大乘积是多少&#x…

函数(个人学习笔记黑马学习)

1、函数定义 #include <iostream> using namespace std;int add(int num1, int num2) {int sum num1 num2;return sum; }int main() {system("pause");return 0; } 2、函数的调用 #include <iostream> using namespace std;int add(int num1, int num2…

【DRONECAN】(三)WSL2 及 ubuntu20.04 CAN 驱动安装

【DRONECAN】&#xff08;三&#xff09;WSL2 及 ubuntu20.04 CAN 驱动安装 前言 这一篇文章主要介绍一下 WSL2 及 ubuntu20.04 CAN 驱动的安装&#xff0c;首先说一下介绍本文的目的。 大家肯定都接触过 ubuntu 系统&#xff0c;但是我们常用的操作系统都是 Windows&#x…

C++------map和set的使用

文章目录 关联式容器键值对树型结构的关联式容器set的介绍map的介绍 关联式容器 什么是关联式容器&#xff1f;它与序列式容器有什么区别&#xff1f; 关联式容器也是用来存储数据的&#xff0c;与序列式容器不同的是&#xff0c;其里面存储的是<key&#xff0c;value>结…

【拾枝杂谈】从游戏开发的角度来谈谈原神4.0更新

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;结合最近的学习内容和以后自己的目标&#xff0c;今天又开了杂谈这个新坑&#xff0c;分享一下我在学习游戏开发的成长和自己的游戏理解&#xff0c;当然现在还是一枚…

【LeetCode75】第三十九题 二叉树的右视图

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一棵二叉树&#xff0c;让我们返回站在二叉树右边从上到下看到的节点。 那实际上就是要我们对二叉树进行层序遍历&#xff0c…

js判断对象是否为空对象的方法总结

js判断对象是否为空对象的方法总结 方法1&#xff1a;JSON.stringify()方法方法2&#xff1a;for in方法方法3&#xff1a;Object.keys()方法方法4&#xff1a;Object.getOwnPropertyNames()方法方法5&#xff1a;jquery 的 isEmptyObject()方法 在面试或者开发过程中&#xff…

effective c++ 笔记

TODO&#xff1a;还没看太懂的篇章 item25 item35 模板相关内容 文章目录 基础视C为一个语言联邦以const, enum, inline替换#define尽可能使用constconst成员函数 确定对象使用前已被初始化 构造、析构和赋值内含引用或常量成员的类的赋值操作需要自己重写不想使用自动生成的函…

108页石油石化5G智慧炼化厂整体方案PPT

导读:原文《108页石油石化5G智慧炼化厂整体方案PPT》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。以下是部分内容,

Deepin添加Ubuntu源

升级Deepin V23后&#xff0c;无法安装Zeal了&#xff0c;后面发现可以通过ubuntu源来安装。参考了以下两个文档。 添加Ubuntu源1 添加Ubuntu源2 1.添加ubuntu.list sudo vim /etc/apt/sources.list.d/ubuntu.list 2.添加中科大Ubuntu源 deb http://mirrors.ustc.edu.cn/…

Kafka监控工具,LinkedIn详解

Kafka监控工具包括以下几种&#xff1a; Kafka Manager&#xff1a;这是一个开源的Kafka集群管理工具&#xff0c;可以监控Kafka集群的健康和性能&#xff0c;并提供可视化的用户界面。 Kafka Monitor&#xff1a;这是LinkedIn开发的一个监控工具&#xff0c;可以监控Kafka集群…

PKI/CA体系介绍

概述 目前最常用的第三方认证服务包括&#xff1a;PKI/CA和Kerberos。PKI/CA是基于非对称密钥体系的&#xff0c;Kerberos是基于对称密钥体系的。 数字证书&#xff1a;提供一种发布公钥的简便途径&#xff1b; 数字签名&#xff1a;用来确认信息发送者的身份&#xff0c;保证…

win11出现安全中心空白和IT管理员已限制对此应用的某些区域的访问

问题 windows安全中心服务被禁用 winr 输入services.msc 找到windows安全中心服务查看是否被禁用&#xff0c;改为启动&#xff0c;不可以改动看第三条 打开设置&#xff0c;找到应用—windows安全中心–终止–修复–重置 重启如果还是不行看第四条 家庭版系统需要打开gped…

设计模式大白话——命令模式

命令模式 一、概述二、经典举例三、代码示例&#xff08;Go&#xff09;四、总结 一、概述 ​ 顾名思义&#xff0c;命令模式其实和现实生活中直接下命令的动作类似&#xff0c;怎么理解这个命令是理解命令模式的关键&#xff01;&#xff01;&#xff01;直接说结论是很不负责…

【设计模式】Head First 设计模式——桥模式 C++实现

设计模式最大的作用就是在变化和稳定中间寻找隔离点&#xff0c;然后分离它们&#xff0c;从而管理变化。将变化像小兔子一样关到笼子里&#xff0c;让它在笼子里随便跳&#xff0c;而不至于跳出来把你整个房间给污染掉。 设计思想 桥模式。将抽象部分(业务功能)与实现部分(平…

Mysql B+数索引结构

一、B树和B树区别 二、 B 树形成过程 三、页分裂过程 3.1 页分裂过程实例 3.1.1 原有数据1、3、5形成如下数据页 3.1.2 先新插入数据4&#xff0c;因为 页10 最多只能放3条记录所以我们不得不再分配一个新页&#xff1a; 新分配的数据页编号可能并不是连续的&#xff0c;也…

iOS逆向:越狱及相关概念的介绍

在上一篇内容中我们介绍了App脱壳的技术&#xff0c;今天我们来介绍一个和iOS逆向密切相关的知识&#xff1a;越狱。 iOS操作系统的封闭性一直是开发者们关注的焦点之一。为了突破Apple的限制&#xff0c;越狱技术应运而生。本文将深入探讨iOS越狱&#xff0c;包括可越狱的版本…

【C语言】每日一题(除自身以外数组的乘积)

添加链接描述&#xff0c;链接奉上 方法&#xff1a; 暴力循环:前缀积后缀积&#xff08;分组&#xff09;: 暴力循环: 暴力循换真的是差生法宝&#xff0c;简单好懂&#xff0c;就是不实用&#xff0c;大多数的题目都会超过时间限制&#xff08;无奈&#xff09; 思路&…