• Java数据库连接 (Java Database connect)


    1. JDBC入门

    1.1 客户端操作来访问MySQL数据库的方式:

    (1)使用第三方客户端来访问 MySQLSQLyogNavicatSQLWaveMyDB StudioEMS SQL Manager for MySQL
    (2)使用MySQL自带命令行方式访问
    (3)通过 Java 来访问 MySQL 数据库

    1.2 什么是JDBC

    JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据。JDBC代表Java数据库连接。

    JDBCJava 访问数据库的标准规范,具体操作数据库还需要具体的实现类,也就是数据库驱动。每个数据库厂商根据自家数据库的通信格式编写好自己数据库的驱动,数据库驱动由数据库厂商提供。

    在这里插入图片描述

    1.3 使用 JDBC 开发使用到的包

    使用到的包说明
    java.sql所有与 JDBC 访问数据库相关的接口和类
    javax.sql数据库扩展包,提供数据库额外的功能。如:连接池
    数据库的驱动由各大数据库厂商提供,需要额外下载,是对 JDBC 接口实现的类

    1.4 JDBC 的核心 API

    接口或类作用
    DriverManager 类管理和注册数据库驱动;得到数据库连接对象
    Connection 接口一个连接对象,可用于创建 Statement 和 PreparedStatement 对象
    Statement 接口一个 SQL 语句对象,用于将 SQL 语句发送给数据库服务器
    PreparedStatemen 接口一个 SQL 语句对象,是 Statement 的子接口
    ResultSet 接口用于封装数据库查询的结果集,返回给客户端 Java 程序

    2.Java MySQL连接

    2.1.查看MySQL安装版本

    使用快捷键win+r打开命令提示符,输入mysql --version查看MySQL版本。
    在这里插入图片描述

    2.2 下载对应的驱动jar包

    Java 连接 MySQL 需要驱动包,下载地址如下:
    https://downloads.mysql.com/archives/c-j/
    在这里插入图片描述

    2.3 为项目添加驱动依赖

    选择对应版本进行下载后进行解压。
    在这里插入图片描述
    将得到的jar包文件导入对应的项目的lib库中。
    在这里插入图片描述
    将驱动jar包添加项目库依赖
    在这里插入图片描述

    2.4 创建测试数据

    在 MySQL 中创建 JDBC 数据库,并创建 websites 数据表,表结构如下。

    CREATE TABLE `websites` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` char(20) NOT NULL DEFAULT '' COMMENT '站点名称',
      `url` varchar(255) NOT NULL DEFAULT '',
      `alexa` int(11) NOT NULL DEFAULT '0' COMMENT 'Alexa 排名',
      `country` char(10) NOT NULL DEFAULT '' COMMENT '国家',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    插入一些数据,相应的SQL语句如下:

    INSERT INTO `websites` VALUES ('1', 'Google', 'https://www.google.cm/', '1', 'USA'),
                                  ('2', '淘宝', 'https://www.taobao.com/', '13', 'CN'),
                                  ('3', '微博', 'https://weibo.com/', '20', 'CN'),
                                  ('4', 'Facebook', 'https://www.facebook.com/', '3', 'USA'),
                                  ('5', '腾讯', 'https://www.qq.com/', '9', 'CN');
    
    • 1
    • 2
    • 3
    • 4
    • 5

    数据表显示如下。
    在这里插入图片描述

    2.5 连接MySQL数据库

    在这里插入图片描述
    以下实例使用了 JDBC 连接 MySQL 数据库,一些数据如用户名、密码等,需要根据开发环境来配置。

    package com.itheima;
    
    import java.sql.*;
    
    public class jdbcdemo {
    
        // MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL
        // static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        // static final String DB_URL = "jdbc:mysql://localhost:3306/jdbc";
    
        // MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
        static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
        static final String DB_URL = "jdbc:mysql://localhost:3306/jdbc?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
    
        // 数据库的用户名与密码,需要根据自己的设置
        static final String USER = "";
        static final String PASS = "";
    
        public static void main(String[] args) {
            Connection conn = null;
            Statement stmt = null;
            try {
                // 注册 JDBC 驱动
                Class.forName(JDBC_DRIVER);
    
                // 打开链接
                System.out.println("连接数据库...");
                conn = DriverManager.getConnection(DB_URL, USER, PASS);
    
                // 执行查询
                System.out.println(" 实例化Statement对象...");
                stmt = conn.createStatement();
                String sql;
                sql = "SELECT id, name, url FROM websites";
                ResultSet rs = stmt.executeQuery(sql);
    
                // 展开结果集数据库
                while (rs.next()) {
                    // 通过字段检索
                    int id = rs.getInt("id");
                    String name = rs.getString("name");
                    String url = rs.getString("url");
    
                    // 输出数据
                    System.out.print("ID: " + id);
                    System.out.print(", 站点名称: " + name);
                    System.out.print(", 站点 URL: " + url);
                    System.out.print("\n");
                }
                // 完成后关闭
                rs.close();
                stmt.close();
                conn.close();
            } catch (SQLException se) {
                // 处理 JDBC 错误
                se.printStackTrace();
            } catch (Exception e) {
                // 处理 Class.forName 错误
                e.printStackTrace();
            } finally {
                // 关闭资源
                try {
                    if (stmt != null)
                        stmt.close();
                } catch (SQLException se2) {
                } // 什么都不做
                try {
                    if (conn != null)
                        conn.close();
                } catch (SQLException se) {
                    se.printStackTrace();
                }
            }
            System.out.println("Goodbye!");
        }
    }
    
    • 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
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76

    以上实例执行输出结果如下。
    在这里插入图片描述

  • 相关阅读:
    mysql中的各种日志
    基于微信小程序的游戏账号交易买卖平台设计与实现(源码+lw+部署文档+讲解等)
    Asset Checker 本地资源检测
    UVa 10594 Data Flow / 最小费用最大流
    Django有3种视图与说明
    回溯--字母迷宫
    【已解决】java的gradle项目报错org.gradle .api.plugins .MavenPlugin
    ES6中的WeakMap和WeakSet:特性和用途
    风投机构加持的NFT明星项目,是否值得追逐?
    两个三位电云获取旋转矩阵
  • 原文地址:https://blog.csdn.net/weixin_51571728/article/details/126736461