JDBC及API详解、Druid连接池

JDBC概念

JDBC就是使用Java语言操作关系型数据库的一套API·全称: Java DataBase Connectivity

JDBC本质

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

JDBC好处

  • 各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发
  • 可随时替换底层数据库,访问数据库的Java代码基本不变

连接步骤(我的是MySQL8.0跟5的有些出入,记得导包)

        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获取连接
        String url = "jdbc:mysql://localhost:3306/database?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
        String user = "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url, user, password);
        //3.定义sql
        String sql = "";
        //4.获取执行sql的对象
        Statement stmt = conn.createStatement();
        //5.执行sql
        int count = stmt.executeUpdate(sql);//受影响的行数
        //6.关闭资源
        stmt.close();
        conn.close();

 JDBC-API详解

  • DriverManager

驱动管理类,有两个作用——注册驱动、获取数据库连接

//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//查看Driver源码,发现静态代码块,上面那句代码执行时,这个静态代码块里的内容会执行
static {
        try {
            //调用DriverManager的注册方法
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }

提示:

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

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

        //2.获取连接
        String url = "jdbc:mysql://localhost:3306/database1?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
        String user = "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url, user, password);
  • Connection

作用:获取执行SQL的对象;管理事务

1.获取执行SQL的对象

·普通执行SQL对象
Statement                              createStatement()
·预编译$QL的执行SQL对象:防止SQL注入
PreparedStatement               prepareStatement (sql)
·执行存储过程的对象
CallableStatement                  prepareCall (sql)

2.事务管理

MySQL事务管理
        开启事务:BElGIN; /START TRANSACTION;

        提交事务:COMMIT;
        回滚事务:ROLLBACK;
        MySQL默认自动提交事务

JDBC 事务管理:Connection接口中定义了3个对应的方法
        开启事务: setAutoCommit(boolean autoCommit): true为自动提交事务; false为手动提交事务,即为开启事务

        提交事务:commit()
        回滚事务: rollback()

try {
//开启事务
conn .setAutocommit(false);

//5.执行sql
int count1 = stmt.executeUpdate(sql1);//受影响的行数
//6.处理结果
system.out.println(count1);

//5.执行sql
int count2 = stmt.executeUpdate(sql2);//受影响的行数
//6.处理结果
system.out.println(count2);

//提交事务
conn.commit();
}catch (Exception throwables) {
//回滚事务
conn.rollback();
throwables.printStackTrace(;
}
  • Statement

statement就是用来执行sql语句的。

executeUpdate(sql):执行DML(对数据增删改)、DDL语句

返回值(int型):

        (1)DML语句影响的行数

        (2)DDL语句执行后,执行成功也可能返回0

executeQuery(sql):执行DQL语句

返回值(ResultSet): ResultSet结果集对象

  • ResultSet

结果集对象

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

boolean next():

(1)从表头开始将光标从当前位置向下移动一行

(2)判断当前行是否为有效行返回值:

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

//配合使用
while(rs.next()){
    int a=rs.getInt(1);
    ...
    ...
    ...
    ...
}

xxx getXxx(参数):

获取数据
xXx:数据类型;如: int getInt(参数) ; String getString(参数)

参数:    int:列的编号,从1开始              String:列的名称
 

  • PreparedStatement

一个接口,继承自statement。

作用:

        1.预编译SQL语句并执行:预防SQL注入问题(SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法)

//获取PreparedStatement 对象
//SQL语句中的参数值,使用?占位符替代
String sql = "select * from user where username = ? and password = ?";
//通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.prepareStatement(sql);
//设置参数值
PreparedStatement对象:setXxx(参数1,参数2)//给﹖赋值>Xxx:数据类型;如setInt (参数1,参数2)
//参数:
//参数1:?的位置编号,从1开始      参数2:?的值
③执行SQL
executeUpdate(); // executeQuery();:不需要再传递sql

PreparedStatement预编译功能是关闭的,在url后的参数加上: useServerPrepStmts=true
剩下的比较乱直接放截图

 数据库连接池

简介

  • 数据库连接池是个容器,负责分配、管理数据库连接(Connection)
  • 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;
  • 释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏

        好处:资源重用;提升系统响应速度;僻免数据库连接溃漏

实现

        标准接口:DataSource

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

        常见的数据库连接池:DBCP、C3P0、Druid

        每一个数据库连接池都会提供一个继承于DataSource的getConnection()方法

连接步骤

        1.导入jar包druid-1.1.12.jar

        下载地址:Central Repository: com/alibaba/druid/1.2.9

        我下载的最新的

        2.   定义配置文件

        3.加载配置文件

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

        5.获取连接

        //3.加载配置文件
        Properties prop=new Properties();
        prop.load(new FileInputStream("druid.properties"));
        //4.获取连接池对象
        DataSource ds= DruidDataSourceFactory.createDataSource(prop);
        //5.获取数据库连接
        Connection conn=ds.getConnection();

猜你喜欢

转载自blog.csdn.net/m0_48385518/article/details/124420055