Java的JDBC编程<-----用Java代码操作数据库(MySQL数据库)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Java的JDBC编程<-----用Java代码操作数据库(MySQL数据库)

小编学习的是MySQL数据库,是在客户端进行操作的,但是真正在企业/公司里面操作数据库的时候,99.99999% 的情况下都是通过代码来操作的,很少会在客户端里输入sql语句(你的系统执行了10W次,也不一定会手动敲一次sql),那么,接下来的本篇文章,Java的JDBC编程主要讲解的就是:用Java代码操作数据库~注意啦注意啦~

市场上常见的几个数据库,如:MySQL,Orcale,SQL Server 在开发的时候,就会提供一组编程接口(API),所谓的API就是指:给你一个软件/程序,你能对他干啥??(代码层次)基于他提供的这些功能,就可以写一些其他代码~

如:一个新妹子:

一个新妹子:

  1. 微信聊天
  2. 发自拍照
  3. 一起吃饭
  4. 一起喝咖啡

基于这些功能,写了一个程序,度过美好的一天

当妹子进化为女朋友以后~~

  1. 微信聊天
  2. 发自拍照
  3. 一起吃饭
  4. 一起喝咖啡
  5. 拉小手
  6. 抱抱
  7. ~~~~~

基于这些功能,有可以度过另一天~~

