JDBC连接MySQL8.0案例详解

2023-11-16

JDBC本质上是一个介于应用程序和数据库之间的公共接口,通过对这个接口的实现,我们可以建立应用程序和数据库之间的连接,便捷的访问数据库数据。

不同版本的MySQL连接的参数是有一些小差别的,以下内容基于一个JDBC连接案例讲解连接数据库的过程。

数据库版本:MySQL8.0.29

准备工作(导入MySQL驱动)

首先,得确保你的MySQL版本和你的MySQL驱动是对应的,不要出现装的MySQL5.几版本用的最新8.几驱动的情况。

如果不清楚自己当前安装的MySQL版本的话,可以进入命令行输入mysql --version查看:

知道自己数据库版本之后就可以去MySQL官网下载对应驱动了

MySQL驱动下载地址:MySQL :: Download MySQL Connector/J (Archived Versions)

 下载完成后,找到文件,解压之后找到驱动的jar包

 赋值当前路径,接下来打开IDEA-进入设置找到Project Structure

点击Libraries,按下面步骤,将刚解压完的驱动路径粘贴找到

选中之后,点击ok,导入驱动。

到这里准备工作就完成了。

案例演示

新建一个jdbc测试类,编写jdbc连接程序,提示异常直接抛出,注意导对包,

public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //实现Driver接口
        //Driver接口是所有 JDBC 驱动程序需要实现的接口
        Driver driver = new Driver();//需要导包,可替换为new com.mysql.cj.jdbc.Driver();

        //提供用户信息和url
        String url = "jdbc:mysql://localhost:3306/db_demo?useSSL=false&serverTimezone=UTC";
        String username = "root";
        String password = "123456";

        //注册驱动
        DriverManager.registerDriver(driver);

        //创建连接对象
        Connection connection = DriverManager.getConnection(url, username, password);

        //创建Statement对象,用于SQL语句
        Statement statement = connection.createStatement();
        //编写sql
        String sql = "SELECT * FROM t_demo";
        //接收sql执行结果
        //由于此处sql为查询语句,有返回值,所以需要一个接收结果的对象
        //当执行的sql为增、删、改操作时,是没有返回值的,也就不需要接收结果这一步
        ResultSet resultSet = statement.executeQuery(sql);
        //打印结果验证
        while(resultSet.next()){
            System.out.print("id="+resultSet.getObject("id")+" ");
            System.out.print("stuname="+resultSet.getObject("stuname")+" ");
            System.out.print("seat="+resultSet.getObject("seat")+" ");
            System.out.println();
        }
        //释放连接
        resultSet.close();
        statement.close();
        connection.close();
    }

db_demo数据库表内容 

程序执行结果

以上是一个基本的jdbc程序,各项连接属性值都是写死的,一般在使用过程中都是将连接属性放在配置文件内,通过读取配置文件来获取连接信息,方便后续修改连接信息。

可修改为:

public static void main() throws IOException, SQLException, ClassNotFoundException {
        //创建问价输入流
        InputStream is = jdbcTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
        //将配置文件内容加载到properties集合
        Properties pros = new Properties();
        pros.load(is);

        String url = pros.getProperty("url");
        String username = pros.getProperty("user");
        String password = pros.getProperty("password");
        String driverClass = pros.getProperty("driverClass");

        //加载mysql驱动,会自动注册DriverManager
        Class.forName(driverClass);

        //获取连接
        Connection connection = DriverManager.getConnection(url, username, password);
        //创建Statement连接对象 用于执行SQL
        Statement statement = connection.createStatement();
        //编写sql语句
        String sql = "SELECT * FROM t_demo";
        //执行SQL并接受返回结果
        ResultSet resultSet = statement.executeQuery(sql);

        //遍历输出
        while(resultSet.next()){
            System.out.println("id="+resultSet.getObject("id"));
            System.out.println("stuname="+resultSet.getObject("stuname"));
            System.out.println("seat="+resultSet.getObject("seat"));
        }
        //释放连接
        resultSet.close();
        statement.close();
        connection.close();
    }
}

