• JDBC基础知识


    1-JDBC概述

    Java 中的数据存储技术

    在Java中,数据库存取技术可分为如下几类:
    1. JDBC直接访问数据库
    2. JDO技术
    3. 第三方O/R工具,如Hibernate, mybatis 等

    JDBC是java访问数据库的基石,JDO, Hibernate等只是更好的封装了JDBC。

    JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(java.sql,javax.sql)使用这个类库可以以一种标准的方法来方便地访问数据库资源

    1. JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些
      细节问题。
    2. JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。

      在这里插入图片描述

    JDBC体系结构

    JDBC接口(API)包括两个层次:

    1. 面向应用的API:Java API,抽象接口,供应用程序开发人员使用(连接数据库,执行SQL语句,获得结果)。
    2. 面向数据库的API:Java Driver API,供开发商开发数据库驱动程序用。

    JDBC程序访问数据库步骤

    在这里插入图片描述

    2-获取数据库连接

    1. Driver 接口

    1. java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现
    2. 在程序中不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现
      2.1 Oracle的驱动:oracle.jdbc.driver.OracleDriver
      2.2 mySql的驱动: com.mysql.jdbc.Driver

    加载与注册 JDBC 驱动

    方式一:加载 JDBC 驱动需调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名

    Class.forName(“com.mysql.jdbc.Driver”);
    
    • 1

    方式二:DriverManager 类是驱动程序管理器类,负责管理驱动程序

    DriverManager.registerDriver(com.mysql.jdbc.Driver);
    
    • 1

    通常不用显式调用 DriverManager 类的 registerDriver() 方法来注册驱动程序类的实例,因为 Driver 接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用 DriverManager.registerDriver() 方法来注册自身的一个实例。

    建立连接(Connection)

    1. 可以调用 DriverManager 类的 getConnection() 方法建立到数据库的连接
    2. User,password可以用“属性名=属性值”方式告诉数据库;
    3. JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。
    4. JDBC URL的标准由三部分组成,各部分间用冒号分隔。
      4.1 jdbc:子协议:子名称
      4.2 协议:JDBC URL中的协议总是jdbc
      4.3 子协议:子协议用于标识一个数据库驱动程序
      4.4 子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息。包含主机名(对应服务端的ip地址),端口号,数据库名。
      在这里插入图片描述

    3-使用Statement操作数据表的弊端

    访问数据库

    1. 数据库连接被用于向数据库服务器发送命令和 SQL 语句,在连接建立后,需要对数据库进行访问,执行 sql 语句。

    在 java.sql 包中有 3 个接口分别定义了对数据库的调用的不同方式:
    在这里插入图片描述
    SQL 注入攻击
    2. SQL 注入是利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的 SQL 语句段或命令(如:SELECT user, password FROM user_table WHERE user=‘a’ OR 1 = ’ AND password = ’ OR ‘1’ = ‘1’) ,从而利用系统的 SQL 引擎完成恶意行为的做法
    3. 对于 Java 而言,要防范 SQL 注入,只要用PreparedStatement(从Statement扩展而来) 取代 Statement 就可以了。

    4-使用PreparedStatement

    1. 可以通过调用 Connection 对象的 preparedStatement() 方法获取PreparedStatement 对象。
    2. PreparedStatement 接口是 Statement 的子接口,它表示一条预编译过的SQL 语句。
    3. PreparedStatement 对象所代表的 SQL 语句中的参数用问号(?)来表示,调用 PreparedStatement 对象的 setXxx() 方法来设置这些参数. setXxx() 方法有两个参数,第一个参数是要设置的 SQL 语句中的参数的索引(从 1 开 始),第二个是设置的 SQL 语句中的参数的值。
      在这里插入图片描述
      在这里插入图片描述

    释放资源

    1. 释放ResultSet, Statement,Connection。
    2. 数据库连接(Connection)是非常稀有的资源,用完后必须马上释放,如果Connection不能及时正确的关闭将导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放

    ResultSet

    1. 通过调用 PreparedStatement 对象的 excuteQuery() 方法创建该对象
    2. ResultSet 对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet 接口由数据库厂商实现
    3. ResultSet 对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过ResultSet 对象的 next() 方法移动到下一行
    4. ResultSet 接口的常用方法:
        boolean next()
    	getString()
         …
    
    • 1
    • 2
    • 3

    关于ResultSet的说明

    1. 查询需要调用Prepared Statement 的 executeQuery() 方法,查询结果是一个 ResultSet对象。
    2. 关于 ResultSet:代表结果集
      2.1 ResultSet: 结果集. 封装了使用 JDBC 进行查询的结果。
      2.2 调用 PreparedStatement 对象的 executeQuery() 可以得到结果集.
      2.3 ResultSet 返回的实际上就是一张数据表. 有一个指针指向数据表的第一条记录的前面。

    3.可以调用 next() 方法检测下一行是否有效. 若有效该方法返回 true, 且指针下移. 相当于Iterator 对象的 hasNext() 和 next() 方法的结合体。
    4.当指针指向一行时, 可以通过调用 getXxx(int index) 或 getXxx(int columnName) 获取每一列的值。

    例如: getInt(1), getString("name")
    
    • 1

    5.ResultSet 当然也需要进行关闭。

    ResultSetMetaData 类

    在这里插入图片描述

    使用PreparedStatement实现批量插入

    批量处理JDBC语句提高处理速度

    在这里插入图片描述
    在这里插入图片描述
    jdbc连接mysql实例

  • 相关阅读:
    CentOS部署MySQL 5.7(详细)
    安防监控/视频汇聚/云存储/AI智能视频分析平台EasyCVR显示CPU过载,该如何解决?
    java114-Calendar类方法before
    Nacos服务心跳和健康检查源码介绍
    Fastadmin/Tp5.0连接多个数据库
    网络协议--IP选路
    一文看懂混沌网格(Chaos Mesh)工作原理
    Ubuntu 系统安装 VS Code 并配置 C++ 环境
    计算机毕业设计(附源码)python智慧后勤app
    R语言使用epiDisplay包的pyramid函数可视化金字塔图、基于已有的汇总数据(表格数据)可视化金字塔图、使用main参数添加自定义标题信息
  • 原文地址:https://blog.csdn.net/qq_47905231/article/details/126261760