(重点)MySQL(入门篇22)JDBC下载和驱动教程 ,第一个JDBC程序,驱动步骤的解析。

一、JDBC驱动教程

1. 下载JDBC jar 包

在这里插入图片描述
1.下载8,0的jar包可以支持之前的 5.6, 5.7, 8.0 mydql版本,请对应你自己的版本

2.下载链接如下
https://dev.mysql.com/downloads/connector/j/

3.选这个
在这里插入图片描述
4.下载zip

在这里插入图片描述

2. 配置教程

1,解压并复制 jar包
在这里插入图片描述
2.idea软件你的项目和src同级的目录新建 lib目录
在这里插入图片描述
3.将jar包复制粘贴到lib目录,(注意这里是jar包不是整个zip文件)

在这里插入图片描述
4.右键添加到Library
在这里插入图片描述
ok,
在这里插入图片描述
**没有报错提示,恭喜你配置成功! **

二、第一个JDBC程序

1.建表:

(这个只是例子,你也可以用你自己的表)
1.数据库

CREATE DATABASE `bmft_blog` DEFAULT CHARACTER SET utf8 ;

2.表

USE `bmft_blog`
CREATE TABLE `user` (
  `id` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT COMMENT 'user,id主键',
  `user_name` varchar(30) NOT NULL COMMENT 'user_name 用户名,唯一',
  `password` varchar(30) NOT NULL COMMENT 'password 密码',
  `introduction` varchar(100) DEFAULT '什么介绍也没有哦' COMMENT '简介',
  `phone_number` varchar(11) DEFAULT NULL COMMENT '绑定手机号',
  `mailbox` varchar(30) DEFAULT NULL COMMENT '绑定邮箱',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

3.数据:


insert  into `user`(`id`,`user_name`,`password`,`introduction`,`phone_number`,`mailbox`) values (0000000001,'张三','111111','法外狂徒','0315313',''),(0000000002,'电瓶','111111','打工是不可能打工的',NULL,NULL),(0000000003,'王二','111111','隔壁来了新的邻居',NULL,NULL);

4.效果:
在这里插入图片描述

2. 步骤分析
 * 我的第一个JDBC程序.
 * 1.加载JDBC驱动
 * 2.填(新建)连接的信息,URL,账号,密码
 * 3.连接数据库,获取数据库Connection对象,
 *      (1)DriverManager.getConnection(url,user,password);
 * 4.通过Connection数据库对象,创建createStatement(),statement执行对象.
 * 5.使用执行对象执行SQL语句,获得ResultSet,Set数据集合
 * 6.使用数据集合取出getObject(columnLabel 列名)想要的数据并打印
 * 7.关闭资源,先开后关。result -- statement -- connection.
3. 实现代码:(具体看注释)
import java.sql.*;

/**
 * 我的第一个JDBC程序.
 * 1.加载JDBC驱动
 * 2.填(新建)连接的信息,URL,账号,密码
 * 3.连接数据库,获取数据库Connection对象,
 *      (1)DriverManager.getConnection(url,user,password);
 * 4.通过Connection数据库对象,创建createStatement(),statement执行对象.
 * 5.使用执行对象执行SQL语句,获得ResultSet,Set数据集合
 * 6.使用数据集合取出getObject(columnLabel 列名)想要的数据并打印
 * 7.关闭资源,先开后关。result -- statement -- connection.
 *
 */
public class Demo {
    public static void main(String[] args) {

        //声明定义分离
        Connection connection = null;
        Statement statement = null;
        ResultSet resultset = null;
        try {
            //1.固定写法,加载驱动
            Class.forName("MYSQL.myFirstJdbcDemo.Demo");
            //2.填(新建)连接的信息,URL,账号,密码
            //(1)ulr
            String url = "jdbc:mysql://localhost:3306/" +//(1.1)连接地址,
                    "bmft_blog" +                      //(1.2)连接的数据库
                    "?useUnicode=true&" +                //(1.3)附加条件:支持中编码
                    "characterEncoding=utf8&"+          // (1.4)附加信息:设置utf-8 字符集
                    "useSSL=true&"+                       //(1.5)附加信息3:SSL安全连接
                    "serverTimezone=UTC";                 //解决报错You must configure either the server or JDBC driver
            //(2)账号
            String user = "root";
            //(3)密码
            String password = "123456";
            //3. 连接数据库并获取Connection对象
            connection = DriverManager.getConnection(url, user, password);
            //4.通过Connection对象获得SQL执行对象statement
            statement = connection.createStatement();
            //5.通过执行对象执行SQL语句获得,ResultSet 结果集
            //SQL dialect is not configured.没有配置SQL语言是什么鬼,还警告。
            resultset = statement.executeQuery("select * from `user`");
            //6.使用resultSet结果集获并打印结果.resultSet 是一个链表,
            while (resultset.next()){
                System.out.print("账号="+resultset.getObject("id")+" , ");
                System.out.print("名字="+resultset.getObject("user_name")+" , ");
                System.out.print("密码="+resultset.getObject("password")+" , ");
                System.out.print("介绍="+resultset.getObject("introduction")+" , ");
                System.out.print("手机号"+resultset.getObject("phone_number")+" , ");
                System.out.print("邮箱"+resultset.getObject("mailbox")+" , ");
                System.out.println();
            }



        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }finally {
            //一次关闭资源,先开后关,ResultSet -- statement -- connection
            if (resultset != null){
                try {
                    resultset.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (statement != null){
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

Run:

账号=1 , 名字=张三 , 密码=111111 , 介绍=法外狂徒 , 手机号0315313 , 邮箱 ,
账号=2 , 名字=电瓶 , 密码=111111 , 介绍=打工是不可能打工的 , 手机号null , 邮箱null ,
账号=3 , 名字=王二 , 密码=111111 , 介绍=隔壁来了新的邻居 , 手机号null , 邮箱null ,

Process finished with exit code 0

三、7个驱动步骤的详细解析

1.为什么要用加载类的方式(Class.forName)加载JDBC驱动 ?
Class.forName("MYSQL.myFirstJdbcDemo.Demo");

1.首先我们源码分析,原来的正规的加载驱动的办法.

DriverManager.registerDriver(new MYSQL.myFirstJdbcDemo.Demo());

(1)registerDriver()方法
在这里插入图片描述
这是,DriverManager类下的静态方法,静态方法,会在类加载的时候就,自动执行。
(2)在看方法中的执行的registerDriver(driver, null);方法
在这里插入图片描述
2.所以,如果您使用原方法加载驱动,方法就会执行2次,类加载的时候和,在main方法中调用的时候,
而,使用Class.forName()直接加载驱动,只用加载一次。

2url的组成是什么?

url = “协议://主机地址:端口号/数据库名称?参数1&参数2…&参数n”;

 String url = "jdbc:mysql://localhost:3306/" +//(1.1)连接地址,
                    "bmft_blog" +                      //(1.2)连接的数据库
                    "?useUnicode=true&" +                //(1.3)附加条件:支持中编码
                    "characterEncoding=utf8&"+          // (1.4)附加信息:设置utf-8 字符集
                    "useSSL=true&"+                       //(1.5)附加信息3:SSL安全连接
                    "serverTimezone=UTC";                 //解决报错You must configure either the server or JDBC driver

了解更多:Oracle数据库的URL格式,Oracle没有数据库,只有 表,一个表就是一个数据库,默认端口1521
jdbc:oracle:thin:@localhost:1521:sid

3. Connection 对象的功能?

总结就是

  • 1.数据库层级的一些操作,比如(已经连接)断开数据库
  • 2.设置数据库事务的提交和回滚比如:
connection.setautoCommit(false);
connection.rollback();
connection.commit();
  • 3.解决异常读取的问题
  • 4.构造一些奇怪的接口(这个有用?)
  • 5.创建statement执行SQL的对象,用来执行增删改查SQL

在这里插入图片描述
2.数据库层面解决读取异常的一些字段
在这里插入图片描述
3.
在这里插入图片描述

4.statement SQL执行对象的功能?

顾名思义就是用来执行SQL语句的

1.概述
在这里插入图片描述
2.statement常用方法

方法结果
resultSet executeQuery()执行查询,返回resultSet结果集
int executeUpdate()执行增删改,返回一个受影响的行数 1 row is …
boolean exucute()如果第一个结果是ResultSet对象,则返回true;如果第一个结果是执行语句后更新的行数或者没有结果,则返回false。
5. ResultSet对象的功能?

resultSet对象就是一个结果集对象。

1.综述

在这里插入图片描述
2.resultSet常用方法
具体和更多查看,jdk文档。这个只是方便记忆和列举些常用的。
(1)滚动结果集的方法

方法描述
previous()向前滚动
next()向后滚动
int getRow()获取行号
absolute()滚动到指定行号
relative()相对移动多少行,
first()移动到第一行
last()移动…
beforeFirst()移动到 -1 行
afterLast()n + 1 行
moveToInsertRow()移动到插入行

moveToCurrentRow()移回到调用行

(2)测试光标的位置

方法描述
isFirst()是否第一行
isLast()
isBeforeFirst()

isAfterLast()

(3) 更新结果集,和底层数据库的数据(新增**,只有单表可用)**
insertRow()|插入行,到ResulteSet 和 数据库
deleteRow()|删除行,到…
updateRow|改行数据…具体

(具体的字段使用查看,文档或者源码!这里只做介绍!)

6. ResultSet 的 getObject方法

知道具体的字段的类型就用具体的字段的类型,不知道就可以使用Object接受。

7.关闭资源:先开后关即可,特别是connection资源特别浪费内存.
  • 13
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JarvanStack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值