MySQL的JDBC编程详解

这篇具有很好参考价值的文章主要介绍了MySQL的JDBC编程详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.JDBC编程概念

在实际项目中,我们对于数据库的操作大部分是通过代码来完成的,各种数据库在开发的时候,都会提供一组编程接口API。所以不同公司使用不同的数据库软件,那么程序员学习成本是非常大的,因为要学习不同数据库对应的编程风格和相关语法。所以在java层面就进行了统一,这就是JDBC。各大数据库厂商在自身原生的API接口的基础上进行封装,形成数据库驱动包,在由各个数据库的数据库驱动包集合形成JDBC。
JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是
Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.*包中的一些类和接口组成,它为Java
开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。

1.1 JDBC的工作原理

JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包
含一些通用的接口类。
JDBC访问数据库层次结构:

MySQL的JDBC编程详解

1.2 JDBC优势

  1. Java语言访问数据库操作完全面向抽象接口编程
  2. 开发数据库应用不用限定在特定数据库厂商的API
  3. 程序的可移植性大大增强

2.JDBC使用

2.1JDBC驱动包的下载

首先是安装驱动包,驱动包可以从MySQL官网获取,但是oracle官网贼难用;或者可以去github下载,再者可以去maven中央仓库下载(这个maven就类似计算机系列软件程序的应用商店)
这里我们使用maven去下载

  1. 打开网站https://mvnrepository.com/
  2. 搜索mysql的相关软件
    MySQL的JDBC编程详解
  3. 点击第一个或者第二个(mysql-connector-java)都可以
    MySQL的JDBC编程详解
  4. 然后选择对应的版本,注意这里的大版本号一定要和数据库服务器版本匹配,比如我的mysql的数据库服务器用的是5版本,所以我的驱动包也必须用5版本
    MySQL的JDBC编程详解
  5. 进入下载页面
    MySQL的JDBC编程详解
  6. 我们下载的文件后缀是.jar,这个后缀可以理解为是多个.class文件合在一起的压缩包
    MySQL的JDBC编程详解

2.2驱动包的安装、导入

  1. 下载好驱动包(一个.jar文件)后,首先我们我们在idea创建一个新的项目
    MySQL的JDBC编程详解
  2. 在项目下面我们创建一个目录
    MySQL的JDBC编程详解
  3. 然后将我们下载下来的.jar文件复制粘贴到该目录下
    MySQL的JDBC编程详解
    MySQL的JDBC编程详解
  4. 将目录标记为库,标记为库后,idea就可以识别.jar文件了。从而就可以调用里面的类来写代码了。
    MySQL的JDBC编程详解
  5. 导入成功后我们就可以开始正常编程了,我们在src文件下创建类JDBCIsert
    MySQL的JDBC编程详解

2.3 IDEA内JDBC的使用

在新建好类,以及main方法后,我们开始编程。JDBC需要通过已下步骤来完成开发

2.3.1 创建并初始化一个数据源

  1. 创建并初始化MysqlDataSource
    所谓数据源就是数据从哪里来,也就是描述数据库服务器在哪里,我们通过DataSource这个接口来描述。
    但是DataSource本身是接口,是一个抽象类,不能直接new,所以实际上我们是new他的子类MysqlDataSource对象,来实现DataSource这个接口。

MySQL的JDBC编程详解

DataSource dataSource = new MysqlDataSource();//这里实际是向上转型,子类实现父类接口

但是这样还不够,还需要向下转型一次,转回来,因为我们需要使用setUrl、setUser、setPassword方法,这个方法是子类MysqlDataSource独有的,父类并没有,所以进行向下转型。

  1. 设置Url
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/JDBC?characterEncoding=utf8&useSSL=false);

所以上述两行代码实际上也可以写成以下代码

MysqlDataSource mysqlDataSource = new MysqlDataSource();
mysqlDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/JDBC?characterEncoding=utf8&useSSL=false);

