JDBC的API详解

news2024/10/7 20:35:44

🍎道阻且长,行则将至。🍓


 目录

一、DriverManager 驱动管理类

1.注册驱动

2.获取数据库连接

二、Connection 数据库连接对象

1.获取执行对象

2.事务管理

三、Statement

1.执行DDL、DML语句

2.执行DQL语句

四、ResultSet


以JDBC快速入门的例子为引,使用JDBC有驱动管理,连接对象,执行SQL、查询语句等,下面将对JDBC中常见API进行解释。

public static void main(String[] args) throws Exception {
        //1. 注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2. 获取连接
        String url = "jdbc:mysql://127.0.0.1:3306/db1";
        String username = "root";
        String passd = "1234";
        Connection conn = DriverManager.getConnection(url, username, passd);
        //3. 定义sql
        String sql = "update account set money = 2000 where id = 1";
        //4. 获取执行sql的对象 Statement
        Statement stmt = conn.createStatement();
        //5. 执行sql
        int count = stmt.executeUpdate(sql);//受影响的行数
        //6. 处理结果
        System.out.println(count);
        //7. 释放资源
        stmt.close();
        conn.close();
    }

一、DriverManager 驱动管理类

1.注册驱动

在入门案例中我们使用的是:

Class.forName("com.mysql.jdbc.Driver");

先跳转到Driver具体来看,在mysql.jdbc中的Driver类中:

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    public Driver() throws SQLException {
    }
    static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }
}

静态代码块执行 DriverManager 对象的 registerDriver() 方法进行驱动的注册,只要加载 Driver 类,该静态代码块就会执行案例中的Class.forName("com.mysql.jdbc.Driver"); 就会加载 Driver 类。

p:在MySQL 5之后的驱动包,可以省略注册驱动的步骤,

 自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类。

2.获取数据库连接

使用的是DriverManager的getConnection方法,方法有三个参数:String url, String user, String password,分别是数据库连接路径、用户名及密码。

    @CallerSensitive
    public static Connection getConnection(String url,
        String user, String password) throws SQLException {
        java.util.Properties info = new java.util.Properties();

        if (user != null) {
            info.put("user", user);
        }
        if (password != null) {
            info.put("password", password);
        }

        return (getConnection(url, info, Reflection.getCallerClass()));
    }

连接路径url,通常我们这样写:

jdbc:mysql://ip地址(或域名):端口号/数据库名称?参数键值对1&参数键值对2

  • 对于本地mysql服务器,且默认端口3306,可以简写:jdbc:mysql:///数据库名称?参数键值对 
  • 添加参数键值对:useSSL=false,禁用安全连接方式,可以解决警告提示。对于多个键值对使用&连接。

二、Connection 数据库连接对象

作用是获取执行 SQL 的对象、管理事务。

1.获取执行对象

普通执行SQL对象—Statement

//4. 获取执行sql的对象 Statement
Statement stmt = conn.createStatement();

还有不是普通的:

预编译SQL的执行SQL对象

Creates a CallableStatement object for calling database stored procedures.The CallableStatement object provides methods for setting up its IN and OUT parameters, and methods for executing the call to a stored procedure.

创建用于调用数据库存储过程的CallableStatement对象。CallableStatement对象提供了设置其IN和OUT参数的方法,以及执行对存储过程的调用的方法。

注意:此方法针对处理存储过程调用语句进行了优化。当prepareCall方法完成时,某些驱动程序可能会将call语句发送到数据库;其他的可以等到CallableStatement对象执行完。这对用户没有直接影响;但是,它确实会影响哪个方法抛出某些SQL Exceptions。

执行存储过程的

Converts the given SQL statement into the system's native SQL grammar. A driver may convert the JDBC SQL grammar into its system's native SQL grammar prior to sending it. This method returns the native form of the statement that the driver would have sent.

将给定的SQL语句转换成系统的本机SQL语法。驱动程序可以在发送之前将JDBC SQL语法转换成其系统的本地SQL语法。

p:存储过程在MySQL中不常用。

2.事务管理

MySQL有以下事务管理的操作:

开启事务 : BEGIN;   START TRANSACTION;

提交事务 : COMMIT;

回滚事务 : ROLLBACK;

JDBC在Connection接口中定义了3个对应的事务管理方法:

void setAutoCommit(boolean autoCommit) throws SQLException;
//开启事务需要将该参数设为为false
void commit() throws SQLException;
void rollback() throws SQLException;

执行一个简单事务例子:

//定义了两个要执行的sql
String sql = "update account set money = 2000 where id = 2";
String sql2 = "update account set money = 2000 where id = 1";

