文章摘要

  • 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&amp;character=utf8&amp;useSSL=false&amp;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 - 超快速拿捏相关推荐

  1. 使用Python和OpenCV在图像之间执行超快速的颜色转换

    使用Python和OpenCV在图像之间执行超快速的颜色转换 1. 效果图 2. 原理 2.1 颜色转移算法 2.2 步骤 2.3 算法改进 3. 源码 参考 这篇博客将介绍如何使用Python和Op ...

  2. 使用Python和OpenCV实现超快速,简单的伽玛校正功能

    使用Python和OpenCV实现超快速,简单的伽玛校正功能 1. 效果图 2. 什么是伽玛校正? 3. 源码 参考 这篇博客将介绍伽马校正(也称为幂律变换)是什么,并将演示如何使用Python和Op ...

  3. 使用Python,OpenCV实现图像之间超快速的颜色转移

    图像之间超快速的颜色转移 1. 效果图 2. 步骤 3. 改进算法的方法 4. 源码 参考 目标:源图像与目标图像,转移源图像的色彩空间到目标图像,生成一张新的图像: 有关如何在两个图像之间转移颜色, ...

  4. NanoDet:轻量级(1.8MB)、超快速(移动端97fps)目标检测项目

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:RangiLyu  编译:CV君 来自:OpenCV大本营 以下内容为作者介绍: 特点: 超轻量 ...

  5. Kraken:使用精确比对的超快速宏基因组序列分类软件

    文章目录 Kraken:使用精确比对的超快速宏基因组序列分类 热心肠日报 摘要 主要结果 图1. Kraken序列分类算法 图2. 基于三个模拟宏基因组的分类程序准确性和速度比较 图3. 基于三个模拟 ...

  6. JDBC概念快速入门工具类Util的写法

    JDBC概念&快速入门&工具类Util的写法 概念 Java Database Connectivity Java 数据库连接,用Java语言操作数据库 JDBC本质:官方定义的一套操 ...

  7. jvm ide_预热JVM –超快速生产服务器和IDE

    jvm ide 几个月前,我正在阅读Java中的复杂事件处理以及实现低延迟的方法. 在我长达一个小时的研究结束时,我发现即使您的应用程序编写正确并且您的方法主要在0(log n)的时间内运行,并且您使 ...

  8. 预热您的JVM –超快速生产服务器和IDE

    几个月前,我正在阅读Java中的复杂事件处理以及实现低延迟的方法. 在我长达一个小时的研究结束时,我发现即使您的应用程序编写正确并且您的方法主要在0(log n)的时间内运行,并且您正在使用某些前沿的 ...

  9. 索尼PS5将配备超快速的存储设备:最快2020年2月亮相

    距离索尼PS4游戏主机发售已经过去了5年多的时间,自该机上市以来,至今已经卖出了超过9400万台,创造了难以追赶的销量成绩.而根据此前爆料,全新的Play Station 5最早将于2020年2月亮相 ...

  10. armax函数 matlab 源码_【源码】Kmeans聚类算法(超快速、简洁的设计方法)

    这是一种超快速MATLAB实现的kmeans聚类算法. This is a super duper fast implementation of the kmeans clustering algor ...

最新文章

  1. 新手教程:用.htaccess实现二级域名功能
  2. SharePoint 2013 Workflow 状态栏失效
  3. VTK:网格之InterpolateFieldDataDemo
  4. 前端学习(3007):vue+element今日头条管理--消息提示
  5. 嵌入式常见笔试题总结(6)
  6. eclipse 配色方案
  7. 18.输入和输出函数
  8. js基础-5-数据类型,作用域,优先级
  9. pcl求平面法向量_PCL自动求解平面法向量参数化表示
  10. vue项目运行npm install报错
  11. Golang方差算法
  12. Adobe InDesign繁体字转简体字
  13. matlab计算热岛效应强度,城市热岛热岛强度.ppt
  14. 数字IC后端知识扫盲——OCV(上)
  15. 【引用】100句经典刺透人心,伤愈后才能更坚强
  16. 苹果和虫子c语言编程题,虫子吃苹果:每天10分钟,锻炼少儿编程计算思维
  17. H5实时上传位置定位 pc生成轨迹;h5保持后台运行
  18. 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出
  19. 7 月 24 号腾讯副总张小龙内部讲座《通过微信谈产品》
  20. LiteCAD参考文档的学习二(命令接口,命名对象之块、块的引用、块的属性、命令接口块的插入、块的复制)

热门文章

  1. shell机器人企业微信通知
  2. java覆盖写入_java写入文件(覆盖和续写)
  3. 003-Java技术体系
  4. 第三方支付和代付区别在哪?
  5. 自动执行bash被拒绝 提示/bin/sh: /test.sh: Permission denied
  6. npm报错, Error: EPERM: operation not permitted, mkdir
  7. 助力不文明行为检测识别—基于yolov3-tiny实现抽烟检测
  8. 计算机音乐我还是曾经那个少年,我还是从前那个少年是什么歌
  9. python 单因子方差分析_假设检验之F检验-方差分析
  10. win10磁盘管理_win10合并磁盘分区教程