JDBC

JDBC学习

JDBC学习

JDBC基础

JDBC快速入门

JDBC的概念

  1. jdbc的概念

  • JDBCjava DataBase Connectivity java数据库连接),是一种用于执行SQL语句的JavaAPI,可以为多种关系型数据库提供一种访问,它是由一组用java语言编写的类和接口组成

  1. jdbc的本质

  • 其实就是java官方提供的一种规范(接口),用于帮助开发人员快速实现不同关系型数据库的连接

    user

    JDBC

    MYSQL

    Oracle

    DB2

    1. jdbc快速入门程序

    • 导入jar包

     

    • 注册驱动

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

    • 获取数据库链接

    Connection conn=DriverManager.getConnection(“url”,“root”,”password”);

    • 定义SQL语句

    String sql=“select*from apples”;

    • 获取执行对象

    Statement stmt=conn.createStatement();

    • 执行SQL语句并返回结果

    stmt.executeUpdate(sql);

    • 处理结果

    • 释放资源

     

JDBC API功能类详解

DriverManager

1.DriverManager驱动管理对象

  • 注册驱动

    • 注册给定的驱动程序:static void registerDriver(Driver driver);

    • 写代码使用:Class.forName(“com.mysql.jdbc.Driver”);

    • 在com.mysql.jdbc.Driver类中存在静态代码块

MySQL5之后的驱动包,可以省略注册驱动的步骤

自动加载jar包中的META-INF/services/Java.sql.Driver文件中的驱动类

参数:

  • url:连接路劲

语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2……

示例:jdbc:mysql://127.0.0.1:3306/db1

细节:

  • 如果连接的时本机mysql服务器,并且mysql服务默认端口位3306,url可以简写成:jdbc:mysql:///数据库名称……

  • 配置userSSL=false参数,禁用安全连接方式,解决警告提示

  • user:用户名

  • password:密码


Connection

  • Connection(数据库连接对象)作用:

    • 获取执行SQL的对象

      1. 普通执行SQL对象

      Statement createStatement()

      1. 预编译SQL的执行SQL对象:防止SQL注入

      PreparedStatement prepareStatement(sql)

      1. 执行存储过程的对象

      CallableStatement prepareCall(sql)

    • 管理事务

      • MySQL事务管理

      开启事务:BEGIN;/START TRANSACTION;

      提交事务:COMMIT;

      回滚事务:ROLLBACK;

      MySQL默认自动提交事务

      • JDBC事务管理:Connection接口中定义了3个应对的方法

      开启事务:setAutoCommit(boolean autoCommit):true为自动提交事务;false为手动提交事务,即为开启事务

      提交事务:commit()

      回滚事务:rollback()

Statement

  • Statement作用:执行SQL语句

  • 执行SQL语句:

    int executeUpdate(sql):执行DML、DDL语句

    返回值:1. DML语句影响的行数 2. DDL语句执行后,执行成功也可能返回0

    ResultSet executeQuery(sql):执行DQL语句

    返回值:ResultSet结果集对象

ResultSet

  • ResultSet(结果集对象)作用:

    1. 封装了DQL查询语句的结果

      ResultSet stmt.execateQuey(sql);执行DQL语句,返回ResultS儿童对象

    • 获取查询结果:

      boolean next():1 将光标从当下位置向前移动一行 2.判断当前行是否为有效行

      返回值:

      • true:有效行,当前行有数据

      • false:无效行,当前行没有数据

      xxx getXxx(参数):获取数据

      • xxx:数据类型:如:int getInt(参数); String getString(参数)

      • 参数:

        • int : 列的编号,从1开始

        • String:列的名称

ResultSet的使用步骤:

  1. 游标向下移动一行,并判断该行数据是否为空

  2. 获取数据:getXxx(参数)

//循环判断游标是否在最后一行

while(rs.next()){

//获取数据

rs.getXxx(参数);

}

//执行完这个程序就会把数据库里表里面的数据全部打印到控制台里

ResultSet练习案例:从数据库里提取数据存放到集合里面

需求:查询数据库中表的数据,封装一个对象,并且存储到ArrayList集合中

封装一个LDB对象

测试类

PreparedStatement

PreparedStatement作用:

  • 预编译SQL语句并执行:预防SQL注入问题

  • 将敏感字符进行转义

    1. 获取PreparedStatement对象

    //SQL语句中的参数,使用占位符替代

    String sql=“select*from user where username=?and password=?”;

    //通过Connection对象获取,并传入对应的sql语句

    PreparedStatement pstmt = coun.preparedStatement(sql);

    1. 设置参数

    PreparedStatement对象:setXxx(参数1,参数2):给 ?赋值

    • Xxx:数据类型;如 setInt(参数1,参数2)

    • 参数:

      • 参数1:?的位置编号,从1开始

      • 参数2:?的值

    1. 执行SQL

    executeUpdate();/executeQuery(); :不需要再传递sql


  • SQL注入:

    • SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法

案例防治SQL注入

PreparedStatement的原理

PreparedStatement预编译功能的开启useServerPrepStmts=true

配置MYSQL


PreparedStatement原理:

  1. 在获取PreparedStatement对象时,将SQL语句发送给MySQL服务器进行检查、编译

  2. 执行时就不用再进行这些步骤了,速度更快

  3. 如果sql模板一样,则只需进行一次检查、编译

SQL

返回结果

java代码

MySQL

检查SQL语法

编译SQL

执行SQL

可执行的函数

数据库连接池

  • 数据库连接池是一个容器,负责分配、管理数据库连接

  • 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个

  • 释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏

  • 好处:

    • 资源重用

    • 提升系统响应速度

    • 避免数据库连接遗漏

数据库连接池的使用

  • 标准接口:DataSource

    • 官方(SUN)提供的数据库连接池的标准接口,由第三方组织实现接口

    • 功能:获取连接

      Connection getConnection()

  • 常见数据库连接池

    • DBCP

    • C3P0

    • Druid

  • Druid(德鲁伊)

    • Druid连接池是阿里巴巴开源的数据库连接池项目

    • 功能强大、性能优秀、是Java语言最好的数据库连接池之一

Driud数据库连接池的使用

  1. 导入druid的jar包

  2. 定义配置文件

  3. 加载配置文件

  4. 获取数据库连接池对象

  5. 获取链接

image-20221029164411214

JDBC案例

  • 商品品牌的增删改查

  • 查询所有数据

  • 添加品牌

  • 修改根据id修改

  • 删除根据id删除

 

Leave a Reply

Your email address will not be published. Required fields are marked *

Other My Posts