URL是唯一资源定位符,是一个计算机网络中的常见术语,用于标记网络资源的位置。
我们这里输入"jdbc:mysql://127.0.0.1:3306/JDBC?characterEncoding=utf8&useSSL=false"
首先jdbc是固定的,mysql是我们使用的数据库,127.0.0.1:3306是IP地址,mysql数据库是一个“客户端服务器”结构,客户端和服务器端通过网络通信,网络上确定主机位置就是通过IP地址来确定,而127.0.0.1表示环回地址,表示本地Ip因为我们测试的mysql的服务器端和客户端在同一台设备上(我们自己的主机)。3306是端口号,用于区别不同的应用程序,数据库服务器的默认端口号是3306。base1是数据库名字,也就是我们用SQL语句写时create database 数据库名里面的数据库名字。characterEncoding=utf8表示字符集使用utf8,useSSL=false中SSL是一个加密协议,这里表示不加密。

  1. 设置用户名和密码
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("120198087zbh");

用户名统一写成默认值root,不要写其他值;密码对应的是我们在装mysql时写入的密码。

2.3.2 建立连接

Connection connection = dataSource.getConnection();

MySQL的JDBC编程详解
但是这里是会报错的,这是一个受查异常,我们直接给他抛出,注意要抛出,还要导入这个异常的包。

然后我们用Conenction接口接收。注意Conection接收时我们一定使用java.sql这里包里面的Conection否则编译不了,千万不要使用mysql包里面的。

MySQL的JDBC编程详解

到这里的代码就可以先执行一下,判断是否有错误。

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.SQLException;

public class JDBCInsert {
    public static void main(String[] args) throws SQLException {
        //JDBC需要通过以下步骤来完成开发
        //1.创建并初始化一个数据源
//        MysqlDataSource mysqlDataSource = new MysqlDataSource();
//        mysqlDataSource.setUrl();
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/base1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("120198087zbh");
        //2.建立连接
        Connection connection = dataSource.getConnection();
    }
}

2.3.3构造sql语句

在dos环境下我们打开我们的mysql,构建数据库,创建表。

Enter password: ************
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.27-log MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database base1 character set utf8mb4;
Query OK, 1 row affected (0.00 sec)
mysql> use base1;
Database changed
mysql> create table student(student_id int primary key auto_increment,student_name varchar(20));
Query OK, 0 rows affected (0.02 sec)

假如我现在要在java里去新增数据,那么在IDEA里面写下如下代码

//3.构造SQL语句
String sql = "insert into student values(1,'张三')";//创建一个sql语句
PreparedStatement statement = connection.prepareStatement(sql);//使用PreparedStatement接口进行提前预编译我们的sql

让客户端进行预编译,服务器做的工作就简单一些,压力会小一些。PreparedStatement中Prepared可以理解为提前准备的,Statement语句

2.3.4执行sql语句

在构造好sql语句后(预编译)我们要将其发送给服务器端,并执行该语句

int ret  = statement.executeUpdate();//executeUpdate的返回值为int
System.out.println("ret = "+ ret);

insert、updata、delete操作都使用executeUpate方法,其返回值为int,表示影响了几行,实际上就是我们在dos环境下(如下图)这个里面的0 rows affected 里面的0就是这个返回值。
而select 操作使用的是executeQuery方法

MySQL的JDBC编程详解
在执行完这一句之后就我们可以去MySQL验证一下,是不是插入了数据

mysql> select * from student;
+------------+--------------+
| student_id | student_name |
+------------+--------------+
|          1 | 张三         |
+------------+--------------+
1 row in set (0.01 sec)

发现确实是插入了的。

2.3.5 释放资源

  1. 数据库的客户端和服务器之间进行通信的时候,是要消耗一定资源(包括cpu,内存,硬盘,带宽等)的。当客户端数量够大的时候,一定不能让客户端随意的占用消耗,也就是不用的时候要感觉释放。
  2. 语句(statement)和链接(connection)的释放是有一定顺序的,谁先创建谁后释放。
statement.close();
connection.close();

2.3.6 细节补充

在本例子中我们插入数据是通过nsert into student values(1,'张三')这样写死的硬编码去完成的,但是实际项目中,这个输入肯定是需要用户在控制台输入才对。
所以代码可以这样去改写


