后端笔记(2)--JDBC

news2024/11/16 5:38:59

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.定义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();
    }
}

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();
    
    //执行sql
    ResultSet 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.coloradmin.cn/o/1956221.html

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

相关文章

2024年巴黎奥运会奖牌榜数据源:各国选手为荣誉而战!

奥运会是全球瞩目的盛会&#xff0c;每四年举办一次&#xff0c;汇集了来自超过200个国家的优秀运动员参与夏季和冬季的400多场比赛。这是一项真正的全球综合性运动会&#xff0c;各个国家选手为了荣誉和国家的面子而激烈竞争。2024年的巴黎奥运会将是一场令人期待的盛宴&#…

C语言——选择结构

C语言——选择结构 关系运算符及关系表达式关系运算符关系表达式 逻辑运算符和逻辑表达式逻辑运算符逻辑表达式 选择语句if语句条件运算符switch case语句 关系运算符及关系表达式 关系运算符 关系运算实际上是比较运算&#xff0c;C语言提供了六种关系运算符分别为&#xff…

Go语言教程(一看就会)

全篇文章 7000 字左右&#xff0c; 建议阅读时长 1h 以上。 Go语言是一门开源的编程语言&#xff0c;目的在于降低构建简单、可靠、高效软件的门槛。Go平衡了底层系统语言的能力&#xff0c;以及在现代语言中所见到的高级特性。它是快速的、静态类型编译语言。 第一个GO程序…

一篇文章带你入门爬虫并编写自己的第一个爬虫程序

一、引言 目前我们处在一个信息快速迭代更新的时代&#xff0c;海量的数据以大爆炸的形式出现在网络之中&#xff0c;相比起过去那个通过广播无线电、书籍报刊等传统媒介获取信息的方式&#xff0c;我们现在通过网络使用搜索引擎几乎可以获得任何我们需要的信息资源。 但与此同…

Python3网络爬虫开发实战(7)JavaScript 动态渲染页面爬取

文章目录 一、Selenium1. 基本安装2. 基本使用3. 声明浏览器对象4. 访问页面5. 查找节点6. 节点交互7. 动作链8. 执行 JavaScript9. 获取节点信息10. 切换 Frame11. 延时等待12. 前进后退13. Cookies14. 选项卡管理15. 异常处理16. 反屏蔽17. 无头模式18. Pyppeteer&#xff0c…

《遥远的救世主》读后感

未完待续。。。。 未完待续。。。。 未完待续。。。。 【经典语录】 01. 我们这个民族总是以有文化自居&#xff0c;却忘了问一句&#xff1a;是有什么文化&#xff1f;是真理真相的文化还是弱势文化&#xff1f;是符合事物规律的文化还是违背事物规律的文化&#xff1f;任何…

shell脚本与sed基本语法

Day11 一、shell 基础 1、shell 概念 shell 英文翻译过来是外壳的意思&#xff0c;作为计算机语言来理解可以认为它是 操作系统的外壳。可以通过shell 命令来操作和控制操作系统&#xff0c;比如 Linux中的shell命令就包括 ls、cd、pwd 等等。 2、shell 在内核的基础上编写的…

第一个设计模式——单例模式

目录 一、特点&#xff1a; 二、实现单例模式步骤 三、饿汉式 四、懒汉式 五、双重检查锁 六、静态内部类 七、枚举 八、可能被反序列化和反射破坏什么意思&#xff1f; 九、如何解决呢&#xff1f; 一、特点&#xff1a; 唯一性&#xff0c;单例模式确保程序中只有一…

甘肃粉条:一口爽滑,满心欢喜

在甘肃的美食世界里&#xff0c;粉条是一道独具特色的存在&#xff0c;它以其爽滑的口感和多样的烹饪方式&#xff0c;赢得了无数人的喜爱。甘肃食家巷粉条&#xff0c;选用当地优质的土豆或红薯为原料&#xff0c;经过一系列精细的加工工艺&#xff0c;最终成就了这一根根晶莹…

SSRF (服务端请求伪造)

&#x1f3bc;个人主页&#xff1a;金灰 &#x1f60e;作者简介:一名简单的大一学生;易编橙终身成长社群的嘉宾.✨ 专注网络空间安全服务,期待与您的交流分享~ 感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持&#xff01;❤️ &#x1f34a;易编橙终身成长社群&#…

