一、JDBC驱动教程

1. 下载JDBC jar 包

dbever 连接提示下载mysql驱动文件 mysqljdbc驱动包下载配置教程_数据库


1.下载8,0的jar包可以支持之前的 5.6, 5.7, 8.0 mydql版本,请对应你自己的版本

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

3.选这个

dbever 连接提示下载mysql驱动文件 mysqljdbc驱动包下载配置教程_mysql_02


4.下载zip

dbever 连接提示下载mysql驱动文件 mysqljdbc驱动包下载配置教程_SQL_03

2. 配置教程

1,解压并复制 jar包

dbever 连接提示下载mysql驱动文件 mysqljdbc驱动包下载配置教程_数据库_04


2.idea软件你的项目和src同级的目录新建 lib目录

dbever 连接提示下载mysql驱动文件 mysqljdbc驱动包下载配置教程_jdbc_05


3.将jar包复制粘贴到lib目录,(注意这里是jar包不是整个zip文件)

dbever 连接提示下载mysql驱动文件 mysqljdbc驱动包下载配置教程_数据库_06


4.右键添加到Library

dbever 连接提示下载mysql驱动文件 mysqljdbc驱动包下载配置教程_java_07


ok,

dbever 连接提示下载mysql驱动文件 mysqljdbc驱动包下载配置教程_数据库_08


**没有报错提示,恭喜你配置成功! **

二、第一个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.效果:

dbever 连接提示下载mysql驱动文件 mysqljdbc驱动包下载配置教程_SQL_09

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()方法

dbever 连接提示下载mysql驱动文件 mysqljdbc驱动包下载配置教程_java_10


这是,DriverManager类下的静态方法,静态方法,会在类加载的时候就,自动执行。

(2)在看方法中的执行的registerDriver(driver, null);方法

dbever 连接提示下载mysql驱动文件 mysqljdbc驱动包下载配置教程_数据库_11


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

dbever 连接提示下载mysql驱动文件 mysqljdbc驱动包下载配置教程_java_12


2.数据库层面解决读取异常的一些字段

dbever 连接提示下载mysql驱动文件 mysqljdbc驱动包下载配置教程_java_13


3.

dbever 连接提示下载mysql驱动文件 mysqljdbc驱动包下载配置教程_java_14

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

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

1.概述

dbever 连接提示下载mysql驱动文件 mysqljdbc驱动包下载配置教程_java_15


2.statement常用方法

方法

结果

resultSet executeQuery()

执行查询,返回resultSet结果集

int executeUpdate()

执行增删改,返回一个受影响的行数 1 row is …

boolean exucute()

如果第一个结果是ResultSet对象,则返回true;如果第一个结果是执行语句后更新的行数或者没有结果,则返回false。

5. ResultSet对象的功能?

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

1.综述

dbever 连接提示下载mysql驱动文件 mysqljdbc驱动包下载配置教程_mysql_16


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资源特别浪费内存.