【MySQL】Java-JDBC

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 其实各种各样的语言都可以操控数据库的

MySQL & Java & JDBC

其实各种各样的语言都可以操控数据库的


例如C, C++, python, Java~

数据库也有很多MySQL便宜好用^v^

这里以MySQL与Java,JDBC编程为例~


特别注意的是:此文章只展现我认为比较好的一种操控方法,其他方法我保持中立~


以下也是我通过简化后的理解~

1. JDBC本质

JDBC ==> Java DataBase Connectivity


Java 数据库连接~

本质上就是一个 API


API ==> Application Programming Interface

应用编程接口,学习完Java后的我们可想而知已经对接口有很大认知了~

没错,Java内置了很多接口类,通过这些接口类,就可以对数据库进行操纵~

Java提供一套标准的API,规定好这些数据库统一的访问方式,数据库厂商按这个要求制作API和对应驱动包~

多个数据库迎合一个语言才比较合理~

但是这些接口有名无实~


必须下载驱动包,即下载配置数据库厂商提供的API和驱动包


JDBC优势:


Java语言访问数据库操作完全面向抽象接口编程

开发数据库应用不用限定在特定数据库厂商的API

他们就是按照咱们的标准做的~

程序的可移植性大大增强

1.1 “.jar文件” – 驱动包下载与配置

jar扩展名也是一种压缩包~


与jdk有关~

点击此链接: mysql-connector-java-5.1.49.jar · 游离态


下载保存到熟悉的地方~


在一个项目的**.idea文件**中建立一个新的目录


命名,我习惯命名为lib(library,在程序员世界里一般指代库的意思~)


将刚才的 “.jar文件”放在这各lib目录下,我用的是Ctrl + C 和Ctrl + V ,将文件中间导入~


确认后将lib目录添加为库~


确认~


OK了~


这样之后就可以正常使用接口了~


2. JDBC编程

2.1 构建数据源

程序与数据库进行联系~

public class Test {
    public static void main(String[] args) {
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/" +
                /*这里java107含义是数据库名*/"java107?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("我的密码");
    }
}


2.1.1 MysqlDataSource

普通类实现接口,这是Java程序员的习惯

这个类里有更多的方法,但是太多,我们只需要等一下向下转型用三个设置方法~

2.1.2 setUrl

URL简单来说就是一个这个数据源的定位器

简单的理解为地址呗

程序联系数据库~

“jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false”

这个复制粘贴就好,现在的知识储备还不能理解~

这里的java107为已存在的数据库的数据库名,我们也可以通过输入字符串,通过字符串拼接

起自定义控制数据库的~

2.1.3 setUser

设置为根用户(root),拥有权限去做后面的事情

2.1.4 setPassword

输入MySQL账户的密码~

密码错误当然进不去~

2.2 用本地数据源建立连接器

       Connection connection = dataSource.getConnection();



会报异常

这个异常JVM解决的了~

直接throws或者try catch 去处理~

alt + 回车~


通过这个连接器,就可以跟MySQL服务器交互了~

2.3 通过连接器将SQL语句转化为“准备状态”

通过连接器,建立该语句通往服务器的通道,“准备状态”即一触即发~

SQL语句就是一个字符串对象

String sql = "insert into classes (id, name) values (4, \'软件工程2022级卓越2班\')";

//“增语句”~

//‘ 单引号在java常字符串中,是特殊的,所以要用\去 去除特殊化~

PreparedStatement preparedStatement = connection.prepareStatement(sql);


如果打印这个“准备状态”的话


System.out.println(preparedStatement);




2.4 触发这个准备状态~

2.4.1 非查询语句


这个语句只要不是查询语句,就可以用到这个方法去触发~


包括索引事物甚至创造数据库和表

程序自定义输入信息~


Java提供了个语法,只要在需要自定义信息的位置用“ ?”代替,后续可以处理准备状态的SQL语句,进行自定义~

这个方法很安全,因为通过后续方法插入的信息会被检查~

自定义不代表整条语句交给程序员无限制的自定义

如果通过简单拼接,甚至让程序员输入整条SQL语句的话

如果别有用心,通过特殊语法,从中插入一条删除语句也不是不可能~

这特别危险!

Scanner scanner = new Scanner(System.in);
        int id = scanner.nextInt();
        String name = scanner.nextLine();
        preparedStatement.setInt(1, id);
        preparedStatement.setString(2, name);
        System.out.println(preparedStatement.executeUpdate());


setInt ==> 设置整数, 参数为 “通配符?”的编号, 填入整数

编号即从左到右 “?” 是第几个~

setString ==> 参数为 “通配符?”的编号, 填入字符串~


2.4.2 查询语句


这个语句只能是查询性质的语句==> 即show语句或者select语句

返回的这个结果集,也是一个迭代器~

并不属于集合类,不能for-each遍历

用类似于迭代器的方法去遍历

String searchSql = "select id, name from classes";
        preparedStatement.close();
        preparedStatement = connection.prepareStatement(searchSql);
        ResultSet set = preparedStatement.executeQuery();
        while(set.next()) {
            id = set.getInt("id");
            name = set.getString("name");
            System.out.println(id + " " + name);
        }


2.4.2.1 迭代原理


