JDBC - 超快速拿捏
文章摘要
- JDBC 介绍
- 单词 汇总
- 一、JDBC使用步骤 - 5 个步骤
- ① 、加载并注册JDBC驱动
- ② 、创建数据库连接
- ③ 、创建Statement对象
- ④ 、遍历查询结果
- ⑤ 、关闭连接,释放资源
- 二、SQL注入攻击的应对
- 注入攻击 - 应对
- 三、封装 DBUtils 工具类
- 四、事务机制
- JDBC的 两种 事务模式
- ①、自动提交事务模式
- ②、手动提交事务模式
- 五、实体类的封装分页、JDBC中 Date日期对象的处理、批处理
- 六、连接池
- Druid 使用步骤
- C3P0 使用步骤
- 七、Apache Commons DBUtils
- 使用步骤
- 总结
JDBC 介绍
1、很重要要要要! Java程序 对 数据库 进行 交互 操作
< => Java DataBase Connectivity => 简称 JDBC
2、JDBC 基于驱动程序
实现 与数据库的 连接 与 操作
3、可以理解 JDBC 是一堆接口
驱动程序 就是一些 实现 了 JDBC 的类
4、要熟悉 了解 反射机制 更容易理解JDBC
单词 汇总
Statement
|
/ˈsteɪtmənt/ 声明 Driver|
/ˈdraɪvər/ 驱动 Manager|
/ˈmænɪdʒər/ 管理 Connection|
/kəˈnekʃn/ 连接
create|
/kriˈeɪt/ 创造 executeQuery|
执行查询 Result(Set)|
/rɪˈzʌl / 结果集 prepared|
/prɪˈperd/ 有准备的
一、JDBC使用步骤 - 5 个步骤
① 、加载并注册JDBC驱动
1.1JDBC的驱动长什么样?
1.2添加依赖-把jar包导入工程
1.3加载JDBC驱动
浅析:JDBC的驱动是谁提供的? 要看数据库厂商了
加载JDBC驱动 就是 加载 某数据库厂商 提供的 JDBC接口 的 实现类
//用于加载指定的类
Class.forName("com.mysql.cj.jdbc.Driver");//该字符串描述了该类的位置
② 、创建数据库连接
程序 和 数据库网络通信
//获取数据库连接 url 用户名 密码
Connection conn = DriverManager.getConnection("jdbc:mysql;//localhost:3306/哪个数据库名字?jdbc:mysql://localhost:3306/babytun?useUnicode=true&character=utf8&useSSL=false&serverTimezone=UTC"
,"root"
,"root")
//返回 Connection对象
//java.sql.Connection是一个接口,具体由驱动实现
③ 、创建Statement对象
Statement对象 是用来执行SQL 语句的
Statement stmt = conn.createStatement();
//返回一个 结果集 SQL语句
ResultSet rs = stmt.executeQuery("select * from biao");
注:在结果集中有我们查询的数据,如果要提取出来就要走下面的遍历步骤
④ 、遍历查询结果
//next() 是结果集中提供的判断方法
while(rs.next()){//将 当前行 第一列的数据,作为整型获取Integer eno = rs.getInt(1);//将 当前行 ename的数据,作为字符串获取String ename = rs.getString("ename");Float salary = rs.getFloat("salary");System.out.println(eno+"-"+ename+""+"-"+salary);
}
⑤ 、关闭连接,释放资源
//当前连接是否被关闭
if(conn != null && conn.isClosed() == false){conn.close();
}
实际要把 conn.close(); 放到 finally 块中
二、SQL注入攻击的应对
利用输入的语句 故意去和SQL语句进行拼接
。会造成数据的泄露。
例···原始语句:
ResultSet rs = stmt.executeQuery("select * from table where ename='" + x + "'");
如果控制台输入 ' or 1=1 or 1='
SQL语句就会发生拼接 如下所示:
slecr * from table where ename='' or 1=1 or 1=''
注入攻击 - 应对
因为执行SQL语句的是 Statement 对象。所以要放弃Statement 改用 PreparedStatement 处理SQL
Statement stmt = conn.createStatement();
//返回一个 结果集 SQL语句
ResultSet rs = stmt.executeQuery("select * from biao where ename='" + x + "'"");
上面代码 改成 下方形式
上面代码中SQL 查询是放在 executeQuery() 中执行的。
下面代码 则是 先 放入SQL语句,然后调用excuteQuery()。
PreparedStatement pstmt= conn.preoareStatement("select * from biao where ename=?");
pstmt.setString(1,x);//设置SQL参数,参数从第一个开始
ResultSet rs = pstmt.executeQuery();
============================================== JDBC 基操完结================================================
============================================== 优化、使用细节================================================
三、封装 DBUtils 工具类
其实也就是把一些重复的代码 整合起来 放进某些方法中,啥时候使用啥时候调用。这样JDBC 使用起来会很舒服。
比如:创建连接部分+关闭连接部分
public class DBUtils{//获取连接,返回Connection对象public static Connection getConnection()throw 各种异常{Class.forName("com.mysql.cj.jdbc.Driver");Connection conn = DriverManager.getConnection(url,user,password);return conn;}//关闭连接,释放资源 prepardeStatement是Statement的子接口,关Statement一样public static void closeConnection(ResultSet rs,Statement stmt,Connection conn){rs.close();stmt.close();conn.close();}
}
四、事务机制
为了防止程序在操作数据库中 出现意外情况 导致 数据 传递过程出现 异常:
要么把事情做完,要么不做,不能做一半
MySQL通过事务区
作为数据缓冲地带:
·通过 事务区机制 等待程序发起 commit提交 或者 robllback回滚:
···如果commit提交成功 所有事务区的数据 将写入表中。
···如果robllack 永远不会写入目标表 会将事务区中做好的 数据 撤销掉。
注:日常开发中 大多数都需要手动控制事务机制。
提交指令:commit
回滚指令:rollback
JDBC的 两种 事务模式
①、自动提交事务模式
每执行一次execute...();
时都会提交一次
不书写 默认 是 开启状态:
conn.setAutoCommit(true)
关闭自动提交:
//关闭自动提交
conn.setAutoCommit(false)
②、手动提交事务模式
1、获取数据库连接以后
2、手动 书写 关闭自动提交
3、然后 显示调用 conn.commit()
与 conn.rollback()
方法管理事务
注:如果提交过程出现异常,当然 conn.rollback(); 要写在 catch块 里面 进行事务的回滚。
五、实体类的封装分页、JDBC中 Date日期对象的处理、批处理
此处跳过…
JDBC - 超快速拿捏相关推荐
- 使用Python和OpenCV在图像之间执行超快速的颜色转换
使用Python和OpenCV在图像之间执行超快速的颜色转换 1. 效果图 2. 原理 2.1 颜色转移算法 2.2 步骤 2.3 算法改进 3. 源码 参考 这篇博客将介绍如何使用Python和Op ...
- 使用Python和OpenCV实现超快速,简单的伽玛校正功能
使用Python和OpenCV实现超快速,简单的伽玛校正功能 1. 效果图 2. 什么是伽玛校正? 3. 源码 参考 这篇博客将介绍伽马校正(也称为幂律变换)是什么,并将演示如何使用Python和Op ...
- 使用Python,OpenCV实现图像之间超快速的颜色转移
图像之间超快速的颜色转移 1. 效果图 2. 步骤 3. 改进算法的方法 4. 源码 参考 目标:源图像与目标图像,转移源图像的色彩空间到目标图像,生成一张新的图像: 有关如何在两个图像之间转移颜色, ...
- NanoDet:轻量级(1.8MB)、超快速(移动端97fps)目标检测项目
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:RangiLyu 编译:CV君 来自:OpenCV大本营 以下内容为作者介绍: 特点: 超轻量 ...
- Kraken:使用精确比对的超快速宏基因组序列分类软件
文章目录 Kraken:使用精确比对的超快速宏基因组序列分类 热心肠日报 摘要 主要结果 图1. Kraken序列分类算法 图2. 基于三个模拟宏基因组的分类程序准确性和速度比较 图3. 基于三个模拟 ...
- JDBC概念快速入门工具类Util的写法
JDBC概念&快速入门&工具类Util的写法 概念 Java Database Connectivity Java 数据库连接,用Java语言操作数据库 JDBC本质:官方定义的一套操 ...
- jvm ide_预热JVM –超快速生产服务器和IDE
jvm ide 几个月前,我正在阅读Java中的复杂事件处理以及实现低延迟的方法. 在我长达一个小时的研究结束时,我发现即使您的应用程序编写正确并且您的方法主要在0(log n)的时间内运行,并且您使 ...
- 预热您的JVM –超快速生产服务器和IDE
几个月前,我正在阅读Java中的复杂事件处理以及实现低延迟的方法. 在我长达一个小时的研究结束时,我发现即使您的应用程序编写正确并且您的方法主要在0(log n)的时间内运行,并且您正在使用某些前沿的 ...
- 索尼PS5将配备超快速的存储设备:最快2020年2月亮相
距离索尼PS4游戏主机发售已经过去了5年多的时间,自该机上市以来,至今已经卖出了超过9400万台,创造了难以追赶的销量成绩.而根据此前爆料,全新的Play Station 5最早将于2020年2月亮相 ...
- armax函数 matlab 源码_【源码】Kmeans聚类算法(超快速、简洁的设计方法)
这是一种超快速MATLAB实现的kmeans聚类算法. This is a super duper fast implementation of the kmeans clustering algor ...
最新文章
- 新手教程:用.htaccess实现二级域名功能
- SharePoint 2013 Workflow 状态栏失效
- VTK:网格之InterpolateFieldDataDemo
- 前端学习(3007):vue+element今日头条管理--消息提示
- 嵌入式常见笔试题总结(6)
- eclipse 配色方案
- 18.输入和输出函数
- js基础-5-数据类型,作用域,优先级
- pcl求平面法向量_PCL自动求解平面法向量参数化表示
- vue项目运行npm install报错
- Golang方差算法
- Adobe InDesign繁体字转简体字
- matlab计算热岛效应强度,城市热岛热岛强度.ppt
- 数字IC后端知识扫盲——OCV(上)
- 【引用】100句经典刺透人心,伤愈后才能更坚强
- 苹果和虫子c语言编程题,虫子吃苹果:每天10分钟,锻炼少儿编程计算思维
- H5实时上传位置定位 pc生成轨迹;h5保持后台运行
- 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出
- 7 月 24 号腾讯副总张小龙内部讲座《通过微信谈产品》
- LiteCAD参考文档的学习二(命令接口,命名对象之块、块的引用、块的属性、命令接口块的插入、块的复制)
热门文章
- shell机器人企业微信通知
- java覆盖写入_java写入文件(覆盖和续写)
- 003-Java技术体系
- 第三方支付和代付区别在哪?
- 自动执行bash被拒绝 提示/bin/sh: /test.sh: Permission denied
- npm报错, Error: EPERM: operation not permitted, mkdir
- 助力不文明行为检测识别—基于yolov3-tiny实现抽烟检测
- 计算机音乐我还是曾经那个少年,我还是从前那个少年是什么歌
- python 单因子方差分析_假设检验之F检验-方差分析
- win10磁盘管理_win10合并磁盘分区教程