// 开启事务 【连接conn、执行sql的对象 Statement stmt】
try {
    conn.setAutoCommit(false);
    int count = stmt.executeUpdate(sql);//受影响的行数
    System.out.println(count);
    int count2 = stmt.executeUpdate(sql2);//受影响的行数
    System.out.println(count2);
}catch (Exception throwables){
    conn.rollback();
}

三、Statement

作用就是执行SQL语句。

1.执行DDL、DML语句

例如上一个例子中的 int count = stmt.executeUpdate(sql);   ,executeUpdate就是用于执行DDL和DML的。

2.执行DQL语句

对于一个DQL查询语句使用是executeQuery

String sql = "select * from account";

ResultSet rs=stmt.executeQuery(sql);

这个方法使用到了 ResultSet结果集 对象,封装了SQL查询语句的结果。

四、ResultSet

上一节提到ResultSet,封装了SQL查询语句的结果。我们打开ResultSet接口,其中定义了next和一些getXxx方法来操作查询结果:

boolean next() throws SQLException;

String getString(int columnIndex) throws SQLException;
boolean getBoolean(int columnIndex) throws SQLException;
byte getByte(int columnIndex) throws SQLException;
int getInt(int columnIndex) throws SQLException;
double getDouble(int columnIndex) throws SQLException;
......
String getString(String columnLabel) throws SQLException;
......
  • next();

将光标从当前位置向前移动一行,判断当前行是否为有效行。(就是找数据库表下一行)

方法返回值:

true :当前行有数据

false :当前行没有数据

  • getXxx(参数);

获取数据。

参数有两种类型:

int类型的参数:列的编号,从1开始

String类型的参数: 列的名称

  • 例,定义查询sql并显示查询内容;

String sql = "select * from account";

 

  • close  最后也是需要释放资源。

void close() throws SQLException;

rs.close();


☕物有本末,事有终始,知所先后。🍭

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

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

相关文章

【漏洞复现】Grafana任意文件读取(CVE-2021-43798)

docker环境搭建 #进入环境 cd vulhub/grafana/CVE-2021-43798#启动环境,这个过程可能会有点慢,保持网络通畅 docker-compose up -d#查看环境 docker-compose ps直接访问虚拟机 IP地址:3000 目录遍历原理 目录遍历原理:攻击者可以通过将包含…

CNCF x Alibaba云原生技术公开课 第七章 应用编排与管理:Job和DaemonSet

1、Job:管理任务的控制器 概念 首先 kubernetes 的 Job 是一个管理任务的控制器,它可以创建一个或多个 Pod 来指定 Pod 的数量,并可以监控它是否成功地运行或终止;可以根据 Pod 的状态来给 Job 设置重置的方式及重试的次数&…

【Qt网络编程】实现TCP协议通信