import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class JDBCInsert {
    public static void main(String[] args) throws SQLException {

        Scanner scanner = new Scanner(System.in);
        //JDBC需要通过以下步骤来完成开发
        //1.创建并初始化一个数据源
//        MysqlDataSource mysqlDataSource = new MysqlDataSource();
//        mysqlDataSource.setUrl();
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/base1?characterEncoding=utf8&useSSL=false");//设置url
        ((MysqlDataSource)dataSource).setUser("root");//设置用户名
        ((MysqlDataSource)dataSource).setPassword("120198087zbh");//设置密码
        //2.建立连接
        Connection connection = dataSource.getConnection();//异常抛出
        //3.控制台输入
        System.out.println("请输入学号:");
        int student_id  = scanner.nextInt();
        System.out.println("请输入姓名:");
        String student_name = scanner.next();
        //4.构造SQL语句
        String sql = "insert into student values(" + student_id+ ",'" + student_name + "')";//创建一个sql语句
        PreparedStatement statement = connection.prepareStatement(sql);//使用PreparedStatement接口进行提前预编译我们的sql
        //5.执行SQL语句
        int ret  = statement.executeUpdate();//executeUpdate的返回值为int
        System.out.println("ret = "+ ret);
        //6.释放资源
        statement.close();
        connection.close();
    }
}

但是这个代码还是比较丑陋的。

有更好的写法,可以借助PreparedStaterment的拼装功能来实现。

String sql = "insert into student values(?,?)";//用?(占位符)来先取代两个参数的位置
PreparedStatement statement = connection.prepareStatement(sql);//使用PreparedStatement接口进行提前预编译我们的sql
statement.setInt(1,student_id);//将第一个占位符所表示的整型参数替换为student_id
statement.setString(2,student_name);//将第二个占位符所表示的字符串参数替换为student_name

那么我们的完整的代码可以就如下:

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class JDBCInsert {
    public static void main(String[] args) throws SQLException {

        Scanner scanner = new Scanner(System.in);
        //JDBC需要通过以下步骤来完成开发
        //1.创建并初始化一个数据源
//        MysqlDataSource mysqlDataSource = new MysqlDataSource();
//        mysqlDataSource.setUrl();
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/base1?characterEncoding=utf8&useSSL=false");//设置url
        ((MysqlDataSource)dataSource).setUser("root");//设置用户名
        ((MysqlDataSource)dataSource).setPassword("120198087zbh");//设置密码
        //2.建立连接
        Connection connection = dataSource.getConnection();//异常抛出
        //3.控制台输入
        System.out.println("请输入学号:");
        int student_id  = scanner.nextInt();
        System.out.println("请输入姓名:");
        String student_name = scanner.next();
        //4.构造SQL语句
//        String sql = "insert into student values(" + student_id + ",'" + student_name + "')" ;//创建一个sql语句
        String sql = "insert into student values(?,?)";//用?(占位符)来先取代两个参数的位置
        PreparedStatement statement = connection.prepareStatement(sql);//使用PreparedStatement接口进行提前预编译我们的sql
        statement.setInt(1,student_id);//将第一个占位符所表示的整型参数替换为student_id
        statement.setString(2,student_name);//将第二个占位符所表示的字符串参数替换为student_name
        //5.执行SQL语句
        int ret  = statement.executeUpdate();//executeUpdate的返回值为int
        System.out.println("ret = "+ ret);
        System.out.println(statement);//如果我们发现出错,我们可以将statement打印出来,观察一下是不是我们的SQL语句写错了;
        //6.释放资源
        statement.close();
        connection.close();
    }
}

同时如果在项目开发中出错,我们可以通过打印statement看到我的SQL语句有么有出错。
执行结果
MySQL的JDBC编程详解
MySQL的JDBC编程详解

当前我们的JDBC是使用DataSourse 这样的方式来进行编写。
还有一种写法DriveManager,通过反射的方式加载驱动包中的类,进一步进行后续操作。
但是还是推荐DataSourse,因为反射的代码可读性是非常差的,编译器难以对代码的正确性进行检查。此外,DataSource内置了数据库连接池,可以复用连接,提高连接服务器的效率。
计算机中池的本质是一种预申请机制,利用空间换时间。

2.4 IDEA实现MySQL查询操作

示例

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

public class JDBCSelect {
    public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        //1.创建并初始化数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/base1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("120198087zbh");
        //2.建立连接
        Connection connection = dataSource.getConnection();
        //3.构造SQL
        System.out.println("请输入查询语句");
        String sql = scanner.nextLine();
//        String sql  = "select * from student";
        //4.预执行
        PreparedStatement statement = connection.prepareStatement(sql);
        //5.执行SQL语句
        ResultSet resultSet = statement.executeQuery();//resultSet就是select里面创建的临时表
        //6.遍历结果集合
        while(resultSet.next()){//这个效果和迭代器类似
            //把resultSet想象成一个表格,同时有一个光标指向表格的最上面
            //每一次调用next,光标都会往下走一行
            //当光标指向某一行的时候就可以通过getXXX等方法来获取当前行对应的列里面的数据。
            //当这个表都遍历完了,next就会返回false;
            int id = resultSet.getInt("student_id");
            //getXXX方法必须类型匹配
            //getXXX方法的参数可以是列名,也可以是下标
            String name = resultSet.getString("student_name");
            System.out.println("id = " + id +", name - " + name );
        }
        //7.释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

结果
MySQL的JDBC编程详解文章来源地址https://www.toymoban.com/news/detail-477449.html

到了这里,关于MySQL的JDBC编程详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [MySQL]初始JDBC编程

