当前位置:   article > 正文

JAVA连接Mysql——JDBC详细教程_mysql-connector-java

mysql-connector-java

前言

学习本文前需要你了解的技术:Java语言、Mysql(可以阅读mysql基础教程)、会使用IDEA;本文中IEDEA经过汉化处理。
本文使用环境:window11、JDK19、mysql-8.0.31、Intellij IDEA2022.2.3

一、JDBC

JDBC的全称是Java数据库连接(Java Database connect),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作。详细介绍请自行网络搜索,这里只做简单介绍,话不多说,上代码。

二、准备测试数据库和表

1、登录数据库创建测试用数据库test_user

CREATE DATABASE test_user;
  • 1

2、创建数据表user并添加字段idnamepasswordphone_num;

CREATE TABLE user(
id INT,
name VARCHAR(12),
password VARCHAR(20),
phone_num INT);
  • 1
  • 2
  • 3
  • 4
  • 5

三、下载MySQL驱动jar包

MySQL驱动jar包可以从官方网站下载,也可以从Maven Repository(maven 存储库)下载。

1、从MySQL官网下载

1.1MySQL官网下载地址

在这里插入图片描述
1.2、选择tar包或zip包下载并解压缩。
在这里插入图片描述
1.3、解压缩获取MySQL驱动jar包。
打开解压后的mysql_connector-j-8.0.31
在这里插入图片描述
在这里插入图片描述

2、从Maven存储库下载

2.1Maven存储库下载地址

Maven存储库
在这里插入图片描述
从Maven存储库下载可以直接得到驱动jar包,无需再进行解压。

四、将MySQL驱动jar包导入项目

在IDEA项目中新建libs目录用于存放mysql-connector-j-8.0.31.jar包。
1、新建libs目录在这里插入图片描述在这里插入图片描述
2、将mysql-connector-j-8.0.31.jar包复制粘贴到libs目录内。
在这里插入图片描述
在这里插入图片描述
3、将libs目录添加为项目库。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、使用Java连接数据库并执行sql语句