获取文件输入流语句分析

InputStream is = jdbcTest.class.getClassLoader().getResourceAsStream("jdbc.properties");

InputStream is = jdbcTest.class.getClassLoader().getResourceAsStream("jdbc.properties");

jdbcTest.class:类名,jdbcTest 是一个示例类名,表示当前代码所在的类。通过 getClass() 方法获取到当前类的运行时类对象。

getClassLoader():是一个类加载器方法,通过运行时类对象的 getClassLoader() 方法获取到当前类的类加载器。

getResourceAsStream("jdbc.properties"):类加载器的方法,用于加载资源文件。

getResourceAsStream() 接受一个资源的路径参数(相对于类路径),返回一个输入流(InputStream)对象。

配置文件内容

#配置文件放在src下,不能放在功能分块儿中,部署的时候会丢失
user=root
password=123456
url=jdbc:mysql://localhost:3306/db_demo?useSSL=false&serverTimezone=UTC
driverClass=com.mysql.cj.jdbc.Driver

自动注册原理

通过查看Driver源码,可以发现在类加载的时候,就已经自动注册驱动了,所以我们在使用的使用,只需要加载一下即可。

over!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDBC连接MySQL8.0案例详解 的相关文章

  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • SQL不允许表中有重复记录

    如何使其不添加重复项 我想让它通过 ID 之外的所有其他列进行检查 我希望这个无效 ID col1 col2 col3 1 first middle last ID col1 col2 col3 2 first middle last 我希
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s

