后端笔记(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.rhkb.cn/news/388513.html

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

相关文章

基于java的人居环境整治管理系统(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝20W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

“八股文”面试题:是招聘程序员的金科玉律?

引言 随着互联网的发展&#xff0c;现代企业对程序员的需求日益增加。在招聘过程中&#xff0c;许多公司采用了“八股文”式的面试题目来筛选候选人。这些题目往往涵盖了算法、数据结构、系统设计等方面的基础知识。然而&#xff0c;对于“八股文”在实际工作中的作用&#xf…

为什么越来越多的IT青年转行网络安全?

目前&#xff0c;我国互联网已经从爆发增长期进入平稳发展阶段&#xff0c;同时每年大量计算机相关专业的毕业生涌入就业市场&#xff0c;导致IT行业逐渐趋于饱和状态&#xff0c;甚至出现裁员现象&#xff0c;去年很多大厂都有裁员&#xff0c;不少程序员再就业成了难题。 面…

网络安全相关工作必须要有证书吗?

在当今数字化时代&#xff0c;网络安全已成为至关重要的领域。然而&#xff0c;对于从事网络安全相关工作的人员来说&#xff0c;证书是否是必不可少的呢? 一、网络安全证书的重要性 网络安全证书在一定程度上能够证明从业者具备相关的知识和技能。例如&#xff0c;CISP 作为国…

昇思25天学习打卡营第XX天|RNN实现情感分类

希望代码能维持开源维护状态hhh&#xff0c;要是再文件整理下就更好了&#xff0c;现在好乱&#xff0c;不能好fork tutorials/application/source_zh_cn/nlp/sentiment_analysis.ipynb MindSpore/docs - Gitee.com

python:plotly 网页交互式数据可视化工具

pip install plotly plotly-5.22.0-py3-none-any.whl pip install plotly_express 包含&#xff1a;GDP数据、餐厅的订单流水数据、鸢尾花 Iris数据集 等等 pip show plotly Name: plotly Version: 5.22.0 Summary: An open-source, interactive data visualization librar…

使用 Elasticsearch 和 LlamaIndex 保护 RAG 中的敏感信息和 PII 信息

作者&#xff1a;来自 Elastic Srikanth Manvi 在这篇文章中&#xff0c;我们将研究在 RAG&#xff08;检索增强生成&#xff09;流程中使用公共 LLMs 时保护个人身份信息 (personal identifiable information - PII) 和敏感数据的方法。我们将探索使用开源库和正则表达式屏蔽 …

【Linux】文件描述符 fd

目录 一、C语言文件操作 1.1 fopen和fclose 1.2 fwrite和fread 1.3 C语言中的输入输出流 二、Linux的文件系统调用 2.1 open和文件描述符 2.2 close 2.3 read 2.4 write 三、Linux内核数据结构与文件描述符 一、C语言文件操作 在C语言中我们想要打开一个文件并对其进…

【达梦数据库】通过线程pid定位会话SQL

【达梦数据库】通过线程pid定位会话SQL 1、查找数据库进程 ps -ef|grep dmserver2、通过进程pid去找对应的线程 top -H -p $pid -------------------- top命令经常用来监控linux的系统状况&#xff0c;是常用的性能分析工具&#xff0c;能够实时显示系统中各个进程的资源占用…

大学新生如何高效入门编程?全面指南来助力

引言 在当今数字化时代&#xff0c;编程已经成为一项必备技能。无论你未来从事什么职业&#xff0c;编程能力都能为你的职业生涯增添光彩。对于即将步入大学的新生来说&#xff0c;如何高效入门编程是一道关键课题。本文将从如何选择编程语言、制定学习计划、找到顶尖学习资源…

公布一批神马爬虫IP地址,真实采集数据

一、数据来源&#xff1a; 1、这批神马爬虫IP来源于尚贤达猎头公司网站采集数据&#xff1b; 2、数据采集时间段&#xff1a;2023年10月-2024年1月&#xff1b; 3、判断标准&#xff1a;主要根据用户代理是否包含“YisouSpider”&#xff0c;具体IP没做核实。 二、神马爬虫主…

Mysql的事务隔离级别实现原理

一、事务隔离级别 mysql支持四种事务隔离级别&#xff1a; 读未提交&#xff1a;一个事务可以读取到另一个事务还未提交的数据&#xff1b;读已提交&#xff1a;一个事务可以读取到另一个事务已经提交的数据&#xff1b;可重复读&#xff1a;同一个事务中&#xff0c;无论读取…

Flink CDC基本概念以及MySQL同步到MySQL

目录 欢迎来到Flink CDC 核心概念 数据管道&#xff08;Data Pipeline&#xff09; 数据源&#xff08;Data Source&#xff09; 数据接收器&#xff08;Data Sink&#xff09; 表ID&#xff08;Table ID&#xff09; 转换&#xff08;Transform&#xff09; 路由&…

视频编辑SDK提供配套DEMO源码,提高开发效率

面对日益增长的视频制作需求&#xff0c;如何快速、高效且低成本地生产出专业级视频&#xff0c;成为众多企业面临的共同挑战。美摄科技&#xff0c;作为视频编辑技术的领航者&#xff0c;携其强大的视频编辑SDK及配套DEMO源码&#xff0c;为企业视频创作带来了革命性的解决方案…

手摸手教你撕碎西门子S7通讯协议02--socket连接

1、S7协议通讯流程回顾 1&#xff09;建立Socket连接&#xff1a;进行TCP三次握手 这里是指要建立socket的tcp连接&#xff0c;是tcp连接而不是udp连接&#xff0c;tcp连接是可靠连接&#xff0c;tcp连接就是要有稳定的IP地址&#xff0c;它是通过字节方式进行通讯&#xff…

无心剑七绝《潘展乐神》

七绝潘展乐神 潘江陆海忘情游 展志凌云筑玉楼 乐创全球新纪录 神姿英发舞金钩 2024年8月1日 平水韵十一尤平韵 潘展乐神&#xff0c;这四个字&#xff0c;如同四座矗立的丰碑&#xff0c;分别代表了潘展乐在游泳领域的卓越成就、豪情壮志、快乐创新和非凡风采。无心剑的这首…

C:图案打印

引言 本篇文章讲了一些常见的图形编程题&#xff0c;并总结了一些规律。 1、打印空心正方形 1.1 代码展示&#xff1a; #include<stdio.h> int main() {int a 0;//边长初始化scanf("%d", &a);//输入边长的值{int i 0;for (i 0; i < a; i)//控制行…

【实战】SpringBoot整合ffmpeg实现动态拉流转推

SpringBoot整合ffmpeg实现动态拉流转推 在最近的开发中&#xff0c;遇到一个 rtsp 协议的视频流&#xff0c;前端vue并不能直接播放&#xff0c;因此需要对流进行处理。在网上查阅后&#xff0c;ffmpeg和webrtc是最多的解决方案&#xff0c;但是使用webrtc的时候没成功&#x…

layui table 重新设置表格的高度

在layui的table模块中&#xff0c;如果使用table.render({})渲染了一个表格实例时&#xff0c;确定了height配置&#xff0c;后续用table.resize(id)方法重置表格尺寸时&#xff0c;表格的高度是不会变化的&#xff08;如果我的理解没有错的话&#xff09;。 有时我们希望根据…

k8s核心知识总结

写在前面 时间一下子到了7月份尾&#xff1b;整个7月份都乱糟糟的&#xff0c;不管怎么样&#xff0c;日子还是得过啊&#xff0c; 1、7月份核心了解个关于k8s&#xff0c;iceberg等相关技术&#xff0c;了解了相关的基础逻辑&#xff0c;虽然和数开主线有点偏&#xff0c;但是…