2-48 基于matlab的EM算法聚类可视化程序

基于matlab的EM算法聚类可视化程序&#xff0c;通过期望最大化算法&#xff08;EM&#xff09;优化类别间距&#xff0c;使得类别间距最大、类内间距最小。输出聚类前后结果及收敛曲线。程序已调通&#xff0c;可直接运行。 2-48 期望最大化算法&#xff08;EM&#xff09; 聚类…

6/9-axis imu sensor/姿态传感器 学习板/开发板 开源 MPU6500 QMC5883 加速度 陀螺仪 地磁传感器

1-应用领域&#xff1a; 游戏交互、3D模型控制、机器人、设备姿态检测、翻转状态检测、无人机、无人船、无人车、VR/AR、AHRS、姿态算法研究与分析&#xff0c;短距无效姿态测量、车辆调平系统&#xff0c;机器震动检测 2-产品硬件规格: 尺寸: 蓝牙:5.0 电池:默认150ma&…

TCP程序设计

TCP概述 建立连接 客户端和服务器端在建立连接时&#xff1a; 服务端是典型的监听接受连接的模式&#xff0c;就是ListenAccept 客户端是主动建立连接的模式&#xff0c;就是Dial Go语言中使用 net包实现网络的相关操作&#xff0c;包括我们TCP的操作。 用于建立连接的典型…

tusiart吐司艺术图像生成、LoRA 模型的使用和训练网站

文章目录 前言一、Tusiart&#xff08;吐司艺术&#xff09;是什么二、Tusiart&#xff08;吐司艺术&#xff09;主要功能三、Tusiart&#xff08;吐司艺术&#xff09; 网站图片四、Tusiart&#xff08;吐司艺术&#xff09; 相关地址总结 前言 每天分享一个关于AI项目或者网…

【系统架构设计师】二十、云原生架构设计理论与实践①

目录 一、云原生架构内涵 二、云原生的原则 三、主要架构模式 四、典型的云原生架构反模式 相关推荐 一、云原生架构内涵 云原生架构是基于云原生技术的一组架构原则和设计模式的集合&#xff0c;旨在将云应用中的非业务代码部分进行最大化的剥离&#xff0c;从而让云设施…

SQL Server索引碎片的基本知识(附Demo)

目录 前言1. 基本知识2. 检索碎片2.1 dm_db_index_physical_stats2.2 DBCC SHOWCONTIG 3. 修复和优化 前言 索引碎片太高本身会阻碍查询的效率&#xff0c;这个问题要重视 1. 基本知识 索引中的数据页不再连续&#xff0c;导致存储和检索数据时的效率降低 碎片通常发生在以…

虚拟机启动电脑蓝屏问题解决方案

1.查看CPU虚拟化是否开启&#xff0c;没有开启的可以按照教程开启 打开任务管理器&#xff0c;查看是否开启CUP虚拟化 如果没有开启,可以查看下面的链接&#xff0c;进入BIOS开启 win10如何开启虚拟化支持_win10开启cpu虚拟化的方法&#xff0d;系统城 2&#xff0c;控制面板…

C#中的同步编程和异步编程

1. 简单描述一下同步编程和异步编程 同步编程&#xff1a;按照代码的顺序一行一行执行&#xff0c;如果某个操作需要等待&#xff08;比如读取文件、网络请求、数据库操作等&#xff09;&#xff0c;那么当前的线程就会停下来&#xff0c;一直到这个操作完成了之后&#xff0c…

无坚不摧的Python重试机制:探索Tenacity库

无坚不摧的Python重试机制&#xff1a;探索Tenacity 库 背景&#xff1a;为何选择Tenacity&#xff1f; 在软件开发中&#xff0c;我们经常面临需要重试操作的场景&#xff0c;比如网络请求、数据库操作等。这些操作可能会因为各种原因暂时失败&#xff0c;但稍后可能会成功…

更换CentOS Stream 8镜像源

CentOS Stream 8替换阿里云镜像源 确认CentOS版本 hostnamectl备份当前配置 sudo cp -r /etc/yum.repos.d /etc/yum.repos.d.backup创建临时文件下载目录 mkdir -p /tmp/aliyun-repos cd /tmp/aliyun-repos下载 .repo 文件列表并解析链接 wget -r -np -nd -A ".repo&…