【Java系列笔记009】JDBC(完结)

本文详细介绍了JDBC的基础概念、快速入门步骤、各个类的详细功能、JDBCUtils工具类、事务管理和数据库连接池(C3P0和Druid)的使用,以及Spring框架中的JDBCTemplate应用。
摘要由CSDN通过智能技术生成

JDBC

第一节:JDBC快速入门

1.1 JDBC基本概念

JDBC:Java DataBase Connectivity Java 数据库连接,Java语言操作数据库

**JDBC本质:**官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

1.2 JDBC快速入门
步骤:

1、导入驱动jar包

  • 复制jar包到项目的目录下
  • 右键选择添加为库

2、注册驱动

3、获取数据库连接对象 Connection

4、定义sql

5、获取执行sql语句的对象 Statement

6、执行sql,接受返回结果

7、处理结果

8、释放资源

第二节: JDBC各个类详解

1、DriverManager:驱动管理对象
  • 功能:
    • **注册驱动:**告诉程序该使用哪一个数据库驱动jar
      • public static void registerDriver(Driver driver):注册与给定的驱动程序DriverManager
      • 写代码使用:Class.format("com.mysql.jdbc.Driver")
      • 通过查看源码发现:在com.mysql.jdbc.Driver类中存在静态代码块
      • 注意:mysql 5之后的驱动jar包可以省略注册驱动的步骤
    • 获取数据库连接
      • 方法:static Connection getConnection(String url,String user,String password)
      • 参数:
        • **url:**指定连接的路径
          • 语法:jdbc:mysql://ip地址(或域名):端口号/数据库名称
          • 例子:jdbc:mysql://localhost:3306/alll
          • 细节:如果连接的是本机mysql服务器,并且mysql服务器默认端口是3306,则url可简写为:jdbc:mysql:///数据库名称
        • **uesr:**用户名
        • **password:**密码
2、Connection:数据库连接对象
  • 功能:
    • 获取执行sql的对象
      • Statement createStatement()
      • PreparedStatement prepareStatement(String sql)
    • 管理事务
      • 开启事务:void setAutoCommit(boolean autoCommit):调用该方法设置参数为flase,即开启事务
      • 提交事务:void commit()
      • 回滚事务:void rollback()
3、Statement:执行sql的对象
  • 功能:
    • 执行sql
      • boolean execute(String sql):可以执行任意的sql 了解
      • int executeUpdate(String sql):执行DML(insert、update、delete)语句、DDL(create、alter、drop)语句
        • **返回值:**影响的行数,可以通过影响的行数判断DML语句是否执行成功,若返回值>0,则执行成功,反之,则执行失败
      • ResultSet executeQuery(String sql):执行DQL(select) 语句
  • 练习:
    • 1、account表 添加一条记录
    • 2、account表 修改记录
    • 3、account表 删除一条记录
4、ResultSet:结果集对象,封装查询结果
  • 方法:
    • next():游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是,则返回true
    • getXxx(参数):获取数据
      • Xxx:代表数据类型 如:getInt()
      • 参数:
        • int:代表列的编号,从1开始。 如:getString(1);
        • String:代表列名称。如:getDouble("balance")
  • 注意:
    • 使用步骤:
      • 游标向下移动一行
      • 判断是否有数据
      • 获取数据
  • 练习:
    • 定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回
      • 1、定义Emp类
      • 2、实现方法public List<Emp> findAll(){}
      • 3、实现方法select * from emp;
5、PreparedStatement:执行sql对象
  • **SQL注入问题:**在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题

    • 输入用户名随便,输入密码:a' or 'a' = 'a
    • sql:select * from user where username="用户名" and password="a" or "a"="a"等式恒成立
  • **解决sql注入问题:**使用PreparedStatement对象来解决

  • **预编译的sql:**参数使用?作为占位符

  • 步骤:

    • 1、导入驱动jar包

      • 复制jar包到项目的目录下
      • 右键选择添加为库

      2、注册驱动

      3、获取数据库连接对象 Connection

      4、定义sql

      • 注意:sql的参数使用?作为占位符。如:select * from user where username=? and password=?;

      5、获取执行sql语句的对象 PreparedStatement

      • connection.prepareStatement(String sql)

      6、给?赋值:

      • 方法:setXxx(参数1,参数2)
        • 参数1:?的位置编号从1开始
        • 参数2:?的值

      7、执行sql,接受返回结果,不需要传递sql语句

      8、处理结果

      9、释放资源

  • **注意:**后期都会使用PreparedStatement来完成增删改查的所有操作

    • 可以防止sql注入
    • 效率更高