上述跟妹子在一块干的事情(吃饭,聊天,自拍照,喝咖啡,拉手,抱抱~~~~,就是API,所谓的API,对于程序员来说,API往往就是以“函数“,”方法“,”类“的形式来提供的(不是自己实现的,是人家哪些库(程序)提供的,基于函数,API对程序进行各种操作,来度过美好的一天~~

但是,这些数据库:MySQL,Orcale……所提供的API是不一样的(有人的地方就有江湖)总体的差别不大(细节有一定影响)

Java程序员要想进行数据库开发,就需要在你的项目中导入对于数据库的驱动包,才能编写代码~

那么,如何在数据库中导入驱动包呢??

  1. 创建个Java项目
  2. 驱动包从哪里来??(驱动包是厂商提供的)
  • MySQL的官方网站获取(下策)MySQL被Orcale收购了以后,官网也被合并了,难用~
  • GitHub(需要翻墙)
  • Maven的中央仓库获取

Maven相当于手机的应用商店,中央仓库相当于服务器,因此,在应用商店托管了各种软件程序包,通过应用商店,就可以访问到软件程序包,下载下来~~

https://mvnrepository.com

Maven官方网站:

需要注意的是:数据库服务器是5系列,此次的驱动包也得是5系列(大版本不要错,小版本无所谓)

.jar是Java发布程序的典型方式;

Java通过.java源文件编译成.class文件,JVM来解释执行.class

每一个.java都一一对应一个.class,如果代码里.java 非常多呢?

把一大堆的.class给打压缩包(类似于.rar,.zip),把.jar拷贝给对方,对方就可以之间使用JVM执行了~

此处MySQL驱动包的这个.jar不是单独运行的.jar,可以把他导入到咱们的项目;如何就可以调用其中的方法和类进行编程了~

操作过程:

  1. 把.jar复制到idea中(不需要解压缩,idea自动帮你解压缩)(每次创建项目都得这么干)
  2. 把这个目录(.jar放入的)标记成项目的库(右键,Add as library…,确定,通过这样,idea就能识别这个目录里的.jar包,从而就可以调用里面的类来写代码了~~)

下面我们来看一下最重要的部分:编写JDBC代码吧~~

JDBC需要通过一下步骤来完成开发~

  1. 创建并初始化一个数据源
  2. 和数据库服务器建立连接
  3. 构造sql语句
  4. 执行sql语句
  5. 释放必要的资源

在上面的五个步骤中,看起来很麻烦,但是实际上却是非常简单,主要还是在于刚刚接触这一块,会觉得有点饿麻烦,涉及到新的类,新的方法,新的概念……,但是多写几次就会发现,这里的代码满满的都是套路~~

正是因为套路多了,实际开发中就会使用一些框架来简化数据库操作代码(MyBatis这样的框架就是如此),但是不能光会框架,也得知道框架背后的操作,对原生JDBC有理解(框架一直在变,JDBC是不变的!!!)

1.创建并初始化一个数据源

数据源:数据的源头,指数据从哪里来!!(描述数据库服务器在哪里)

用DataSource接口

DataSource  dataSource =new MysqlDataSource();  //向上转型
               父类引用指向子类对象

明确数据库所在的位置(向下转型转回来)

((MysqlDataSource)dataSource).setUrl();

setUrl()这个方法是子类有的,父类没有的方法,要想使用,就需要把父类转回成子类引用(向下转型)

URL:计算机里的一个常见术语

唯一资源定位符,描述网络上的某个资源所在的位置(格式非常有特点)

"jdbc:mysql://127.0.0.1:3306/java12?characterEncoding=utf8&useSSL=false"
                                                          &注意区分
在后续HTTP会讲到:千万不要背,容易被错(放到电脑一个随手能找到的地方)

在上述的代码中:

jdbc是固定的

mysql看你用啥数据库

127.0.0.1:IP地址( 网络上确定主机的位置就是通过IP地址来确定的!!)

               MySQL数据库是一个”客户端服务器“结构的程序,客户端和服务器之间通过网络  来通信;都写作127.0.0.1叫做环回IP,表示你自己当前主机

咱们的数据库客户端(现在写的jdbc代码)和数据库服务器(之前装存数据的服务)是在一个主机上!(若是客户端和服务器在不同的主机上,IP就得变变了~)

3306:端口号

          端口来区分应用程序,数据库服务器默认端口就是3306

java12:数据库名

           create  database  数据库名;

characterEncoding = utf8:参数,字符集使用utf8

SSL:是一个加密协议(SSL=false:不加密)

上面的这个我们也可也理解为:

"jdbc:mysql://127.0.0.1:3306/java12?characterEncoding=utf8&useSSL=false"
山大 :18号窗口 / 熏肉大饼?口味=微辣&葱=少葱&香菜=要

简单的个人理解,仅供参考~

设置用户名:

((MysqlDataSource)dataSource).setUser("root");
用户名都是root(默认就是root)

设置密码:

((MysqlDataSource)dataSource).setPassword("123456");
此处的123456是指安装数据库的时候,自己设定的密码

这些代码只是设置数据源,描述数据库服务器在哪!!还没真正和数据库服务器连接~!!

2.和数据库服务器建立连接

dataSource.getConnection();
会抛异常(SQLException)
用变量接收返回的结果
Connection  connection = dataSource.getConnection();
(java.sql类下)

3.构造sql语句

String  sql ="insert into student value(1,"张三");

即使咱们使用代码来操作数据库,还是靠sql语句,只不过是换成用代码来构造sql,前面sql的各种语法仍然有效

当然,光有sql语句还不够,需要有准执行项来包裹sql语句

PreparedStatement  statement = connection.preparedStatement(sql);
使用PreparedStatement提前预编译一下SQL

4.执行sql语句

int ret =statment.exeuteUpdate();
返回类型为int,表示影响到的行数
System.out.println("ret = "= ret);

把sql语句(预编译过的)发送给数据库服务器,由服务器做出响应

insert
delete  ----->> executeUpdate------>>返回int,表示影响到的行数
update
select----->>executeQuery  有点饿复杂(后面怎请考虑)

5.释放必要的资源

statement.close();
connection.close();

经过上述的分析,我们来简单的看一下总体的代码:

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JDBC_Insert {
    public static void main(String[] args) throws SQLException {
        //JDBC需要通过一下步骤来完成开发
        //1.创建并初始化一个数据源
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");
        //123456是自己设置的MySQL登录密码
        //2.和服务器建立联系
        Connection connection=dataSource.getConnection();
        //3.构造sql语句
        String sql="insert into student value(1,'张三')";
        PreparedStatement statement=connection.prepareStatement(sql);
        //4.执行sql语句
        int ret=statement.executeUpdate();
        System.out.println("ret = "+ ret);
        //5.释放必要的资源
        statement.close();//先释放语句
        connection.close();//后释放连接
        //先创建的后释放(顺序不能变)
    }
}

值得注意的是:在上述的代码中:3.构造SQL 语句给写死了~~不知道大家有没有注意到,反正小编倒是感觉出来不得劲了~

//3.构造sql语句
        String sql="insert into student value(1,'张三')";
        PreparedStatement statement=connection.prepareStatement(sql);

在这个构造sql语句中,要插入的数据是写死的(硬编码)不好

其实更合适的做法是:把数据通过其他方式让用户输入(比如通过控制台)

做法1:我们可以在代码的开头部分创建一个输入:

Scanner scanner=new Scanner(System.in);

从而由:3.从控制台中读取用户的输入内容(下策

//3.从控制台读取用户的输入内容
        System.out.println("请输入学生姓名:");
        String name=scanner.next();
        System.out.println("请输入学号:");
        int id=scanner.nextInt();
        //3.构造SQL语句
        String sql="insert into student value("+ id+ ",'"+name+ "')";
        PreparedStatement statement=connection.prepareStatement(sql);

通过这种方式确实可以完成用户动态输入数据的效果,但是这种写法特别丑,可读性差,容易出错(不建议这样写,仅做了解即可

做法2:使用PreparedStatement的拼装功能来实现(更好的写法

//3.从控制台读取用户的输入内容
        System.out.println("请输入学生姓名:");
        String name=scanner.next();
        System.out.println("请输入学号:");
        int id=scanner.nextInt();
        //4.构造SQL语句
        String sql="insert into student value(?,?)";
        // ? 问号:占位符
        PreparedStatement statement=connection.prepareStatement(sql);
        statement.setInt(1,id);//把第一个?(问号)替换为id
        statement.setString(2,name);//把第二个?(问号)替换为name
        //通过setInt , strString将占位符替换为指定的值
        System.out.println(statement);
        //打印,打印需要加到拼接数据之后

值得注意的是:打印需要加到拼接数据之后,如果在上述的过程中,执行的代码结构出错了,就可以把statement打印出来,看看哪里有语法错误或者也可以直接把这个sql拷贝到控制台中执行~~

那么,此时比较完整(合理)的代码如下:

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.awt.print.PrinterAbortException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class JDBC_Insert {
    public static void main(String[] args) throws SQLException {
        Scanner scanner=new Scanner(System.in);
        //JDBC需要通过一下步骤来完成开发
        //1.创建并初始化一个数据源
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("zhao05306910a");
        //2.和服务器建立联系
        Connection connection=dataSource.getConnection();
        //3.从控制台读取用户的输入内容
        System.out.println("请输入学生姓名:");
        String name=scanner.next();
        System.out.println("请输入学号:");
        int id=scanner.nextInt();
        //4.构造SQL语句
        String sql="insert into student value(?,?)";
        // ? 问号:占位符
        PreparedStatement statement=connection.prepareStatement(sql);
        statement.setInt(1,id);//把第一个?(问号)替换为id
        statement.setString(2,name);//把第二个?(问号)替换为name
        //通过setInt , strString将占位符替换为指定的值
        System.out.println(statement);
        //打印,打印需要加到拼接数据之后
        //5.执行sql语句
        int ret=statement.executeUpdate();
        System.out.println("ret = "+ ret);
        //6.释放必要的资源
        statement.close();//先释放语句
        connection.close();//后释放连接
        //先创建的后释放(顺序不能变)
    }
}

经过上述的一个简单讲解,想必老铁也能看懂如何插入数据了吧~

那么,我们来实现一个查询操作

对于查询来说,返回的结果不是单纯的int了,而是ResultSet对象

具体的过程如下:

  1. 创建并初始化数据源
  2. 建立连接
  3. 构造sql
  4. 执行sql
  5. 遍历结果集合
  6. 释放资源

那么我们来看一下具体的代码吧~

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;
public class JDBC_Select {
    public static void main(String[] args)  throws SQLException {
        //1.创建并初始化数据源
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("zhao05306910a");
        //2.建立连接
        Connection connection=dataSource.getConnection();
        //3.构造SQl
        String sql="select * from student";
        PreparedStatement statement=connection.prepareStatement(sql);
        //4.执行sql
        ResultSet resultSet=statement.executeQuery();
        //5.遍历结果集合
        while (resultSet.next()){
            //把resuletSet想象成一个表格,同时表格这里有光标
            //初始情况下光标指向最上面(表格最上面一行的上面~)
            //每次使用next,光标往下走一行,然后返回true(当光标已经将整个表都遍历完了,就会返回fales)
            //当光标指向某一行的时候,getXXX来获取当前这行里的数据
            int id=resultSet.getInt("id");
            String name=resultSet.getString("name");
            System.out.println("id = "+id +"name +"+name);
            //getXXX是取出这一行的指定列的值,使用的方法要和列的类型匹配
        }
        //释放必要的资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

关于:Java的JDBC编程<-----用Java代码操作数据库(MySQL数据库)大致就讲完了,那么有错误的地方,请各位老铁及时评论~~

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
关系型数据库 MySQL Java
【MySQL+java+jpa】MySQL数据返回项目的感悟
【MySQL+java+jpa】MySQL数据返回项目的感悟
44 1
|
1月前
|
关系型数据库 MySQL Java
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
66 0
|
1月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
128 6
|
24天前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
1月前
|
关系型数据库 MySQL Java
java协程操作mysql数据库
本文介绍了如何在Java项目中使用虚拟线程和协程操作MySQL数据库,并通过代码示例展示了如何利用CompletableFuture实现非阻塞数据库连接和操作。
29 2
java协程操作mysql数据库
|
1月前
|
Java 关系型数据库 MySQL
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
142 1
|
1月前
|
SQL 关系型数据库 MySQL
创建SQL数据库的基本步骤与代码指南
在信息时代,数据管理显得尤为重要,其中数据库系统已成为信息技术架构的关键部分。而当我们谈论数据库系统时,SQL(结构化查询语言)无疑是其中最核心的工具之一。本文将详细介绍如何使用SQL创建数据库,包括编写相应的代码和必要的步骤。由于篇幅限制,本文可能无法达到您要求的2000字长度,但会尽量涵盖创建数
44 3
|
2月前
|
存储 关系型数据库 MySQL
【Java面试题汇总】MySQL数据库篇(2023版)
聚簇索引和非聚簇索引、索引的底层数据结构、B树和B+树、MySQL为什么不用红黑树而用B+树、数据库引擎有哪些、InnoDB的MVCC、乐观锁和悲观锁、ACID、事务隔离级别、MySQL主从同步、MySQL调优
【Java面试题汇总】MySQL数据库篇(2023版)
|
1月前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
133 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
1月前
|
SQL Java 数据库连接
如何在 Java 脚本中有效地使用 JDBC
如何在 Java 脚本中有效地使用 JDBC
16 0