    专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来!  1.数据库编程必备的条件 2.Java的数据库编程 JDBC 3.JDBC工作原

    2024年02月19日
    浏览(25)
  • 【MySQL】 Java的JDBC编程

    本节目标 数据库驱动 JDBC的概念及作用 掌握JDBC的工作原理 掌握JDBC中几个常用接口和类 掌握基于数据库的应用程序开发流程 编程语言,如Java,C、C++、Python等,博主用的是java; 数据库,如Oracle,MySQL,SQL Server等,博主用的是MySQL; 数据库驱动包:不同的数据库,对应不同的

    2024年02月08日
    浏览(25)
  • 【MySQL】Java的JDBC编程

    编程语言,如Java,C、C++、Python等 数据库,如Oracle,MySQL,SQL Server等 数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提 供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的, 要基于Java操作Oracle数据库则需

    2024年02月20日
    浏览(25)
  • 引入MySQL驱动包进行JDBC编程

    每个数据库都会提供一组API来支持程序员实现自己客户端,自己根据需求来完成一些具体的增删查改的功能。但数据库也有很多种,例如Oracle、MySQL、SQL Server等。显然,这些不同的数据库是出自不同的厂商之手,而对于数据库API的约定,并没有一个业界统一的标准。 Java这种

    2024年02月10日
    浏览(39)
  • Java的JDBC编程—连接Mysql数据库

    目录 一、 Java的数据库编程:JDBC 二、JDBC工作原理 三、 JDBC使用 四、JDBC使用步骤总结  五. JDBC常用接口和类 5.1 JDBC API 5.2 数据库连接Connection 5.3 Statement对象 5.4 ResultSet对象      JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是 Java中的数据

    2024年02月05日
    浏览(55)
  • MySQL数据库之JDBC编程(从认识到操作)

    目录 前言 一.JDBC的认识 1.1JDBC的来源 1.2JDBC的概念 二.JDBC的导包  三.JDBC的四步操作 三.JDBC常用的类和方法  3.1常用类 3.2常见方法 🎁个人主页:tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主 🎥 本文由 tq02 原创,首发于 CSDN🙉 🎄 本章讲解内容: JDBC的详细讲解 🎥学习

    2024年02月15日
    浏览(28)
  • 【计算机编程语言】MySQL8+JDBC+Eclipse

    1.1数据库分类 关系型数据库:行,列 – (SQL ) MySQL,Oracle,Sql Server 通过表和表之间,行和列之间的关系进行数据存储。 学员信息,考勤表 非关系型数据库:{Key,Value} (NoSQL – not only SQL ) Redis,MongoDB 以对象存储,通过对象自身的属性来决定 DBMS – 数据库管理系统 数据库的

    2024年02月16日
    浏览(36)
  • tomcat连接mysql及JDBC详解

    1、Tomcat简介 Tomcat 是 Apache 软件基金会(Apache Software Foundation)的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。由于有了 Sun 的参与和支持,最新的 Servlet 和JSP 规范总是能在 Tomcat 中得到体现,Tomcat 5 支持最新的 Servlet 2.4 和 

    2024年01月18日
    浏览(30)
  • JDBC连接数据库----Mysql七大步骤详解

             1、什么是jdbc?         JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发者能够编

    2023年04月12日
    浏览(72)
  • MySQL中 java 的 JDBC 编程使用方法及驱动包的下载和使用

    实际开发中要绝大多数要 通过代码 来执行 sql 语句,这就需要让其他的编程语言来操作数据库服务器。 API 是什么意思: 例子:某个东西可以带给我某个功能。 例子:我可以和我的朋友一起吃法、一起学习、一起打游戏。 例如 java 的标准库就会给我们提供一些 API ,这个

    2024年02月04日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包