文章目录概要:本期主要讲解QT中对于TCP协议通信的实现。一、TCP协议二、Qt中TCP协议处理1.QTcpSocket2.QTcpServer三、Qt实现TCP通信1.客户端2.服务器端结尾概要:本期主要讲解QT中对于TCP协议通信的实现。 一、TCP协议 传输控制协议(TCP&am…

有哪些值得推荐的办公软件下载网站

新买了电脑之后,我们需要安装一些常用的办公软件才能方便我们的办公使用。很多小白不知道在哪里下载办公软件比较好,下面小编就来为大家分享几个值得推荐的办公软件下载网站。 1.常用软件下载 对于常用软件如果我们通过百度搜索,能够辨别官方…

【2】Dijkstra与SPFA等常见最短路算法的分析与比较——Bellman-Ford与SPFA

合集目录: 前言 一、Dijkstra 二、Bellman-Ford与SPFA(本文) 三、Dijkstra与SPFA的比较 四、Floyd 五、启发式搜索 Bellman-Ford 1. 算法介绍 The algorithm was first proposed by Alfonso Shimbel (1955), but is instead named af…

哪个牌子的洗地机耐用?耐用的洗地机推荐

作为当下非常热销的洗地机,它不仅解放了双手,使用也非常的便捷。是生活品质提高的最好代表,但是面对市面上让人眼花缭乱的洗地机,挑选几个来回都决定不了到底入手哪个好!为了能帮助大家选购到合适的洗地机,…

gcc 编译的过程

#include <stdio.h> #define PI 3.14 int main(int argc, char const *argv[]) { //打印IP的值printf("PI %lf\n", PI);return 0; }编译的过程&#xff1a;预处理、编译、汇编、链接1.预处理&#xff1a;宏替换、删除注释、头文件包含、条件编译 -E &#xf…

问心 | 再看token、session和cookie

什么是cookie HTTP Cookie&#xff08;也叫 Web Cookie或浏览器 Cookie&#xff09;是服务器发送到用户浏览器并保存在本地的一小块数据&#xff0c;它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。 什么是session Session 代表着服务器和客户端一次会话…

Paddle项目调试记录

PaddlePaddle是百度公司提出的深度学习框架。近年来深度学习在很多机器学习领域都有着非常出色的表现&#xff0c;在图像识别、语音识别、自然语言处理、机器人、网络广告投放、医学自动诊断和金融等领域有着广泛应用。面对繁多的应用场景&#xff0c;深度学习框架有助于建模者…

MyBatis-Plus(狂神)

一.特点 无侵入&#xff1a;只做增强不做改变&#xff0c;引入它不会对现有工程产生影响&#xff0c;如丝般顺滑损耗小&#xff1a;启动即会自动注入基本 CURD&#xff0c;性能基本无损耗&#xff0c;直接面向对象操作强大的 CRUD 操作&#xff1a;内置通用 Mapper、通用 Serv…

GDB调试快速入门

什么是GDB&#xff1a; GDB - - - (GNU symbolic debugger)是Linux平台下最常用的一款程序调试器。 自己的Linux是否安装GDB? 一般来说&#xff0c;使用Ubuntu的话&#xff0c;系统就会自带的有GDB调试器的 命令窗口输入如下命令可以查看是否安装了gdb&#xff1a; gdb -v …

制作一个简单的信用卡验证表

下载:https://download.csdn.net/download/mo3408/87559584 效果图: 您可以从文章顶部附近的下载按钮获取该项目的完整代码。这些文件的概述如下所示: 我们需要将两个 .css 文件和两个 .js 文件包含在我们的 HTML 中。所有其他资源,例如 Bootstrap 框架、jQuery 和 Web 字…

SecureCRT 安装并绑定ENSP设备终端

软件下载链接链接&#xff1a;https://pan.baidu.com/s/1WFxmQgaO9bIiUTwBLSR4OA?pwd2023 提取码&#xff1a;2023 CRT安装&#xff1a;软件可以从上面链接进行下载&#xff0c;下载完成后解压如下&#xff1a;首先双击运行scrt-x64.8.5.4 软件&#xff0c;进行安装点击NEXT选…

PMP项目管理项目资源管理

目录1 项目资源管理概述2 规划资源管理3 估算活动资源4 获取资源5 建设团队6 管理团队7 控制资源1 项目资源管理概述 项目资源管理包括识别、获取和管理所需资源以成功完成项目的各个过程&#xff0c;这些过程有助于确保项目经理和项目团队在正确的时间和地点使用正确的资源。…

Nacos未授权访问漏洞(CVE-2021-29441)

目录漏洞描述影响范围环境搭建漏洞复现声明&#xff1a;本文仅供学习参考&#xff0c;其中涉及的一切资源均来源于网络&#xff0c;请勿用于任何非法行为&#xff0c;否则您将自行承担相应后果&#xff0c;本人不承担任何法律及连带责任。加粗样式 漏洞描述 Nacos 是阿里巴巴…

Redis缓存双写一致性

目录双写一致性Redis与Mysql双写一致性canal配置流程代码案例双写一致性理解缓存操作细分缓存一致性多种更新策略挂牌报错,凌晨升级先更新数据库,在更新缓存先删除缓存,在更新数据库先更新数据库,在删除缓存延迟双删策略总结双写一致性 Redis与Mysql双写一致性 canal 主要是…

vuex3的介绍与state、actions和mutations的使用

一、定义官网&#xff1a;Vuex 是什么&#xff1f; | Vuex (vuejs.org)Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。二、安装cdn<script src"/path/…

[手撕数据结构]栈的深入学习-java实现

CSDN的各位uu们你们好,今天千泽带来了栈的深入学习,我们会简单的用代码实现一下栈, 接下来让我们一起进入栈的神奇小世界吧!0.速览文章一、栈的定义1. 栈的概念2. 栈的图解二、栈的模拟实现三.栈的经典使用场景-逆波兰表达式总结一、栈的定义 1. 栈的概念 栈&#xff1a;一种…

Optimizers for Deep Learning

文章目录一、Some NotationsWhat is Optimization about?二、SGDSGD with Momentum(SGDM)Why momentum?三、AdagradRMSProp四、AdamSWATS [Keskar, et al., arXiv’17]Towards Improving AdamTowards Improving SGDMRAdam vs SWATSLookahead [Zhang, et al., arXiv’19]Momen…

[洛谷-P3047] [USACO12FEB]Nearby Cows G(树形DP+换根DP)

[洛谷-P3047] [USACO12FEB]Nearby Cows G一、问题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示二、分析1、状态表示2、状态转移3、换根DP三、代码一、问题 题目描述 Farmer John has noticed that his cows often move between nearby fields. Taking this in…