后端笔记(2)--JDBC

1.JDBC简介

*JDBC(Java DataBase Connectivity)就是使用java语言操作关系型数据库的一套API

在这里插入图片描述

*JDBC本质:(可以使用同一套代码,操作不同的关系型数据库

​ *官方定义的一套操作所有关系型数据库的规则,即接口

​ *各个数据厂商去实现这套接口,提供数据库驱动jar包

​ *我们可以使用这套接口编程,真正执行的代码是驱动jar包中的实现类

1.用java写jdbc(快速入门)

public class JDBCDemo {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 password = "1234";Connection conn = DriverManager.getConnection(url,username,password);//3.定义sqlString sql = "update account set money = 2000 where id = 1";//4.获取执行sql的对象 StatementStatement stmt = conn.createStatement();//5.执行sqlint count = stmt.executeUpdate(sql);//返回受影响的行数//6.处理结果System.out.println(count);//7.释放资源stmt.close();conn.close();}
}

2.JDBC API详解

1.DriverManager

​ *驱动管理类

​ *作用:1.注册驱动 2.获取数据库连接

在这里插入图片描述
在这里插入图片描述

2.Connection

1.获取执行SQL的对象

​ *普通执行SQL对象

Statement createStatement()

​ *预编译SQL的执行SQL对象:防止SQL注入

PreparedStatement prepareStatement(sql)

​ *执行存储过程的对象

CallableStatement prepareCall(sql)
2.事务管理

​ *MySQL 事务管理

开启事务:BEGIN;/ START TRANSACTION;
提交事务:COMMIT;
回滚事务:ROLLBACK;MySQL默认自动提交事务

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

开启事务:setAutoCommit(boolent autoCommit):true为自动提交事务;false为手动提交事务,即为开启事务
提交事务:commit()
回滚事务:rollback()

3.Statement

​ *作用:执行SQL语句

​ *执行SQL语句

int executeUpdate(sql):执行DML、DDL语句
*返回值:(1)DML语句影响的行数 (2)DDL语句执行后,执行成功也可能返回0
ResultSet: executeQuery(sql):执行DQL语句
*返回值:ResultSet结果集对象
//1.注册驱动(可不写)
//Class.forName("com.mysql.jdbc.Driver");//2.获取连接:如果连接的是本机Mysql并且端口是默认的3306可以简化书写
String url = "jdbc:mysql:///db1?useSSL=false";
String username = "root";
String password = "1234";
Connection conn = DriverManager.getConnection(url,username,password);//3.定义sql
String sql = "update account set money = 3000 where id = 1";//DML语句
"create database db2";//DDL语句//4.获取执行sql的对象 Statement
Statement stmt = conn.createStatement();//5.执行sql
int count = stmt.executeUpdate(sql);//执行完DML语句,受影响的行数//6.处理结果
System.out.println(count);//7.释放资源
stmt.close();
conn.close();

4.ResultSet

​ *(结果集对象)作用: 1.封装了DQL查询语句的结果

ResultSet stmt.executeQuery(sql):执行DQL语句,返回ResultSet对象

​ *获取查询结果

boolean next():(1)将光标从当前位置向前移动一行 (2)判断当前行是否为有效行
*返回值:*true:有效行,当前行有数据*false:无效行,当前行没有数据
xxx getXxx(参数):获取数据
* xxx:数据类型;如:int getInt(参数);String getString(参数)
*参数:*int:列的编号,从1喀什*String:列的名称
//1.获取连接
String url = "jdbc:mysql:///db1?useSSL=false";
String username = "root";
String password = "1234";
Connection conn = DriverManager.getConnection(url, username, password);//2.定义sql
String sql = "select * from account";//3.获取statement对象
Statement stmt = conn.createStatement();//4.执行sql
ResultSet rs = stmt.executeQuery(sql);//创建集合
List<Account> list = new ArrayList<>();//5.处理结果,遍历rs中的所有数据
//5.1光标向下移动一行,并且判断当前行是否有数据
while(rs.next){Account account = new Account();//5.2获取数据 getXxx(第几列)int id = rs.getInt(1);String name = rs.getString(2);double money = rs.getDouble(3);//赋值account.setId(id);account.setName(name);account.setMoney(money);//存入集合list.add(account);System.out.println(id);System.out.println(name);System.out.println(money);System.out.println("-----")
}//6.释放资源rs.close();	stmt.close();conn.close();

5.PreparedStatement

​ *预编译SQL语句并执行:预防SQL注入问题(将铭感字符进行转移)

​ *SQL注入:通过操作输入来修改实现定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法

public void testResultSet() throws Exception {//2.获取连接:如果连接的是本机mysql并且端口是默认的3306可以简化书写String url = "jbdc:mysql:///db1?useSSL=false";String username = "root";String password = "1234";Connection conn = DriverManager.getConnection(url,username,password);//接收用户输入 用户名和密码String name = "zhangsan";String pwd = "123";String sql = "select * from tb_user where username = '"+name+"' and password = '"+pwd+"'";//获取stmt对象Statement stmt = conn.createStatement();//执行sqlResultSet rs = stmt.executeQuery(sql);//判断登录是否成功if(rs.next()){System.out.println("登陆成功");}else{System.out.println("登录失败");}//7.释放资源/*rs.close();stmt.close();conn.close();*/
}

1.获取PreparedStatement对象

//SQL语句中的参数值,使用?占位符替代
String sql = "select * from user where username = ? and password = ?";//通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.prepareStatement(sql);

2.设置参数值

PreparedStatement对象:setXxx(参数1,参数2):?赋值
*Xxx:数据类型;如setInt(参数1,参数2)
*参数:-参数1:?的位置编号,从1开始-参数2:?的值eg:
pstmt:setString(1,name);
pstmt.setString(2,pwd);
//替代问号占位符位置的值

3.执行SQL

executeUpdate();/executeQuery():不需要再传递sql

3.数据库连接池

1.简介

​ *数据库连接池是个容器,负责分配、管理数据库连接(Connection)

​ *它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个

​ *释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏

​ *好处:

​ --资源重用

​ --提升系统响应速度

​ --避免数据库连接遗漏

2.数据库连接池实现

​ *标准接口:DataSource

​ *官方提供的数据库连接池标准接口,由第三方组织实现此接口

​ *功能:获取连接

Connection getConnection()

​ *常见的数据库连接池:

​ *DBCP

​ *C3P0

​ *Druid

​ *Druid(德鲁伊)

​ *Druid连接池是阿里巴巴开源的数据库连接池项目,好用

//1.带入jar包//2.定义配置文件//3.加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("src/druid.properties"));//4.获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);//5.获取数据库连接 Connection
Connection connection = dataSource.getConnection();System.out.println(connection);

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

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

相关文章

ESP之经典蓝牙库BluetoothSerial介绍和实例演示

ESP之经典蓝牙库BluetoothSerial介绍和实例演示 1.概述 目前ESP32内置了双模蓝牙&#xff08;蓝牙4.0版本之前都是经典蓝牙&#xff0c;4.0版本成为BLT低功耗蓝牙转为物联网开发。双模指的就是这款芯片两种模式都支持&#xff09;。 这篇文章介绍ESP32蓝牙的经典模式使用方法…

算法学习day23

一、k个一组翻转链表 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 思路&#xff1a; 1.首先得到链表的长度size&#xff1b;然后在size>k的范围里面进行翻转长度为k的链表。 2.while(size>k) 在这个循环中&#xf…

【C++BFS算法】886. 可能的二分法

本文涉及的点 CBFS算法 LeetCod886. 可能的二分法 给定一组 n 人&#xff08;编号为 1, 2, …, n&#xff09;&#xff0c; 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人&#xff0c;那么他们不应该属于同一组。 给定整数 n 和数组 dislikes &#xff0c;其…

电脑桌面记事本便签哪个好,有哪些好用的桌面备忘记事工具推荐

在寻找高效办公的道路上&#xff0c;我们经常需要记住许多重要的事情&#xff0c;然而人的记忆力终究有限&#xff0c;这时候就需要依赖一些工具来帮助我们进行提醒。一款好的电脑桌面记事本便签、桌面日程安排软件就像是一位得力助手&#xff0c;它不仅能够帮助我们合理规划时…

项目经理的开源工具指南:优化您的选择过程

国内外主流的10款开源项目管理系统对比&#xff1a;PingCode、Worktile、禅道、Teambition、Gogs、码云 Gitee、Jira、Redmine、ProjectLibre、OpenProject。 在选择合适的开源项目管理系统时&#xff0c;很多团队面临诸多挑战&#xff1a;功能是否全面&#xff1f;易用性如何&…

Excel模拟计算演示-以矩阵乘计算密度为例

Excel模拟计算演示-以矩阵乘计算密度为例 1.参考链接2.CUDA_Occupancy_Calculator截图3.矩阵乘计算密度模拟计算的操作步骤及效果 安装好CUDA之后,/usr/local/cuda-12.1/tools/CUDA_Occupancy_Calculator.xls里会看到"TABLE(,B17)"这样的表达式,原来是模拟计算的结果…

3V升5V输出800mA可驱动10MA驱动蜂鸣片芯片AH6910

135-3806-7573今天&#xff0c;我们将深入解析一款名为AH6910的芯片&#xff0c;这款芯片以其独特的3V至5V宽电压输入范围、800mA的高输出电流能力&#xff0c;以及能够轻松驱动低至10mA需求的蜂鸣片&#xff0c;成为了众多电子项目中的优选元件。######一、AH6910芯片概述 AH…

RIP路由协议

RIP-路由信息协议V1/V2/NG NG版为ipv6专用 距离矢量型IGP路由协议&#xff0c;使用跳数作为度量&#xff0c;支持等开销负载均衡&#xff1b;基于UDP&#xff0c;520端工作&#xff0c;基于UDP V1和V2的区别&#xff1a; 1、v1为有类别协议--不支持VLSM/CIDR&#xff0c;即使使…

ic进阶|性能篇02:一文带你了解一种特殊的并行技术-展开!

本期文章让我们聊聊一种数字ic设计技术——展开&#xff0c;展开用于产生一个一次迭代就相当于原有结构的多次迭代的新电路结构。其相当于之前聊过的折叠技术的反向操作&#xff0c;折叠使用一个功能单元通过多次迭代来完成原有电路结构一次迭代的操作&#xff0c;相对于通过时…

中电金信:云原生时代IT基础设施管理利器——基础设施即代码(IaC)

在数字化转型、零售业务快速发展、信创建设驱动下&#xff0c;应用架构、技术架构、基础架构都已向云原生快速演进&#xff0c;银行业IT基础设施管理产生了非常大的变化&#xff0c;当前银行业&#xff0c;正在开展新一轮的核心应用系统重构、基础平台统一建设等重点任务&#…

Playwright 的使用

Playwright 的特点 支持当前所有主流浏览器&#xff0c;包括 Chrome 和 Edge &#xff08;基于 Chromiuns&#xff09;, Firefox , Safari 支持移动端页面测试&#xff0c;使用设备模拟技术&#xff0c;可以让我们在移动Web 浏览器中测试响应式的 Web 应用程序 支持所有浏览…

x264编解码库 -介绍和使用示例

目录 1&#xff1a;X264简单介绍 1.1&#xff1a;编译x264 1.2&#xff1a;x264简单介绍 1.3&#xff1a;x264的优势 1.4&#xff1a;x264与FFmpeg的关系 1.5&#xff1a;x264 编解码原理 1.6 进一步学习资源 2&#xff1a;demo效果 3&#xff1a;完整代码 4&#xff1a;附件…

6 网络

6 网络 1、概念2 IP地址3、套接字4、TCP协议4.1 TCP协议的基本特征4.2 建立连接4.4 终止连接4.5 编程模型 5、UDP协议5.1 UDP协议的基本特性5.2 常用函数5.3 UDP通信模型 6、域名解析 1、概念 计算机网络是实现资源共享和信息传递的计算机系统 ISO/OSI网络协议模型 TCP/IP协…

C语言进阶 10. 字符串

C语言进阶 10. 字符串 文章目录 C语言进阶 10. 字符串10.1. 字符串10.2. 字符串变量10.3. 字符串输入输出10.4. 字符串数组10.5. 单字符输入输出10.6. 字符串函数strlen()10.7. 字符串函数strc()10.8. 字符串函数strcpy()10.9. 字符串搜索函数10.10. PAT10-0. 说反话 (20)10-1.…

idea中导入外部依赖并打包到jar包中

前言&#xff1a; 很多时候在我们写项目对接三方的时候都需要导入三方jar包&#xff0c;而这时候我们用平常的pom里面写依赖发现导入不了&#xff08;直接把jar包放在本地导入的话打包的话也不会将该依赖打包进我们项目的jar包&#xff09;&#xff0c;我在网上找了几种方法 …

Linux网络-ss命令

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注我&#xff0c;我尽量把自己会的都分享给大家&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux服务器作为一个常用的网络服务器&#xff0c;主要的作用就是向客户端提供网络…

【C++】C++11中R字符串的作用

在 C11 中添加了定义原始字符串的字面量 1.定义和基本使用 定义方式为&#xff1a; R"xxx(原始字符串)xxx"其中 () 两边的字符串可以省略&#xff0c;R只会处理括号中的字符串。 原始字面量 R 可以直接表示字符串的实际含义&#xff0c;而不需要额外对字符串做转义…

谷歌团队新技术Alchemist:使用扩散模型对材料属性进行参数控制

Alchemist是由谷歌团队和麻省理工学院联合研发的一项创新技术&#xff0c;它利用扩散模型对材料属性进行精细的参数控制。这项技术的核心在于能够对真实图像中的物体材料属性进行调整&#xff0c;包括粗糙度、金属感、反照率和透明度等。Alchemist的实现依赖于先进的文本到图像…

【时时三省】(C语言基础)循环语句while(2)

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ——csdn时时三省 getchar和scanf的作用 示例: int main ( ) &#xff5b; char password[20] ( 0 ) ; printf ( "请输入密码&#xff1a;> " )&#xff1b; scanf ( " &#xff05;s…

Sping项目只能勾选17和21 (已解决) 导致的后续Invalid bound statement (not found):

问题发现 今天创建项目的时候发现 idea初始化spring的时候选择不了Java8 解决方案:替换URL为 https://start.aliyun.com/ 将IDEA页面创建Spring项目&#xff0c;其实是访问spring initializr去创建项目。故我们可以通过阿里云国服去间接创建Spring项目。 将https://start.spr…