1、在项目中新建类JDBC_01(类名自行命名);
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、JDBC_01类中代码如下

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
//以上为需要导入的包
public class JDBC_01 {
    //定义注册驱动常量(8.0版本以上为以下驱动常量),8.0版本以下常量为com.mysql.jdbc.Driver
    //5.0版本以后可以省略驱动注册
    //static final String DB_DRIVER = "com.mysql.cj.jdbc.Driver";
    //定义连接数据库URL常量,其中localhost为IP地址(可以写其它服务器的IP),3306为端口号(对应服务器mysql的端口号),test_user为所连数据库库名。
    static final String DB_URL = "jdbc:mysql://localhost:3306/test_user";
    //连接本地时可以将本地IP和端口号省略
    //static final String DB_URL = "jdbc:mysql:///test_user";
    //定义数据库用户名
    static String user = "root";
    //定义对应的登录密码(此处我的数据库密码为空)。
    static String password = "";
    public static void main(String[] args) {
    	//创建数据库连接对象并赋予null值
        Connection connection = null;
        //创建执行sql语句的对象并赋予null值
        Statement statement = null;
        //定义一条向数据表user插入数据的sql语句
        String sql_insert = "INSERT INTO user VALUES(1,'admin_01','admin',1314)";
        try {
        	//注册驱动(5.0以上版本可以省略),注册驱动需要抛出ClassNotFoundException异常。
        	//Class.forName(DB_DRIVER);
        	//连接数据库,并获取连接对象,需抛出SQLException异常
            connection = DriverManager.getConnection(DB_URL,user,password);
            //获取执行sql语句的对象,需抛出SQLException异常
            statement = connection.createStatement();
            //执行插入sql语句并获取结果。执行同的sql语句,所使用方法不一样,获取结果的类型也不一样;详细请往下文阅读。
            int result = statement.executeUpdate(sql_insert);
            //控制台输出结果,输出为1,表示连接并执行成功。
            System.out.println(result);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
        	//释放执行sql语句对象资源,判断是否为null,如果为null,则不需要释放资源。
            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            //释放数据库连接对象资源,判断是否为null,如果为null,则不需要释放资源。
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

编写完并运行,控制台输出结果为1表示连接数据库并执行插入sql语句成功。也可一通过登录mysql查询数据库test_user中数据表user中的数据进行验证(此处省略,可参考mysql基础教程)。
在这里插入图片描述

六、报错检查并解决

1、java.sql.SQLSyntaxErrorException异常:

  • 请检查数据库URL常量是否定义正确,末尾数据库名是否再Mysql数据库中存在。
  • 检查定义的sql语句是否正确,数据表再数据库中是否存在。
  • 检查数据库用户名和密码是否正确。

2、CommunicationsException异常

  • 检查数据库URL常量中IP地址和端口号是否正确。

3、java.lang.ClassNotFoundException异常

  • 检查驱动版本是否与系统安装Mysql版本一致。
  • 如果定义驱动常量,检查驱动常量定义是否正确。注意8.0以上版本和8.0以下版本驱动常量不一样;查看驱动常量的方法如下:
    在这里插入图片描述

4、其他异常:

  • 检查定义的常量,用户名、密码是否正确。
  • 是否将驱动jar包导入到本地库。
  • 检查sql语句是否正确。
  • 检查获取连接和执行sql语句调用的方法是否正确等。

七、JDBC组件介绍。

JDBC 的 API 提供了以下接口和类:

组件名称简介常用方法
名称简介参数返回值类型
DriverManager 这个类管理一系列数据库驱动程序。匹配连接使用通信子协议从 JAVA 应用程序中请求合适的数据库驱动程序。识别 JDBC 下某个子协议的第一驱动程序将被用于建立数据库连接。getConnection(String url, String user, String password)尝试建立与给定数据库URL的连接。url- 表单的数据库网址。
user- 代表其建立连接的数据库用户。
password- 用户密码。
Connection
Connection与特定数据库的连接会话。执行SQL语句,并在连接的上下文中返回结果。createStatement()创建一个Statement对象,用于将SQL语句发送到数据库。——Statement
setAutoCommit​(boolean autoCommit)将此连接的自动提交模式设置为给定状态。 如果连接处于自动提交模式,则其所有SQL语句将作为单个事务执行并提交。 否则,其SQL语句被分组为通过调用方法commit或方法rollback终止的事务。 默认情况下,新连接处于自动提交模式。 autoCommit - true启用自动提交模式; false禁用它——
getAutoCommit​()检索此 Connection对象的当前自动提交模式。 ——Boolean
commit()使上次提交/回滚之后所做的所有更改都将永久性,并释放此Connection对象当前持有的任何数据库锁。————
rollback()撤消在当前事务中所做的所有更改,并释放此 Connection对象当前持有的任何数据库锁。————
rollback​(Savepoint savepoint)撤消在给定的Savepoint对象设置后进行的所有更改。savepoint - Savepoint对象回滚到的标记点——
close​()立即释放此 Connection对象的数据库和JDBC资源,而不是等待它们自动释放。————
Statement用于执行静态SQL语句并返回其生成的结果的对象。execute(String sql)执行给定的SQL语句,这可能会返回多个结果。sql - 任何SQL语句。Boolean
executeUpdate(String sql)执行给定的SQL语句,这可能是INSERT,UPDATE,或 DELETE声明,也可以是不返回任何内容的SQL语句,如SQL的DDL语句。 sql -一个SQL数据操纵语言(DML)语句,比如INSERT,UPDATE或DELETE;或不返回任何内容的SQL语句,例如DDL语句。Int
executeQuery(String sql)执行给定的SQL语句,该语句返回单个ResultSet对象。sql- 要发送到数据库的 SQL 语句,通常是静态SQL的SELECT语句SELECT。ResultSet
close()立即释放此Statement对象的数据库和 JDBC 资源,而不是等待它自动关闭时发生这种情况。————
PreparedStatement表示预编译的SQL语句的对象。SQL语句已预编译并存储在一个PreparedStatement对象中。 然后可以使用该对象多次有效地执行此语句。execute(String sql)执行给定的SQL语句,这可能会返回多个结果。sql - 任何SQL语句。Boolean
executeUpdate​()执行在该SQL语句PreparedStatement对象,它必须是一个SQL数据操纵语言(DML)语句,比如INSERT , UPDATE或DELETE ; 或不返回任何内容的SQL语句,例如DDL语句。sql - SQL语句,它必须是一个SQL数据操纵语言(DML)语句,比如INSERT ,UPDATE或DELETE;或不返回任何内容的SQL语句,例如DDL语句。Boolean
executeQuery(String sql)执行给定的SQL语句,该语句返回单个ResultSet对象。sql- 要发送到数据库的 SQL 语句,通常是静态SQL的SELECT语句SELECT。ResultSet
close()立即释放此Statement对象的数据库和 JDBC 资源,而不是等待它自动关闭时发生这种情况。————
ResultSet在你使用语句对象执行 SQL 查询后,这些对象保存从数据获得的数据。它作为一个迭代器,让您可以通过它的数据来移动。next()游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true——Boolean
get[Type](int columnIndex)在 Java 编程语言中检索此[Type]对象的当前行中指定列的值。[Type]可以是int、String、Array等类型。columnIndex- 第一列是 1,第二列是 2,...[Type]
get[Type](String columnLabel)在 Java 编程语言中检索此[Type]对象的当前行中指定列的值。[Type]可以是int、String、Array等类型。columnLabel- 使用 SQL AS 子句指定的列的标签。如果未指定 SQL AS 子句,则标签是列的名称[Type]
Driver这个接口处理与数据库服务器的通信。你将很少直接与驱动程序互动。相反,你使用 DriverManager 中的对象,它管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息。使用创建于这个接口的对象将 SQL 语句提交到数据库。除了执行存储过程以外,一些派生的接口也接受参数。connect(String url,Properties info)尝试与给定 URL 建立数据库连接。url- 要连接到的数据库的 URL
info- 任意字符串标签/值对的列表 连接参数。通常至少是一个“用户”和 应包含“password”属性。
Connect
SQLException这个类处理发生在数据库应用程序的任何错误。————————
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/512939
推荐阅读
相关标签
  

闽ICP备14008679号