一开始set是处于这个列表头的位置


所以这个时候去获取当前行的数据的时候,必然是会报错的~



set.next( ) 作为循环条件~



set的getxxx方法,获取当前行的信息~


输入的是成员名/别名~

2.5 释放空间

每个客户端这么搞,数据库服务器是有负担的,我们要对这些对象进行释放关闭~

就像吃完饭,要从饭店离开~

后创建的先释放~

否则先创建的对象的释放影响后面的对象的释放~

set.close();
preparedStatement.close();
connection.close();


数据源不需要释放,因为还没跟数据库服务器有联系呢~

3. 知识点补充

3.1 创建数据库

我们现在只是浅浅了解,后续有更多的语法随着我们学习JavaEE,我们会继续完善~


目前我们需要进入一个已知的数据库~


补充知识:show语句虽然没有where语句,但是有like模糊匹配

库名/表明进行模糊匹配~直接作为条件,判断是否输出


通过show语句执行后形成的结果集,判断是否存在此库~(用next方法)


不存在就执行改造数据库~


public static void main(String[] args) throws SQLException {
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/" +
                /*这里java107含义是数据库名*/"java107?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("mmsszsd666");
        Connection connection = dataSource.getConnection();
        String sql = "show databases like \"newOne\"";//查询性质的语句
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        ResultSet set = preparedStatement.executeQuery();
        if(set.next()) {
            System.out.println("数据库已存在");
        }else{
            System.out.println("创建数据库");
            preparedStatement.close();
            String createSql = "create database newOne charset = utf8";
            preparedStatement = connection.prepareStatement(createSql);
            preparedStatement.executeUpdate();
        }
        set.close();
        preparedStatement.close();
        connection.close();
    }



在数据库那儿进行验证~

3.2 创建表~

思路差不多~

我在newOne中建立一个新表

在释放资源之前调用函数:createNewOne(Connection connection)

public static void createNewOne(Connection connection) throws SQLException {
    String useSql = "use newOne";
    PreparedStatement preparedStatement = connection.prepareStatement(useSql);
    preparedStatement.executeUpdate();
    preparedStatement.close();
    String searchSql = "show tables like \"Student\"";
    preparedStatement = connection.prepareStatement(searchSql);
    ResultSet set = preparedStatement.executeQuery();
    if(set.next()) {
        System.out.println("已有此表");
    }else{
        preparedStatement.close();
        String sql = "create table Student (id int, name varchar(20))";
        preparedStatement = connection.prepareStatement(sql);
        preparedStatement.executeUpdate();
        System.out.println("创建成功");
    }
    set.close();
    preparedStatement.close();
    connection.close();
}

executeUpdate也可以执行use语句~

在数据库那儿进行验证~


3.3 对于查询语句的结果集

如果一个“准备状态”被执行第二次,上一次的结果集直接强制被释放~


ResultSet resultSet1 = preparedStatement.executeQuery();
  ResultSet resultSet2 = preparedStatement.executeQuery();
        while(resultSet1.next()) {
            int id = resultSet1.getInt("id");
            String name = resultSet1.getString("name");
            System.out.println(id + " " + name);
        }
        while(resultSet2.next()) {
            int id = resultSet2.getInt("id");
            String name = resultSet2.getString("name");
            System.out.println(id + " " + name);
        }
        System.out.println("--------------------------------------------------");



被释放后还去使用必然是会报异常的~


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
10月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
6月前
|
SQL Java 关系型数据库
Java连接MySQL数据库环境设置指南
请注意,在实际部署时应该避免将敏感信息(如用户名和密码)硬编码在源码文件里面;应该使用配置文件或者环境变量等更为安全可靠地方式管理这些信息。此外,在处理大量数据时考虑使用PreparedStatement而不是Statement可以提高性能并防止SQL注入攻击;同时也要注意正确处理异常情况,并且确保所有打开过得资源都被正确关闭释放掉以防止内存泄漏等问题发生。
252 13
|
存储 Java 关系型数据库
java调用mysql存储过程
在 Java 中调用 MySQL 存储过程主要借助 JDBC(Java Database Connectivity)。其核心原理是通过 JDBC 与 MySQL 建立连接,调用存储过程并处理结果。具体步骤包括:加载 JDBC 驱动、建立数据库连接、创建 CallableStatement 对象、设置存储过程参数并执行调用。此过程实现了 Java 程序与 MySQL 数据库的高效交互。
|
8月前
|
人工智能 Java 关系型数据库
Java的时间处理与Mysql的时间查询
本文总结了Java中时间与日历的常用操作,包括时间的转换、格式化、日期加减及比较,并介绍了MySQL中按天、周、月、季度和年进行时间范围查询的方法,适用于日常开发中的时间处理需求。
142 0
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
474 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
879 26
|
自然语言处理 Java 关系型数据库
Java mysql根据很长的富文本如何自动获取简介
通过使用Jsoup解析富文本并提取纯文本,然后根据需要生成简介,可以有效地处理和展示长文本内容。该方法简单高效,适用于各种应用场景。希望本文对您在Java中处理富文本并生成简介的需求提供实用的指导和帮助。
255 9
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
573 1
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
401 2
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。

推荐镜像

更多