MySQL-数据库驱动和JDBC

本文介绍了Java使用JDBC操作MySQL数据库的基本步骤,包括加载驱动、连接数据库、执行SQL语句以及释放连接。同时,文章讨论了SQL注入问题和如何使用PreparedStatement预防SQL注入。还涵盖了JDBC事务处理的开启、提交和回滚,以及数据库连接池的概念,如DBCP、C3P0和Druid等。
摘要由CSDN通过智能技术生成

JDBC

在学习JDBC之前,我们需要了解一个概念——驱动。

什么是驱动呢?

驱动是驱动程序的缩写,是指直接工作在各种硬件设备上的软件,其“驱动”这个名称也十分形象的指明了它的功能。正是通过驱动程序,各种硬件设备才能正常运行,达到既定的工作效果。例如声卡驱动、显卡驱动等等,所以数据库,也当然会有驱动。

我们的程序也会通过数据库驱动,和数据库“打交道”。

而SUN公司为了简化开发人员的(对数据库的统一)操作,提供了一个(Java操作数据库)规范,俗称JDBC,这些规范的实现由具体的厂商去做,对于开发人员来说,我们只需要掌握JDBC接口的操作即可!

Java中,要想操作数据库,首先需要导入Java默认就有的java.sql包和javax.sql包之外,还需要导入一个数据库驱动包mysql-connector-java-8.0.26,下载地址:https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.26

测试JDBC程序

首先还是通过一些例子来学习JDBC,首先创建一个测试数据库:

-- JDBC
CREATE DATABASE jdbcStudy CHARACTER SET utf8 COLLATE utf8_general_ci
USE jdbcStudy
DROP TABLE `users`
CREATE TABLE `users`(
  `id` INT NOT NULL,
  `name` VARCHAR(40),
  `password` VARCHAR(40),
  `email` VARCHAR(60),
  `brith` DATE
);
INSERT INTO `users`(`id`,`name`,`password`,`email`,`brith`) 
VALUES
(1,'张三','123456','127*****236@qq.com','1999-06-20'),
(2,'李四','123456','128*****351@qq.com','1997-08-30'),
(3,'王五','123456','126*****234@qq.com','1996-07-12');

然后导入我们刚刚下载的数据库驱动:新建一个project后,创建一个lib文件夹,然后驱动文件移动至该文件夹——

在这里插入图片描述

编写测试代码:

// 测试
public class JDBCFirstDemo {
   
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
   
        // 1. 加载驱动(注意,MySQL8.0之前的版本的字符串为"com.mysql.jdbc.Driver")
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 2. 用户信息和url(问号之后的参数分别是:支持中文,设置字符编码为utf8,设置安全链接)
        String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true";
        String name = "root";
        String password = "12345";
        // 3. 连接成功,数据库对象 connection代表数据库
        Connection connection = DriverManager.getConnection(url, name, password);
        // 4. 执行SQL的对象 Statement是执行SQL的对象
        Statement statement = connection.createStatement();
        // 5. 执行SQL的对象去执行SQL,可能存在结果,查看返回结果
        String sql = "SELECT * FROM `users`";
        ResultSet resultSet = statement.executeQuery(sql); // 返回的结果集,结果集中封装了我们全部的查询出来的结果
        while(resultSet.next()) {
   
            System.out.println("id=" + resultSet.getObject("id"));
            System.out.println("name=" + resultSet.getObject("name"));
            System.out.println("password=" + resultSet.getObject("password"));
            System.out.println("email=" + resultSet.getObject("email"));
            System.out.println("birth=" + resultSet.getObject("birth"));
        }
        // 6. 释放连接
        resultSet.close();
        statement.close();
        connection.close();
    }
}

如果上述代码报错,可以试着将useSSL修改为false,或者再url后面添加时区字段serverTimezone=UTC,如果还是报错,建议这边再检查一下代码或者是问万能的百度~

总结一下步骤:

1、加载驱动

2、连接数据库DriverManager

3、获得执行SQL对象Statement

4、获得返回的结果集

5、释放连接

扩展:为什么在第一个步骤中,Class不需要返回对象呢?首先我们观察一下整体的代码,并不需要返回这个Class对象,其次呢,在原本的写法中,是有一个DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());的写法,意思是注册驱动,但是我们查看Driver类的源代码可以发现,它执行了一个静态代码类,而该类里面已经执行了一次注册驱动,所以再写这串代码就显得有些多余了。

关于Connection:

Connection connection = DriverManager.getConnection(url, name, password);
// connection代表数据库,我们可以在这里进行一些数据库级别的操作,例如设置数据库自动提交,以及事务的提交和事务回滚等
connection.setAutoCommit(true);
connection.commit();
connection.rollback();

关于url:

// MySQL -- 端口号默认为3306
String url = "jdbc:mysql://localhost:3306/jdbcstudy?" +
	"useUnicode=true&characterEncoding=utf8&useSSL=true";
//协议://主机地址:端口号/数据库名?参数1&参数2&参数3...
//Oralce -- 端口号默认为1521
// jdbc:oralce:thin:@localhost:1521:sid

关于Statement:

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值