JDBC的学习记录

JDBC就是使用java语言操作关系型数据库的一套API。

JDBC(Java Database Connectivity)是Java语言中用于连接和操作数据库的一种标准接口。它提供了一组方法和类,使Java程序能够与各种不同类型的关系型数据库进行交互。

JDBC的主要功能包括建立数据库连接、执行SQL语句、处理查询结果、事务处理等。通过JDBC,开发人员可以使用Java程序来访问和操作数据库,而不需要直接编写特定数据库的特定代码。

JDBC的设计目标是提供一种独立于数据库的数据库访问接口,使得开发人员可以在不同的数据库系统之间切换而不需要改变程序代码。JDBC通过使用驱动程序来实现这一目标,每个数据库都需要提供一个对应的JDBC驱动程序。

使用JDBC可以实现各种数据库操作,如创建数据库、创建表、插入数据、更新数据、删除数据等。同时,JDBC还支持事务处理和批量更新等高级操作。

JDBC是Java平台的一部分,可以在Java开发环境中直接使用。目前,大多数数据库都提供了对应的JDBC驱动程序,可以很方便地与Java程序进行集成。

下面我们来一起学习以下吧!

---------------------------------------------------------------------------------------------------------------------------

为了方便大家一起动手,我把建表的代码给放进来了

CREATE table account(
id int,
name varchar(20),
money INT
);

还有表中的数据

insert into account(id,name,money) VALUES(1,'张三',1000);
insert into account(id,name,money) VALUES(2,'李四',1000); 

 建好之后就是这样啦

数据库建好了之后我们就要尝试再java中写sql语句

大体就是这样

1、首先我们得创建工程,导入驱动jar包

 

jar包导入之后,我们右键点击jar包,选择add as library

然后这个可以看情况而定了

2、注册驱动

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

3、获取链接

Connection conn = DriverManager.getConnection(url, username, password);

4、定义sql语句

String sql="updata..."; 

5、获取执行sql对象

 Statement stmt=conn.createStatement();

6、执行sql

 stmt.executeUpdate(sql);

7、处理返回结果

8、释放资源

结果如下

 

但是会有红字,idea建议我们使用比较安全的链接方式SSL,配置完会是我们的性能降低一点,所以不使用,我们可以在后面加上    ?useSSL=false

这样就没有红字了 

 

JDBC API 详解

DriverManager

DriverManager(驱动管理类)作用

1、注册驱动

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

Mysql 5之后的驱动包,可以省略注册驱动的步骤

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

2、获取数据库连接

Connection conn = DriverManager.getConnection(url, username, password);

conn我们可以自己随便取

url:连接路径

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

示例  jdbc:mysql://127.0.0.1:3307/db3

  • 如果连接的是本机mysql服务器的话,并且mysql服务器默认端口为3306,则url可以简写为

jdbc:mysql:///数据库名?参数键值对

  • 配置useSSL=false参数,禁用安全连接方式,解决警告提示

username:用户名

password:密码

Connection

1、获取执行sql的对象

  • 普通执行sql对象

Statement createStatement()

  • 预编译sql的执行sql对象:防止sql注入

PreparedStatement prepareStatement(sql) 

  •  执行存储过程中的对象

CallableStatement prepareCall(sql) 

 2、事务管理

  • mydql事务管理

开启事务:BEGIN;/START TRANSACTION

提交事务:COMMIT;

回滚事务:ROLLBACK;

Mysql默认自动提交事务 

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

开启事务:setAutoCommit(Boolean autoCommit):true为自动提交事务;false为手动提交事务,即为开启事务

提交事务:commit()

回滚事务:rollback() 

try {
    //开启事务
    conn.setAutoCommit(false);
    //执行sql
    int count1 = stmt.executeUpdate(sql1);
    //处理结果
    System.out.println(count1);
    //执行sql
    int count2 = stmt.executeUpdate(sql2);
    //处理结果
    System.out.println(count2);
    //提交事务
    conn.commit();
} catch (Exception e) {
    //回滚事务
    conn.rollback();
    throw new RuntimeException(e);
}

 

