JDBC学习笔记

发布于:2022-10-29 ⋅ 阅读:(393) ⋅ 点赞:(0)

目录

JDBC简介

JDBC快速入门

JDBC API 详解

DriverManager

Connection

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

获取执行SQL的对象 

 事务管理

Statement

Statement的作用

执行SQL语句

ResultSet

ResultSet(结果集对象)作用

 执行DQL语句

PreparedStatement

PreparedStatement作用

PreparedStatement 好处:

 开启预编译功能

 SQL注入

获取 PreparedStatement 对象

数据库连接池

数据库连接池简介

数据库连接池实现

Druid数据库连接池

Driud使用步骤


JDBC简介

1.概念:JDBC 就是使用Java语言操作关系型数据库的一套API。

   全称:( Java DataBase Connectivity ) Java 数据库连接 。

JDBC快速入门

步骤:

        1.创建工程,并导入驱动jar包

        2.注册驱动       

Class.forName("com.mysql.jdbc.Driver");

        3.获取连接

Connection conn = DriverManager.getConnection(url, username, password);

        4.定义SQL语句

String sql =  “update…” ;

        5.获取执行SQL对象

Statement stmt = conn.createStatement();

        6.执行SQL

stmt.executeUpdate(sql);  

        7.处理结果

 System.out.println(count);

        8.释放资源

 stmt.close();
 conn.close();

        小细节:因为 stmt 是最后创建的,要先释放,才可以释放 conn

JDBC API 详解

DriverManager

DriverManager(驱动管理类)作用:

1.注册驱动

Class.forName("com.mysql.jdbc.Driver");
  • MySQL 5之后的驱动包,可以省略注册驱动的步骤

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

2.获取数据库连接

Connection conn = DriverManager.getConnection(url, username, password);
  • url : 连接路径

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

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



// 如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称?参数键值对

// 配置 useSSL=false 参数,禁用安全连接方式,解决警告提示
  • user :用户名

  • poassword :密码

Connection

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

1.获取执行SQL的对象

2.事务管理

获取执行SQL的对象 

1.普通执行SQL对象

Statement createStatement()

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

PreparedStatement  prepareStatement(sql)

3.执行存储过程的对象

CallableStatement prepareCall(sql)

 事务管理

1.开启事务

setAutoCommit( ); -- ( )中可以写 true为自动提交事务;false为手动提交事务

2.提交事务

commit();

3.回滚事务

rollback();

Statement

Statement的作用

执行SQL语句

执行SQL语句

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

// 返回值:(1)DML语句返回受到影响的行数
//        (2)DDL语句执行后,有可能返回0

ResultSet xexcuteQuery(sql):执行DQL语句

//返回值: ResultSet结果集对象

ResultSet

ResultSet(结果集对象)作用

封装了SQL查询语句的结果。

 执行DQL语句

ResultSet  executeQuery(sql):执行DQL 语句,返回 ResultSet 对象

 

PreparedStatement

PreparedStatement作用

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

PreparedStatement 好处:

  • 预编译SQL,性能更高

  • 防止SQL注入:将敏感字符进行转义

 开启预编译功能

开启预编译功能

在代码中编写url时需要加上以下参数。而我们之前根本就没有开启预编译功能,只是解决了SQL注入漏洞。

useServerPrepStmts=true

 SQL注入

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

获取 PreparedStatement 对象

// SQL语句中的参数值,使用?占位符替代
String sql = "select * from user where username = ? and password = ?";
// 通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.prepareStatement(sql);

设置参数值  

上面的sql语句中参数使用 ? 进行占位,在使用之前肯定要设置这些 ? 的值

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

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

  • 参数:

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

    • 参数2: ?的值

执行SQL语句

 

executeUpdate();  执行DDL语句和DML语句

executeQuery();  执行DQL语句
  • 调用这两个方法时不需要传递SQL语句,因为获取SQL语句执行对象时已经对SQL语句进行预编译了。

 

数据库连接池

数据库连接池简介

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

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

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

  • 好处

    • 资源重用

    • 提升系统响应速度

    • 避免数据库连接遗漏

数据库连接池实现

 标准接口:DataSource

官方(SUN) 提供的数据库连接池标准接口,由第三方组织实现此接口。该接口提供了获取连接的功能:

Connection getConnection()

常见的数据库连接池 :

  • DBCP

  • C3P0

  • Druid

Druid数据库连接池

Driud使用步骤

1.先将druid的jar包导入

2.定义配置文件

编写配置文件如下:

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///db1?useSSL=false&useServerPrepStmts=true
username=root
password=1234
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000

3.加载配置文件

4.获取数据库连接对象

5.获取连接

使用druid的代码如下:

public class DruidDemo {

    public static void main(String[] args) throws Exception {
        //1.导入jar包
        //2.定义配置文件
        //3. 加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("jdbc-demo/src/druid.properties"));
        //4. 获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);

        //5. 获取数据库连接 Connection
        Connection connection = dataSource.getConnection();
        System.out.println(connection); //获取到了连接后就可以继续做其他操作了

        //System.out.println(System.getProperty("user.dir"));
    }
}

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到