第三节:抽取JDBC工具类:JDBCUtils

目的:简化书写

分析:

1、注册驱动也抽取

2、抽取一个方法获取连接对象

  • **需求:**不想传递参数(麻烦),还得保证工具类的通用性
  • **解决:**定义一个配置文件

3、抽取一个方法释放资源

第四节:JDBC控制事务

**事务:**一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这个步骤要么同时成功,要么同时失败

使用Connection对象来管理事务

操作:

  • 开启事务connection.setAutocommit(flase);
    • 在执行sql之前开启事务
  • 提交事务connection.commit();
    • 当所有sql都执行完提交事务
  • 回滚事务connection.rollback();
    • 在catch中回滚事务

第五节:数据库连接池

5.1 概述

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

5.2 数据库连接池的好处:
  • 节约资源
  • 用户访问高效
5.3 实现
  • 标准接口:DataSource:javax.sql包下的
    • 方法:
      • 获取连接:getConnection()
      • 归还连接:Connection.close() 如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了,而是归还连接
  • 一般我们不去实现它,由数据库厂商来实现
    • **C3P0:**数据库连接池技术
    • **Druid:**数据库连接池实现技术,由阿里巴巴提供的
5.4 C3P0的基本使用
使用步骤:
1、导入jar包(两个):

c3p0-0.9.5.5.jar 导入依赖jar包:mchange-commons-java-0.2.19.jar

**注意:**除了以上两个包,也不要导入数据库驱动jar包

2、 定义配置文件:
  • 名称:必须命名为c3p0.properties 或者c3p0-config.xml
  • **路径:**直接将文件放在src目录下即可
3、创建核心对象

数据库连接池对象 ComboPooledDataSource

4、获取连接

getConnection

5.5 druid的基本使用

步骤:

1、导入jar包:

只需要导入:druid-1.2.4.jar包和驱动包即可

2、定义配置文件:

  • properties形式的
  • 可以叫任意名称,可以放在任意目录下
3、加载配置文件

Properties

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

通过工厂类来获取:DruidDataSourceFactory

5、获取连接
5.6 druid工具类

1、定义一个类:JDBCUtils

2、提供静态代码块加载配置文件,初始化连接池对象

3、提供方法

  • 1、获取连接方法:通过数据库通过数据库连接池
  • 2、释放资源
  • 3、获取连接池的方法
public class JDBCUtils {
    private static DataSource ds;


    static {
        try {
            //加载配置文件
            Properties pro=new Properties();
            pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));

            try {
                //获取DataSource
                ds= DruidDataSourceFactory.createDataSource(pro);

            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    public static void close(Connection con, Statement sta){
        if(con!=null) {
            try {
                con.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (sta!=null) {
            try {
                sta.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
    public static DataSource getDataSource(){
        return ds;
    }

    public static void close(Connection con, Statement sta, ResultSet res){
        if(con!=null) {
            try {
                con.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (sta!=null) {
            try {
                sta.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (res!=null) {
            try {
                res.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}

第六节:JDBCTemplate

Spring框架对JDBC简单封装

提供了一个JDBCTemplate对象简化JDBC的开发

步骤:

1、导入jar包

2、创建JdbcTemplate对象。依赖于数据源DataSource

  • JdbcTemplate template=new JdbcTemplate(ds);

3、调用JdbcTemplate的方法来完成CRUD的操作

  • update("sql"):执行DML语句。增删改语句
  • queryForMap("sql"):查询结果将结果集封装为map集合,将列名作为key,将值作为value,将这条记录封装为map集合
    • 注意:这个方法结果长度只能为1
  • queryForList("sql"):查询结果将结果集封装为List集合
    • 注意:将每一条记录封装为一个map集合,再将map集合装载到list集合中
  • query("sql",参数2):查询结果,将结果封装为JavaBean对象
    • 参数2 RowMapper
      • RowMapper<指定类型>():需要自己重写代码
      • BeanPropertyRowMapper<指定类型>(指定类型.class):一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装。
  • queryForObject("sql",参数2):查询结果,将结果封装为对象
    • 一般用于聚合函数的查询
    • 参数2:返回值类型.class(返回值类型的字节码)
练习:

需求:

1、修改1号数据的 salary 为10000

2、添加一条记录

3、删除刚才添加的记录

4、查询id为1的记录,将其封装为map集合

5、查询所有记录,将其封装为list

6、查询所有记录,将其封装为Emp对象的List集合

7、查询总记录数

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值