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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 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数据库)大致就讲完了,那么有错误的地方,请各位老铁及时评论~~

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
15天前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
84 26
|
19天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
1月前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
31 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查询及结果处理,最后关闭相关资源。
177 6
|
2月前
|
Java 关系型数据库 MySQL
mysql5.7 jdbc驱动
遵循上述步骤,即可在Java项目中高效地集成MySQL 5.7 JDBC驱动,实现数据库的访问与管理。
474 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
106 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
51 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
|
2天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
10 3

推荐镜像

更多