Statement

  • Statement作用:执行sql语句
  • 执行sql语句

int executeUpdate(sql):执行DML、DDL语句

返回值:(1)DML语句影响的行数(2)DDL语句执行后、执行成功也可能返回0 

ResultSet executeQuery(sql):执行DQL语句

返回值:ResultSet结果集对象 

 

执行DML语句

 表中有id=1的受影响行数为1

 

表中没有id=5的数据,受影响行数为0 

 

还可以优化以下,用户想看到的是修改成功了还是失败了

id=5时是下面的结果

执行DDL语句

 

db2创建成功了

再看一下删除

返回的居然是0,但是我们删除成功了,所以这里没有使用if语句去判断成功与否

未完待续。。。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PythonWeb

例题一 from flask import Flask app Flask(__name__) app.route(/index) def index():return f<h1>这是首页&#xff01;</h1> def second():return f<h1>这是第二页&#xff01;</h1> if __name__ __name__:app.run(host"0.0.0.0",port…

图腾柱PFC工作原理:一张图

视屏链接&#xff1a; PFC工作原理

SpringCloud--Sentinel使用

一、快速开始 Sentinel 的使用可以分为两个部分&#xff1a; 核心库&#xff08;Java 客户端&#xff09;&#xff1a;不依赖任何框架/库&#xff0c;能够运行于 Java 8 及以上的版本的运行时环境&#xff0c;同时对 Dubbo / Spring Cloud 等框架也有较好的支持。控制台&…

OpenFeign相关配置(超时,重试,HttpClient5,日志)

1.超时控制 默认OpenFeign客户端等待60秒钟&#xff0c;但是服务端处理超过规定时间会导致Feign客户端返回报错。 yml文件对应配置: connectTimeout&#xff1a;连接超时时间 readTimeout:请求处理超时时间 1.yml配置 server:port: 80spring:application:name: cloud-consu…

F - Earn to Advance

解题思路 由于对于一点不知道后面得花费&#xff0c;所以无法决策当前是否要停下赚钱或要停下多久考虑一点&#xff0c;可以由其左上方的所有点到达所以从往前推&#xff0c;得出到的总花费然后考虑从之后不赚钱直接到最终所用次数和剩余钱若存在&#xff0c;在后面点赚钱更优…

面试经典150题 -- 图的广度优先遍历 (总结)

总的链接 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 909 . 蛇梯棋 链接 : . - 力扣&#xff08;LeetCode&#xff09; 题意 &#xff1a; 直接bfs就好了 &#xff0c; 题意难以理解 : class Solution:def snakesA…

mockjs学习

1.前言 最近面试发现之前团队协同合作的项目没有mock数据难以向面试官直接展示&#xff0c;所以迟到得来速学一下mockjs。 参考视频&#xff1a;mockJs 妈妈再也不用担心我没有后端接口啦_哔哩哔哩_bilibili 一开始查阅了一些资料&#xff0c;先是看了下EasyMock&#xff0c…

分享几个Google Chrome谷歌浏览器历史版本下载网站

使用selenium模块的时候&#xff0c;从官网下载的谷歌浏览器版本太高&#xff0c;驱动不支持&#xff0c;所以需要使用历史的谷歌浏览器版本 &#xff0c;这里备份一下以防找不到了。 驱动下载地址&#xff1a;https://registry.npmmirror.com/binary.html?pathchromedriver 文…

Windows C++ 实现远程虚拟打印机(远程共享打印机)

编译错误已经修改完后的工程修改后的下载地址 https://download.csdn.net/download/2403_83063732/88928550 1、下载clawpdf&#xff08;0.8.7版本&#xff09; https://github.com/clawsoftware/clawPDF 2、打开clawpdf工程开始编译C#工程&#xff0c;出现如下错误&#xf…