随机推荐

  • ajax加载aspx页面,如何使用jquery ajax显示来自aspx页面的响应

    我使用ajax jquery来请求aspx页面 并且此页面显示GidView 因此响应将是网格视图的html代码 并且我将响应添加到DIV以显示结果 当我在第一次发出请求时正常工作 但第二次没有从响应中添加任何内容 尽管存在要绑定的数据 如
  • git 仓库迁移

    git 仓库迁移 文章目录 git 仓库迁移 在目标服务器建立新的git 功能仓库 设置git 仓库源 上传代码 验证是否成功 git远程仓库地址查看 在目标服务器建立新的git 功能仓库 git VM 0 5 centos git ini
  • MySQL中的IF语句使用

    MySQL中的IF语句 在 MySQL 数据库中 IF 语句是一种常见的条件控制语句 它可以根据指定的条件返回不同的结果 在本文中 我们将介绍 IF 语句的基本用法以及实际应用场景 IF函数 MySQL 提供了 IF 函数来实现 IF 语句
  • xcode4的自动完成功能(Code sense or Code Snippet)

    社区会员rainbird分享 自动完成包括两种含义 一种是输入字母的时候可以动态弹出一个列表 然后通过选择 提高输入效率 这种好像叫代码提示 Code sense 另一种就是输入几个字母的时候一回车 出来一串儿字符 Code Snippet
  • 把一个对象 转为JSON格式的方法

    List
  • svn的使用手册

    svn的使用手册 svn的使用手册 svn介绍 安装svn 安装VisualSVN server 安装TortoiseSVN 安装EclipseSVN插件 使用SVN Eclipse下使用SVN 合并冲突 分支 svn的使用手册 svn介绍
  • SpringBoot 实现定时任务

    定时任务 一 使用背景 二 定时任务的优点 三 SpringBoot 实现定时任务 3 0 项目结构 3 1 pom xml 3 2 启动类 3 3 服务类 3 4 cron表达式 3 4 1 时间范围 3 4 2 特殊字符 3 4 3 c
  • 启明云端分享

    提示 启明云端从2013年起就作为Espressif 乐鑫科技 大中华区合作伙伴 我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程 同时也用心推出了基于乐鑫的相关应用方案 希望你能第一时间了解并快速用上好的方案和产品
  • 微信支付接口常用参数及证书区分

    注意 服务商模式下 均是使用服务商的以下信息 1 证书 1 1商户api证书 v2和v3接口都需要使用 1 1 1获取方式 什么是商户API证书 如何获取商户API证书 商户api证书 里面介绍了如何获取商户证书的详细步骤 1 1 2作用
  • MyCAT 连接MySQL 8 注意事项

    一 问题产生 MyCat是一个基于MySQL协议的开源的分布式中间件 其核心是分库分表 但是目前MyCat仍主要面对MySQL 5 5 5 6 5 7版 对最新的MySQL 8尚未完全支持 需要用户对MySQL 8和MyCat的配置进行一系
  • Unity3d之Socket UDP协议

    原文地址 http blog csdn net dingkun520wy article details 49201245 一 Socket 套接字 UDP协议的特点 1 是基于无连接的协议 没有生成连接的延迟所以速度比TCP快 2 支持一
  • linux系统如何进入屏保,linux上屏保设置

    linux下屏保设置 Linux文本终端 字符界面屏保取消 在我们日常使用Linux过程中 经常遇到使用屏幕终端一段时间后 显示器关 闭 屏幕上没有任何显示 一段时间后 屏幕就会关闭 无任何显示 若此时系统死机或僵死 而且屏幕上有输出 当遇
  • 如何用js替换文本里的换行符 \n?

    如何用js替换文本里的换行符 n 有下面一段文本 在编辑器里的格式如下 div line1line2line3 div 切换到浏览器 显示如下 line1line2line3 这里我想使浏览器显示效果变成如下形式 line1 line2 l
  • python 多线程示例

    python 多线程示例 import queue import time import threading import threading from datetime import datetime 创建一个线程安全的队列 q queu
  • Moveit简单使用,在rviz中实现手动拖动-记录

    GAZEBO下载 一 首先需要准备模型文件 可以是自己的solidworks用URDF工具导出的 也可以是在网上下载的URDF文件包 1 我用的是solidworks手动导出的模型 b站博主导出SOLIDWORKS模型至URDF这个教程比较
  • 报错解决:SyntaxError: Non-UTF-8 code starting with ‘\xe7‘

    今天抓取数据时使用re对数据进行提取时遇到的问题 syntaxError Non UTF 8 code starting with xe7 意思是有的中文字符无法转成utf 8的形式 如图所示 这个是因为抓取的数据中有的中文字符识别不了 相
  • 深入理解 Spring 控制反转与依赖注入

    概览 对于 Spring 框架来说 控制反转 Inversion of Control IoC 和依赖注入 Dependency Injection DI 是个等同的概念 控制反转是通过依赖注入实现的 在这篇文章中 我们会详细介绍 IoC
  • 使用VS Code静态检查Android C/C++代码(clangd插件)

    前言 在前文使用VS Code更好的编写Android C C 代码 C C 插件 中主要介绍了如何更好的写代码 本文要探讨的是从 好写 到 写好 的问题 如何做静态代码检查 在查找资料中发现了Cppcheck和Clang Tidy等工具
  • 学位房如何查询学位真实性和户口是否被占用

    查户口有没占用 需要业主带上身份证 房产证去公安局户籍窗口查 他会口头告诉你这个地址的户口有没有人 不会出书面的东西 所以一定要听清楚 其实你和业主签三方合同的时候可以注明户口这方面的东西 比如多少号之前要迁走之类的 拿着房产证去公安局查户
  • JDBC连接MySQL8.0案例详解

    JDBC本质上是一个介于应用程序和数据库之间的公共接口 通过对这个接口的实现 我们可以建立应用程序和数据库之间的连接 便捷的访问数据库数据 不同版本的MySQL连接的参数是有一些小差别的 以下内容基于一个JDBC连接案例讲解连接数据库的过程