详解Java使用JDBC连接MySQL数据库

作者:九九舅舅酒酒 时间:2024-01-24 18:21:06 

一:什么是数据库,为什么要有数据库?

数据,数据库,数据库管理系统和数据库系统是与数据库技术密切相关的四个基本概念。

数据库相信大家都耳熟能详了,其实数据库顾名思义就是存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的~

可能有朋友就要打断我施法了,停停停,我们Java程序猿在IDEA里面和控制台你侬我侬,没有对象new个对象存储在内存JVM的堆上就行了,学数据库干啥啊?

这时候我们就需要了解到:内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。

以疫情期间为例,把人隔离观察住的酒店,就好比是内存,家喻户晓的JVM就是放在内存上的~~~ 酒店是给人住的,他的空间是宝贵的,然而每个人每天生活必需品,衣食住行等等,隔离一天两天可能酒店还放得下,但是隔离十天半个月,一年半载呢?酒店是住人的,不是放东西的~~~酒店寸土寸金每个地方都很宝贵,拿酒店(内存)来放行李和必需品等(海量数据~),如果酒店还是西安的W酒店,这岂不是很奢侈?~~~你拿来存放自己和跟班大批行李~老哥,还缺行李不?(doge),想要存放大批东西(海量数据),我直接把十四运的主场馆(外存上的数据库)(69.6亩)给你放行李(海量数据)~!

这下诸位应该都了然为什么我们需要搞数据库了吧?

二:如何使用Java连接数据库~

1)原生方法

1.1)加载JDBC 驱动:

Class.forName(driver);// mysql 数据库:“com.mysql.jdbc.Driver”

1.2)建立数据库连接:

Connection conn=DriverManager.getConnection(url,userName,password);

1.3)创建 statement,用来执行SQL 语句:

Statement statement =conn.createStatement();

1.4)执行 SQL 语句:

preparedStatement.Execute 这个。执行所准备的语句,并且返回结果集合 ResultSet

preparedStatement 事先准备好的声明

Execute the prepared statement.就是执行准备好的语句!

ResultSet rs =statement.executeQuery(sql);

1.5)关闭记录集,关闭声明,关闭连接对象

1.6)连起来

在以反射的方式注册驱动从而获取数据库的连接的方法,详情可以参考我以前的博客,因为本文侧重于讲解DataSource连接数据库的方法!所以在此不作赘述~

1.7)原生方法的不足:

每次使用都要创建连接,使用完毕后还必须关闭连接,操作繁琐,易出错;

连接数据库资源不便统一管理;

三:IDEA中配置jar包

工欲善其事必先利其器,在前期的学习过程中,我们使用JDBC连接MySQL的时候应该手动配置Jar包

移步之前的帖子——>配置Java包流程及Jar包下载

四:url必知必会

我们在浏览器的地址栏里输入的网站地址叫做URL (Uniform Resource Locator,统一资源定位符)。.就像每家每户都有一个门牌地址一样,每个网页也都有一个Internet地址。

在使用连接数据库的时候需要先知道数据库的

详解Java使用JDBC连接MySQL数据库

连接信息~

列位您可记住嘞  127.0.0.1 这个地址:就是当前自己电脑的IP地址

而我们的IP地址 和 端口如何理解 

IP地址就相当于我们点外卖订单所填的地址,端口号就是外卖订单所写的收件人!~具体交给谁吃!~ 

而且这个URL没必要强行记

URL

private static final String URL = "jdbc:mysql://127.0.0.1:3306/java16_order_system?characterEncoding=utf8&useSSL=true";

jdbc:mysql://127.0.0.1:3306/java16_order_system?characterEncoding=utf8&useSSL=true

放在好找的地方(如gitee码云仓库)等,需要的时候复制粘贴一改就行了!~

五:datasource获取连接

package model;

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;

// DBUtil 本质上是一个管理了单例的 DataSource 的类
public class DBUtil {
   private static final String URL = "jdbc:mysql://127.0.0.1:3306/java16_order_system?characterEncoding=utf8&useSSL=true";
//    private static final String URL = "jdbc:mysql://47.98.116.42:3306/java16_order_system?characterEncoding=utf8&useSSL=true";
   private static final String USERNAME = "root";
   private static final String PASSWORD = "rota";

private static volatile DataSource dataSource = null;

public static DataSource getDataSource() {
       if (dataSource == null) {
           synchronized (DBUtil.class) {
               if (dataSource == null) {
                   dataSource = new MysqlDataSource();
                   ((MysqlDataSource)dataSource).setURL(URL);
                   ((MysqlDataSource)dataSource).setUser(USERNAME);
                   ((MysqlDataSource)dataSource).setPassword(PASSWORD);
               }
           }
       }
       return dataSource;
   }

// 数据库连接失败是很常见的问题. 如果失败, 后续的操作肯定也是失败的.
   // 如果发现 Connect 为 null, 就说明数据库连接失败, 就需要查看错误信息(Tomcat 的日志)
   // 常见的问题就是, url, username, password 等信息写错了, 或者数据库没有启动.
   public static Connection getConnection() {
       try {
           return getDataSource().getConnection();
       } catch (SQLException e) {
           e.printStackTrace();
       }
       System.out.println("数据库连接失败, 请检查数据库是否启动正确, url 是否正确");
       return null;
   }

public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet) {
       try {
           if (resultSet != null) {
               resultSet.close();
           }
           if (statement != null) {
               statement.close();
           }
           if (connection != null) {
               connection.close();
           }
       } catch (SQLException e) {
           e.printStackTrace();
       }
   }

}

需要查看了解上文提到的通过注册驱动获取连接,请移步之前博客:注册驱动获取连接

来源:https://blog.csdn.net/m0_56164356/article/details/122226279

标签:Java,JDBC,连接,MySQL
0
投稿

猜你喜欢

  • JS简单获取并修改input文本框内容的方法示例

    2024-05-10 14:07:59
  • Pytorch中Tensor与各种图像格式的相互转化详解

    2023-05-23 01:46:54
  • 实例讲解Python中SocketServer模块处理网络请求的用法

    2021-04-16 13:25:27
  • tensorflow图像裁剪进行数据增强操作

    2023-06-23 14:33:20
  • python3 面向对象__类的内置属性与方法的实例代码

    2023-03-24 10:03:19
  • Python实现数据地址实体抽取

    2022-12-03 00:23:18
  • 多个函数验证同一表单方法

    2007-10-06 22:55:00
  • pycharm激活方法到2099年(激活流程)

    2022-11-17 05:45:35
  • JavaScript中跨域问题的深入理解

    2024-04-28 09:41:55
  • 详解python关于多级包之间的引用问题

    2021-04-16 19:58:17
  • Vue中使用Teleport的方法示例

    2024-05-09 15:13:19
  • 在ASP.NET 2.0中操作数据之二十二:为删除数据添加客户端确认

    2024-05-09 09:03:54
  • C#命名空间System.ComponentModel属性方法汇总

    2024-06-05 09:24:02
  • Node.js对MongoDB数据库实现模糊查询的方法

    2024-01-23 14:31:02
  • numpy中的log和ln函数解读

    2023-06-14 22:46:40
  • HTML中使背景图片自适应浏览器大小实例详解

    2024-05-02 16:18:32
  • ASP操作XML的方法

    2008-03-06 21:43:00
  • 利用mycat实现mysql数据库读写分离的示例

    2024-01-12 21:55:52
  • Python使用crontab模块设置和清除定时任务操作详解

    2023-02-07 15:13:37
  • Django返回HTML文件的实现方法

    2022-12-25 16:26:16
  • asp之家 网络编程 m.aspxhome.com