利用YOLOv5模型进行锥桶识别

目录 1. YOLOv5模型简介 2. 准备数据集 3. 训练模型 4. 模型评估 5. 模型部署与应用 6. 注意事项 在计算机视觉领域&#xff0c;目标检测是一项重要的任务&#xff0c;它可以帮助我们识别图像或视频中的特定物体并进行定位。而YOLOv5是一种高效的目标检测模型&#xff0c…

栈与队列的故事

​​​​​​​ 目录 ​编辑​​​​​​​ 一、栈 1.1栈的概念及结构 1.2栈的实现 1、实现支持动态增长的栈 2、初始化栈 3、入栈 4、出栈 5、获取栈顶元素 6、检测栈是否为空 7、获取栈中有效元素个数 8、销毁栈 9、测试 1.3源码 二、队列 2.1队列的概念及结构…

【AI辅助研发】-开端:未来的编程范式

编程的四种范式 面向机器编程范式 面向机器编程范式是最原始的编程方式&#xff0c;它直接针对计算机硬件进行操作。程序员需要了解计算机的内部结构、指令集和内存管理等细节。在这种范式下&#xff0c;编程的主要目标是编写能够直接控制计算机硬件运行的机器代码。面向机器…

Babel:现代JavaScript的桥梁

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【Prometheus】PromQL

数据类型 即时向量&#xff08;instant vector&#xff09; node_cpu_seconds_total{instance"ahoj-dev-ubuntu-virtualbox",mode"idle"} 区间向量&#xff08;range vector&#xff09; node_cpu_seconds_total{instance"ahoj-dev-ubuntu-virtu…

java正则表达式概述及案例

前言&#xff1a; 学习了正则表达式&#xff0c;记录下使用心得。打好基础&#xff0c;daydayup! 正则表达式 什么是正则表达式 正则表达式由一些特定的字符组成&#xff0c;代表一个规则。 正则表达式的功能 1&#xff1a;用来校验数据格式是否合规 2&#xff1a;在一段文本…

针对娃哈哈和农夫山泉,AI是如何看待的

娃哈哈和农夫山泉事件是中国饮料行业的两个重要事件。娃哈哈和农夫山泉都是中国知名的饮料品牌&#xff0c;两者之间的竞争一直存在。以下是对这两个事件的介绍&#xff1a; 1. 娃哈哈事件&#xff1a;娃哈哈是中国最大的饮料生产企业之一&#xff0c;也是中国最具影响力的品牌…

.Net6使用JWT认证和授权

文章目录 目的实现案例一.项目所需包&#xff1a;二.配置项目 appsettings.json 文件&#xff1a;三.创建Model文件夹&#xff0c;添加AppConfig类和UserRole类1.AppConfig类获取appsettings.json文件中的值2.UserRole类用于区分用户信息和权限 四.主体代码案例&#xff1a;1.L…

C++的类与对象(三):构造函数、析构函数、对象的销毁顺序

目录 类的6个默认成员函数 构造函数 语法 特性 析构函数 特性 对象的销毁顺序​​​​​​​​​​​​​​ 类的6个默认成员函数 问题&#xff1a;一个什么成员都没的类叫做空类&#xff0c;空类中真的什么都没有吗&#xff1f; 基本概念&#xff1a;任何类在什么都不…

[MRCTF2020]Transform1

a[33]"9,10,15,23,7,24,12,6,1,16,3,17,32,29,11,30,27,22,4,13,19,20,21,2,25,5,31,8,18,26,28,14" b[33]"103,121,123,127,117,43,60,82,83,121,87,94,93,66,123,45,42,102,66,126,76,87,121,65,107,126,101,60,92,69,111,98,77" python代码 a3 [103…

three.js 射线Ray,三维空间中绘制线框

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs"></div> <div>{{ res1 }}</div> <div>{{ res2 }}</div><…