JDBC

一、JDBC

概念

概念:Java DataBase Connectivity。Java语言操作数据库。
本质就是官方定义的一套操作所有关系型数据库的规则(接口)。各个数据库厂商去实现这套接口,提供数据库驱动jar包。就可以使用这套接口进行编码。即不需要修改代码,只需要修改jar包,来实现更换数据库的功能。

步骤

  • 导入驱动jar包
  • 注册驱动
  • 获取数据库连接对象 Connection
  • 定义sql
  • 获取执行sql语句对象 Statement
  • 执行sql,接受返回结果
  • 处理结果
  • 释放资源

步骤分解

DriverManager:驱动管理对象

  • 功能
    • 注册驱动:告诉程序该使用哪一个数据库驱动jar包
        * static void registerDriver(Driver driver):注册与给定的驱动程序 DriverManager
        * 写代码用:Class.forName("com.mysql.jdbc.Driver");
        * 在com.mysql.jdbc.Driver中通过静态代码块中调用注册功能
        * mysql5之后的驱动jar包可以省略注册驱动的步骤
      
    • 获取数据库连接
      • static Connection getConnection(String url, String user, String password);
      • 参数:
        • url:jdbc:mysql://IP地址(域名):端口号/数据库名称
        • user:用户名
        • password:密码

Connection:数据库连接对象

  • 功能
    • 获取执行sql的对象
      • Statement createStatement()
      • PreparedStatement prepareStatement(String sql)
    • 管理事务
      • 开启事务
        • setAotuCommit(boolean autoCommit) false时即开启事务
      • 提交事务
        • commit()
      • 回滚事务
        • rollback()

Statement:执行sql的对象

  • 功能
    • 用于执行静态sql语句并返回生成的结果的对象
    • boolean execute(String sql):执行任何sql
    • int executeUpdate(String sql):执行DML语句、DDL语句,返回值为影响的行数
    • ResultSet executeQuery(String sql):执行DQL语句

ResultSet:结果集对象

  • 功能 封装查询对象
    • boolean next():游标向下移动一行,如果返回false表示没有数据列,true则还有数据
    • getXxx(参数):获取数据,Xxx为数据类型,参数为Int表示列的编号(从1开始),参数为String为列的名称

PreparedStatement:执行sql的对象(更强)

  • sql注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接,造成安全问题。
  • 因此使用PreparedStatement来解决
  • 预编译的SQL:参数使用?来作为占位符
  • 步骤
    • 导入驱动jar包
    • 注册驱动
    • 获取数据库连接对象 Connection
    • 定义sql
      • 注意参数的使用,使用?作为占位符select * from user where username=? and password=?;
    • 获取执行sql语句对象 PreparedStatement:Connection.prepareStatement(String sql)
    • 赋值
      • 方法:setXxx(参数1, 参数2)参数1为?的位置,2的?值
    • 执行,接受返回结果
    • 处理结果
    • 释放资源

二、连接池

数据库连接池

概念

其实是一个容器(集合),存放数据库连接的容器。当系统初始化后,容器就被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完后,会将连接对象归还给容器。

实现

  • 1.标准接口:DataSourcew javax.sql包下
    • 获取连接:getConnection()
    • 归还连接:Connection.close()方法不会关闭连接而是归还连接
  • 2.真实使用
    • 1.C3P0:数据库连接池技术
    • 2.Druid:数据库连接池技术,由阿里巴巴提供的

C3P0

  • 步骤
    • 1.导入包
    • 2.定义配置文件
      • 名称:c3p0.properties或者c3p0-config.xml
      • 路径:直接将文件放在src路径
    • 创建核心对象 数据库连接池对象 ComboPooledDataSource
    • 获取连接:getConnection

Druid

  • 步骤
    • 1.导入包
    • 2.定义配置文件
      • 名称:druid.properties
      • 路径:直接将文件放在src路径
    • 加载配置信息
    • 创建核心对象 通过工厂类来获取 DruidDataSourceFactory
    • 获取连接:getConnection

spring JDBC

由spring框架提供的JDBC的简单封装

步骤

  • 1.导入jar
  • 2.创建对象 JDBCTemplate对象。依赖DataSource
    • JDBCTemplate j = new JDBCTemplate(dataSource)
  • 通过JDBCTemplate完成crud操作
    • update():DML语句
    • quertForMap():将结果封装到map
    • quertForList():将结果封装到List
    • quert():将结果封装到JavaBean对象
    • quertForObject():查询结果,将结果封装为对象