JDBC简介

  JDBC(Java DataBase Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,
可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,
据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

JDBC体系结构

  Java提供访问数据库规范称为JDBC,而生产厂商提供规范的实现类称为驱动。没有驱动将无法完成数据库连接,
也不能操作数据库,每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商提供。

JDBC体系结构由两层组成:

  • JDBC:提供了应用程序到数据库连接规范。

  • JDBC驱动程序: 连接数据库的驱动程序的实现。

JDBC API使用驱动程序管理器来管理不同数据库的驱动程序

JDBC核心组件

  DriverManager: 此类管理数据库驱动程序列表。使用通信协议将来自java应用程序的连接请求与适当的数据库驱动程序匹配。

​    Driver:此接口处理与数据库服务器的通信,我们很少会直接与Driver对象进行交互。而是使用DriverManager对象来管理这种类型的对象。

​    Connection:该接口具有用于连接数据库的所有方法。连接对象表示通信上下文,数据库的所有通信仅通过连接对象。

​    Statement:使用从此接口创建的对象将SQL语句提交到数据库。除了执行存储过程之外,一些派生接口还接受参数。

​    ResultSet:在使用Statement对象执行SQL查询后,这些对象保存从数据库检索的数据。它作为一个迭代器,允许我们移动其数据。

​    SQLException:此类处理数据库应用程序中发生的任何异常。

JDBC入门

构建JDBC应用程序涉及以下六个步骤:

- 导入JDBC驱动包:需要下载包含数据库编程所需的JDBC的jar包。
- 注册JDBC驱动程序:要求您初始化驱动程序,以便您可以打开与数据库的通信通道。
 Class.forName("com.mysql.jdbc.Driver");
- 创建连接:需要使用DriverManager.getConnection()方法创建一个Connection对象,该对象表示与数据库的物理连接。
//连接字符串 characterEncoding=utf8采用编码格式 useSSL=false不适用SSL安全连接
String URL = "jdbc:mysql://localhost:3306/emp?characterEncoding=utf8&useSSL=false";
Connection conn = DriverManager.getConnection(URL, USER, PASS);
- 执行查询:需要使用类型为Statement的对象来构建和提交SQL语句到数据库。
Statement stat= conn.creatStatement();
- 从结果集中提取数据:需要使用相应的ResultSet.getXXX()方法从结果集中检索数据。
ResultSet rs = stat.execute(executeUpdate/executeQuery)(*****);
- 释放资源:需要明确地关闭所有数据库资源,而不依赖于JVM的垃圾收集。
rs.close();
stat.close();
conn.close();

createStatement 容易sql注入

sql注入: SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

preparedStatement

PreparedStatement接口扩展了Statement接口,提供了比Statement对象更强大的功能。

作用:1预编译,效率高 2 安全,避免SQL注入

   String SQL = "Update Employees SET age = ? WHERE id = ?";
pstmt = conn.prepareStatement(SQL);
. . .

JDBC中的所有参数都由 ? 符号,这被称为参数标记。在执行SQL语句之前,必须为每个参数提供值。

最后所有的都要关闭!!!!也就是释放资源

026_JDBC的更多相关文章

随机推荐

  1. 继承中的隐藏(hide)重写(Override)和多态(Polymorphism)

    继承中的隐藏:(不要使用隐藏,语法没有错误但是开发项目时会被视为错误) 在继承类中完全保留基类中的函数名 //基类,交通工具 class Vehicle { public void Run() { C ...

  2. centos做免密登录

    CentOS 6.9 SSH配置用户免密码登录 1. 演示环境: 192.168.1.144:CentOS 6.9 x86_64 192.168.1.146:CentOS 7.4 x86_64 2.  ...

  3. java排序算法之冒泡排序和快速排序

    总结一下Java排序算法,以便记忆. 各类排序的时间复杂度: 排序方法 时间复杂度(平均) 时间复杂度(最坏) 时间复杂度(最好) 空间复杂度 稳定性 复杂性 直接插入排序 O(n2)O(n2) O( ...

  4. win7 设置双屏壁纸

    http://dualmonitortool.sourceforge.net/ http://www.displayfusion.com/Features/Wallpaper/ 以第一个软件为例: 1 ...

  5. 3. Vim入门教程

    1. 基本概念 1.1 了解Vim的三个基本模式 当我们安装完一个编辑器后,肯定会打开它,然后在里面输入点什么东西,但是打你打开Vim后,想要输入点什么却发现自己什么都没有输入,所以在写点东西之前,先 ...

  6. HDU1285-确定比赛名次-拓扑排序板子题

    有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道 ...

  7. tensorflow TypeError: Can not convert a float32 into a Tensor or Operation

    遇到这种情况可能是你的程序中有和你定义的tensor 变量重名的其他变量名字,jishi在for循环中使用了这个名字的作为临时变量也不行.tenor 变量很娇气.坑了我一晚上的时间. 比如:x = t ...

  8. js用document.getElementById时要注意!

    <!DOCTYPE html> <html lang="en"> <head> <script src="http://code ...

  9. Python服务端工程师就业面试指导✍✍✍

    Python服务端工程师就业面试指导  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时 ...

  10. 【csp】2018-3

    第一题 跳一跳 题目: 题意:浅显.qwq 题解:2计数+1,到1就清空计数. 代码: #include<iostream> #include<cstdio> #include ...