概要

JDBC(Java DataBase Connectivity),即Java数据库连接。简而言之,就是通过Java语言来操作数据库

我们可以把JDBC理解成是官方定义的一套操作所有关系型数据库的规则,规则即接口。

也就是说,官方定义了一套操作所有关系型数据库的接口,然后让各个数据厂商(Mysql、Oracle等)用实现类去实现这套接口,再把这些实现类打包(数据驱动jar包),并提供数据驱动jar包给我们使用。

我们可以使用这套JDBC接口进行编程,但是真正执行的代码是驱动jar包中的实现类。

为什么?因为JDBC是通过接口来调用方法的,当你导入了驱动jar包(实现类)后,那调用的方法肯定是实现类里面的方法。

整体架构流程

一、Mysql驱动包下载

想要通过JDBC连接并操作Mysql数据库,我们需要下载一个Mysql数据库驱动jar包。

两种下载方式(点击链接可直接前往下载)

方式一:MySQL :: Download MySQL Connector/J (Archived Versions)

方式二:MySQL :: Download MySQL Connector/J (Archived Versions)

下载后的jar包是这样的(我的版本是5.1.7):

windows系统:

mysql-connector-java-5.1.7-bin.jar

二、JDBC实现步骤

前提: 创建一个Java项目,在项目中新建一个lib目录(为了方便管理jar包,需要把jar包放在此目录下),在src目录下建一个包,包下再建一个类。

最终的目录结构是这样的:

 注:把下载的jar包拷贝到项目的lib下,别忘了点击lib→右键→Add as Library(这才是真正导入jar包)。

具体步骤:

1、导入驱动jar包 2、注册驱动 3、获取数据库的连接对象 4、定义sql语句 5、获取执行sql语句的对象 6、执行sql并接收返回结果 7、处理结果 8、释放资源

实例:

//向部门表中插入一条数据
private static void f1 () throws Exception {
    //1.注册驱动-反射去加载jar包中的com.jdbc.Driver这个类中的DriverManager.registerDriver(new Driver());
    Class.forName("com.mysql.jdbc.Driver");
    //2.获取连接对象
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/salary?characterEncoding=utf-8", "root", "root");
    System.out.println(conn);
    //3.定义sql
    String sql="insert into t_dept values (null,'乌克兰分部','基层','程总')";
    //4.需要创建statement
    Statement statement = conn.createStatement();
    //5.statement执行sql,返回 插入了几行
    int i = statement.executeUpdate(sql);
    System.out.println("向数据库t_dept表中插入了"+i+"行数据");
    //6.关闭资源
    statement.close();
    conn.close();
}
运行结果:

代码分析:

注册驱动是为了让程序知道,我们用的是哪个版本、哪个驱动包。

获取数据库的连接对象Connection,我们可以把这个对象理解成是Java代码与数据库之间的桥梁,将两者连接起来。

我们定义的sql语句,将来会通过一些操作发送给数据库执行。从而达到Java代码操作数据库的目的。

由于Connection是连接对象,无法直接执行。所以我们要通过conn.createStatement()来获取执行sql语句的对象Statement

通过Statement对象执行sql后,会返回一个int类型的数值,这个数值指的就是影响数据库表的行数。

最后,要对返回的结果进行处理,并释放资源(为了避免内存泄漏)

更新前的数据库(salary),t_dept表中的数据:

 

向部门表中修改一条数据SQL语句:
update t_dept set leader='李总' where did=19
更新后的数据库(salary),t_dept表中的数据:

 

向部门表中删除一条数据SQL语句:
delete from t_dept where did=19
删除后的数据库(salary),t_dept表中的数据:

 查询表中的数据:

在这之前我们先了解statement的两种常用方法:

1.executeUpdate 用于 新增 修改 删除

2.executeQuery 用于 查询

实例:
//向部门表中查询多条数据
private static void f4() throws Exception {
    Class.forName("com.mysql.jdbc.Driver");
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/salary?characterEncoding=utf-8", "root", "root");
    String sql="select * from t_dept";
    Statement statement = conn.createStatement();
    //statement执行sql,返回结果集
    ResultSet rs = statement.executeQuery(sql);
    //解析rs(循环打印)
    while (rs.next()){
        int did = rs.getInt("did");
        String dname = rs.getString("dname");
        String dlocation = rs.getString("dlocation");
        String leader = rs.getString("leader");
        System.out.println(did+"--"+dname+"--"+dlocation+"--"+leader);
    }//读取结果集的光标向下移动,光标默认在哪一行,列名所在的那一行
    statement.close();
    conn.close();
}
运行结果:

 

技术细节

下载mysql的可视化SQLyog:

下载地址:SQLyog Ultimate - Free Trial Request Form | Webyog

有需求的可以私信我!!!

下面的是客户端破解序列号:

 创建表的sql语句:

