【MySQL】Java-JDBC

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 其实各种各样的语言都可以操控数据库的

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("--------------------------------------------------");



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


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
关系型数据库 MySQL Java
【MySQL+java+jpa】MySQL数据返回项目的感悟
【MySQL+java+jpa】MySQL数据返回项目的感悟
48 1
|
12天前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
73 26
|
16天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
26天前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
26 2
|
1月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
2月前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
152 6
|
2月前
|
Java 关系型数据库 MySQL
mysql5.7 jdbc驱动
遵循上述步骤,即可在Java项目中高效地集成MySQL 5.7 JDBC驱动,实现数据库的访问与管理。
421 1
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
104 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
48 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
57 0

推荐镜像

更多
下一篇
DataWorks