MySQL|JDBC编程

JDBC编程 什么是JDBC? JDBC(Java Database Connection)为Java开发者 使用数据库提供了统一的编程接口 ,它由一组Java类和接口组成(主要在java sql,javax sql包中)。是Java程序与数据库系统通信的标准API。JDBC API 使得开发人员可以使用纯java的方式来连接数据库,并执行操作。JDBC这套接口的实现,称为 数据库驱动 ,由各个数据库厂商提供。
MySQL|JDBC编程
文章图片

为什么要使用JDBC?

  • 市面上有非常多的数据库,本来我们是需要根据不同的数据库学习不同的API,sun公司为了简化这个操作,定义了JDBC API【接口】
  • sun公司只是提供了JDBC API,数据库厂商负责实现。
  • 对于我们来说,操作数据库都是在JDBC API【接口】上,使用不同的数据库,只要用数据库厂商提供的数据库驱动程序。
JDBC工作原理 JDBC为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。
MySQL|JDBC编程
文章图片

JDBC优势:
  • Java语言访问数据库操作完全面向抽象接口编程
  • 开发数据库应用不用限定在特定数据库厂商的
  • API 程序的可移植性大大增强
JDBC常用接口和类 Driven 接口(驱动)
  • 各个数据库厂商的提供的,对Sun公司提出的Connection等JDBC接口的实现。
  • 装载驱动
    • Mysql Class.forName("com.mysql.jdbc.Driver");
    • Oracle Class.forName("oracle.jdbc.driver.OracleDriver")
DriverManager接口
  • JDBC的DriverManager是一个工厂类,我们通过它来创建数据库连接。
  • 当JDBC的Driver类被加载进来时,它会自己注册到DriverManager类里面
  • 然后我们会把数据库配置信息传成DriverManager.getConnection()方法,DriverManager会使用注册到它里面的驱动来获取数据库连接,并返回给调用的程序。
Connection接口
Connection接口与特定数据库的连接,在连接上下文中执行SQL语句并返回结果.
Connection接口实现类由数据库提供,获取Connection对象通常有两种方式:
  • 通过DriverManger (驱动管理类)的静态方法获取:
MySQL|JDBC编程
文章图片

  • 通过DataSource(数据源)对象获取,实际应用中会使用DataSoucre对象
MySQL|JDBC编程
文章图片

DriverManger 和DataSource的区别:
  1. DriverManger 类来获取的Connection连接,是无法重新利用的,每次使用完以后释放资源时,通过connection.close()都是关闭物理连接
  2. DataSource提供连接池支持。连接池在初始化时将创建一定数量的数据库连接,这些连接是可以进行复用的。每次使用完数据库连接,释放资源调用connection.close()都是将Connection连接对象回收。(回收会重置connection对象的属性)
数据库连接池,基于享元模式,在初始化的时候就创建多个连接,每次使用完再还原。(所有的使用者共享资源,不用每次都创建资源,以提高效率)
Statement 对象
用于执行静态的SQL语句并返回它锁生成的结果的对象。
三种Statement类:
MySQL|JDBC编程
文章图片

一般使用PreparedStatement对象。
PreparedStatement对象特点:
  • 参数化SQL查询——把占位符用参数替换
  • 性能比Statement高
  • 会进行SQL预编译
  • 阻止常见SQL注入攻击
  • 占位符下标从1开始
  • 占位符不能使用多值
执行SQL的两种方法:
  • executeQuery() 方法执行后返回单个结果集的,通常用于select语句
  • executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于update、insert、delete语句。
ResultSet 对象
ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next()方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。
  • Statement 执行 SQL 语句时返回 ResultSet 结果集 。
  • ResultSet 提供的检索不同类型字段的方法,常用的有 :
    • getString() : 获得在数据库里的varchar、char等数据类型的对象。
    • getFloat(): 获得杂数据库里是 Float 类型的对象。
    • getDate(): 获得在数据库里面是Date类型的数据。
    • getBoolean(): 获得在数据库里面是 Boolean 类型的数据。
JDBC操作数据库的步骤
  1. 创建数据库连接Connection
  2. 创建操作命令Statement
  3. 使用操作命令来执行SQL
  4. 处理结果集ResultSet——查询操作需要进行结果集的处理
  5. 释放资源——反向释放资源(关闭结果集、命令、连接)
Connection connection = null; Statement statement = null; ResultSet resultSet = null; try {//1. //DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //2. Class.forName("com.mysql.jdbc.Driver"); //获取与数据库连接的对象-Connetcion connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root"); //获取执行sql语句的statement对象 statement = connection.createStatement(); //执行sql语句,拿到结果集 resultSet = statement.executeQuery("SELECT * FROM users"); //遍历结果集,得到数据 while (resultSet.next()) {System.out.println(resultSet.getString(1)); System.out.println(resultSet.getString(2)); }} catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally {//反向关闭结果集if (resultSet != null) { try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); }} if (statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); }} if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); }}}

JDBC常见面试题???????


【MySQL|JDBC编程】

    推荐阅读