CREATE TABLE `t_dept` (
  `did` int NOT NULL AUTO_INCREMENT,
  `dname` varchar(30) DEFAULT NULL,
  `dlocation` varchar(30) DEFAULT NULL,
  `leader` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`did`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb3;

insert  into `t_dept`(`did`,`dname`,`dlocation`,`leader`) values (1,'北京分部','中关村','陈总'),(2,'上海分部','上海世贸大厦','李总'),(3,'广州分部','广州双子塔','徐总'),(4,'深圳分部','深圳信兴广场','蒋总'),(5,'武汉分部','武汉绿地中心','王总'),(6,'杭州分部','浙江环球中兴','江总'),(7,'美国分部','五角大楼','梁总'),(8,'俄罗斯分部','莫斯科红场','周总'),(9,'法国分部','塞纳河畔','吴总'),(10,'德国分部','德国帝国国会大厦','曹总'),(11,'印度分部','曼谷','陈总'),(12,'越南分部','首都','陈总'),(13,'土耳其分部','首都','陈总'),(14,'希腊分部','首都','陈总'),(15,'联合国总部','首都','陈总'),(16,'欧盟分部','首都','陈总'),(17,'阿拉伯分部','首都','陈总');

CREATE TABLE `t_emps` (
  `id` varchar(32) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `sex` varchar(3) DEFAULT NULL,
  `birth` date DEFAULT NULL,
  `salary` double DEFAULT NULL,
  `deptId` int DEFAULT NULL,
  PRIMARY KEY (`id`)

insert  into `t_emps`(`id`,`name`,`sex`,`birth`,`salary`,`deptId`) values ('a0001','曹操','男','1021-06-01',8000,1),('a0002','曹植','男','1021-06-01',7500,1),('a0003','曹丕','男','1021-06-01',7600,1),('a0004','曹冲','男','1021-06-01',7700,1),('a0005','曹仁','男','1021-06-01',7200,1),('b0001','貂蝉','女','1021-07-01',6000,2),('b0002','大乔','女','1021-07-01',6100,2),('b0003','小乔','女','1021-07-01',6200,2),('b0004','孙小妹','女','1021-07-01',6300,2),('b0005','曹妃','女','1021-07-01',6400,2),('c0001','刘备','男','1021-08-01',9000,3),('c0002','关羽','男','1021-08-01',8800,3),('c0003','张飞','男','1021-08-01',8600,3),('c0004','赵云','男','1021-08-01',8400,3),('c0005','马超','男','1021-08-01',8500,3),('d0001','孙权','男','1021-09-01',9200,4),('d0002','吕蒙','男','1021-09-01',8000,4),('d0003','陆逊','男','1021-09-01',7800,4),('d0004','鲁肃','男','1021-09-01',8300,4),('d0005','周瑜','男','1021-09-01',8600,4),('e0001','董卓','男','1021-10-01',10000,5),('e0002','吕布','男','1021-10-01',9900,5),('e0003','丁原','男','1021-10-01',9800,5),('e0004','袁绍','男','1021-10-01',10200,5),('e0005','袁术','男','1021-10-01',10100,5);
 

具体实现代码:
package com.hp.study;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class Jdbc01 {
    /*
    statement 有两个常用的方法
    1. executeUpdate 用于 新增 修改 删除
    2. executeQuery 用于 查询
    */
    public static void main(String[] args) throws Exception {
        f4();
    }
        //向部门表中查询多条数据
        private static void f4() throws Exception {
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/salary?characterEncoding=utf-8", "root", "root");
            String sql="select * from t_dept where did=13";
            Statement statement = conn.createStatement();
            //statement执行sql,返回结果集
            ResultSet rs = statement.executeQuery(sql);
            //解析rs(循环打印)
            while (rs.next()){
                int did = rs.getInt("did");
                String dname = rs.getString("dname");
                String dlocation = rs.getString("dlocation");
                String leader = rs.getString("leader");
                System.out.println(did+"--"+dname+"--"+dlocation+"--"+leader);
            }//读取结果集的光标向下移动,光标默认在哪一行,列名所在的那一行
            statement.close();
            conn.close();
        }
        //向部门表中修改一条数据
        private static void f3() throws Exception {
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/salary?characterEncoding=utf-8", "root", "root");
            String sql="update t_dept set leader='李总' where did=19";
            Statement statement = conn.createStatement();
            int i = statement.executeUpdate(sql);
            System.out.println("向数据库t_dept表中修改了"+i+"行数据");
            statement.close();
            conn.close();
        }
        //向部门表中删除一条数据
        private static void f2() throws Exception{
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/salary?characterEncoding=utf-8", "root", "root");
            String sql="delete from t_dept where did=19";
            Statement statement = conn.createStatement();
            int i = statement.executeUpdate(sql);
            System.out.println("向数据库t_dept表中删除了"+i+"行数据");
            statement.close();
            conn.close();
        }
        //向部门表中插入一条数据
        private static void f1 () throws Exception {
            //1.注册驱动-反射去加载jar包中的com.jdbc.Driver这个类中的DriverManager.registerDriver(new Driver());
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接对象
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/salary?characterEncoding=utf-8", "root", "root");
            System.out.println(conn);
            //3.定义sql
            String sql="insert into t_dept values (null,'乌克兰分部','基层','程总')";
            //4.需要创建statement
            Statement statement = conn.createStatement();
            //5.statement执行sql,返回 插入了几行
            int i = statement.executeUpdate(sql);
            System.out.println("向数据库t_dept表中插入了"+i+"行数据");
            //6.关闭资源
            statement.close();
            conn.close();
        }
    }

小结

今天讲述了如何在jdbc连接mysql数据库详解,可以对数据进行基本操作,但是由于代码比较多,我们要实现封装代码的功能,让我们的代码看上去更加清晰明了,高大上,并且同时实现查询一条数据和多条数据的功能,还需要更多的努力。以上是我分享给大家的关于JDBC连接并操作Mysql数据库以及JDBC的增删改查一些总结。

明天会具体探究JDBC连接后mysql的增删改查数据的操作,会牵扯到反射,多态,封装,SSM框架等知识点的学习,有兴趣的可以等待一下,明天准时发布!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