【通关MySQL】Java的JDBC编程

news2025/1/10 3:14:17

✨哈喽,进来的小伙伴们,你们好耶!✨

🛰️🛰️系列专栏:【通关MySQL】

✈️✈️本篇内容:Java的JDBC编程。

🚀🚀代码存放仓库gitee:MySQL码云存放!

⛵⛵作者简介:一名双非本科大三在读的科班Java编程小白,道阻且长,你我同行!

目录

1. 数据库编程的必备条件

2、Java的数据库编程—JDBC

一、概念

二、jdbc优点

3、JDBC使用

 接下来我们就要在项目中导入驱动包。

 4、JDBC开发实例

1、首先我们在src下面新建一个类JdbcTinsertDemo。

 2、首先创建数据源 ,描述了数据库在哪。

设置数据库所在的位置,三条固定写法。

3、和数据库建立网络连接

4、构造一个SQL语句,来完成插入操作

5、执行SQL语句 控制客户端给服务器发送请求

6、断开和数据库的连接,并且释放必要的资源

7、动态拼接写法

代码演示:


在正文开始之前我们首先来了解一下什么是数据库编程的必备条件?

1. 数据库编程的必备条件

编程语言,如 Java C C++ Python 等 。
数据库,如 Oracle MySQL SQL Server 等 。
数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如: MySQL
供了 Java 的驱动包 mysql-connector-java ,需要基于 Java 操作 MySQL 即需要该驱动包。同样的,
要基于 Java 操作 Oracle 数据库则需要 Oracle 的数据库驱动包 ojdbc

2、Java的数据库编程—JDBC

一、概念

JDBC是数据库连接是一种用于执行SQL语句的java API,就类似于一个网址,它是java中的数据库连接规范,这个API里面由java.sql.*,javax.sql.*包中的一些类和接口组成,这些都可以为实现sql做基础,这些都为java开发人员操作数据库提供了一个标准的API,可以为多重关系数据库提供同意的访问。

二、jdbc优点

直接底层操作,提供了简单,便捷的访问数据库的方法,跨平台性较强,灵活比较强,可以执行很复杂的SQL语句,说白了就是JDBC要通过Java代码操作数据库,那么如何操作呢?

3、JDBC使用

1、准备数据库驱动包
第一步首先我们需要去MySQL的中央仓库,下载我们的jar包。
 MySQL中央仓库地址icon-default.png?t=M85Bhttps://mvnrepository.com/
step1:复制这个网址等待跳转(根据电脑型号不同进入的时间有长有短),进入到这个界面,在搜索框里输入MySQL,在出来的结果选择红色框框里面这个点进去。

 step2:进入之后选择我们电脑对应的MySQL版本,比如博主使用的就是MySQL5.0系列的,那么选择5开头的任意一个都可以,点击进去。

 step3:进入之后找到这个jar包,注意点击红色箭头这个,点击之后就开始下载了。

 接下来我们就要在项目中导入驱动包。

step1:新建一个项目jdbc,在这个项目下新建一个目录lib。

 step2:复制我们刚才下载的jar包,直接右键复制即可,不用安装,复制到我们的lib目录下。

 step3:接着我们右键lib,找到as library,点击。

 4、JDBC开发实例

一般的jdbc开发分为五大具体步骤,下面博主将一步一步演示。

1、首先我们在src下面新建一个类JdbcTinsertDemo。

 2、首先创建数据源 ,描述了数据库在哪。

 DataSource dataSource = new MysqlDataSource();

 DataSource相当于一个interface ,不能实例化对象,所以我们实现类MysqlDataSource。

设置数据库所在的位置,三条固定写法。

        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test_demo3?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");//设置用户名 固定是root 也可以配置别的
        ((MysqlDataSource)dataSource).setPassword("数据库密码");//设置密码 登录数据库密码

注解

jdbc:mysql 表示这个url是给jdbc中的mysql来使用的。

127.0.0.1 表示IP地址-> 这里称为环回IP 表示主机自己(相当于Java中的this)。

3306 代表端口号, 一般默认是3306 这么多程序你要把网络数据交给哪个程序呢?

test_demo3 表示要访问的数据库名。

characterEncoding=utf8 访问的字符编码方式。

useSSL=false useSSL表示加密,此处没必要加密 手动关闭。

url:唯一资源地址符,描述了互联网上唯一的一个资源的位置(也就是咋们生活中的网址)。

3、和数据库建立网络连接

(写的jdbc代码本质上是实现一个MySQL客户端,要通过网络和服务器进行通信)

Connection connection = dataSource.getConnection();

注意是 Connection java.sql 这个连接别搞错了。

Connectrion 是网络通信中的核心概念,叫做连接,即找个地方记录下,哪个客户端和哪个服务器,即将要进行通信了。

4、构造一个SQL语句,来完成插入操作

那么在这一步操作之前我们需要打开我们的数据库,刚才导入的数据库名一定是我这里将要使用的数据库,那么我们以student表为例,这里我们新建一个student表。

假如我们要往student表中插入一条数据。

String sq1 ="insert into student values(1,'张三')";//描述了sql是啥样的

那么真正执行SQL语句用到PreparedStatement这个类库,后面的括号里面传入我们的SQL语句。

PreparedStatement statement = connection.prepareStatement(sq1);//真正的执行语句

5、执行SQL语句 控制客户端给服务器发送请求

那么这里面我们会用到executeUpdate这个函数,它的返回值是一个整数,我们定义一个ret用来接收。

int ret = statement.executeUpdate();
System.out.println("ret = "+ret);

注意这里 针对增 删 改: 使用executeUpdate   针对查:使用executeQuery。

6、断开和数据库的连接,并且释放必要的资源

注意这里资源释放的顺序和创建是相反的。

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

结果演示:

我们先在idea上运行看一下,成功插入了一条语句。

 在MySQL客户端查询插入成功了没有。

 那么,这样写SQL语句是不是有点呆板,我们能否通过自己输入对应的学号姓名来控制我们想插入的数据呢?答案是:可以的!

7、动态拼接写法

那么这里步骤没有变化,唯一变化的就是我们需要添加输入语句,还有sql的写法:

输入语句:

        Scanner sc=  new Scanner(System.in);
        System.out.println("请输入学号:");
        int id = sc.nextInt();
        System.out.println("请输入姓名:");
        String name = sc.next();

拼接写法SQL:

 String sq1 ="insert into student values("+id+",'"+name+"')";
 PreparedStatement statement = connection.prepareStatement(sq1);

那么这种字符串拼接的方式 是不是太丑了呢?如何改进?使用下面的动态拼接,注意写法我们通过?的形式这里我们称之为'占位符',实现我们的构造。

String sq1 ="insert into student values(?,?)";//动态拼接
PreparedStatement statement = connection.prepareStatement(sq1);
        statement.setInt(1,id);//按照下标依次替换 注意下标从1开始计算
        statement.setString(2,name);
        System.out.println("sql "+ statement);

结果演示:

MySQL查询一下是否插入成功:

 OK,那么针对JDBC编程的'增'我们这里已经全部演示完毕,那么删和改就是一样的,只需要修改sql语句即可,接下来我们看看查是如何实现的。

代码演示:

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class jdbcSelectdemo {
    public static void main(String[] args) throws SQLException {
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test_demo3?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("020719");

        Connection connection = (Connection) dataSource.getConnection();

        String sq1 = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sq1);

        //写代码则是让java程序快速地,重复的多次执行一些相对固定的SQL
        //实际开发过程中,操作数据库,99.99%都是通过代码来完成自动的操作数据库
        
        //结果集合  类似于迭代器遍历
        ResultSet resultSet = statement.executeQuery();
        while (resultSet.next()){//next相当于移动一下光标,光标指向下一行
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println(id+":"+name);
        }

        resultSet.close();
        statement.close();
        connection.close();
    }
}

代码大致和增删改差不多,唯一的区别就是SQL执行语句不同还有就是用到一个 ResultSet结果集,Resultset主要用于接收JDBC查询语句返回的数据集对象,ResultSet对象保持一个光标指向其当前的数据行。 最初,光标位于第一行之前。 next方法将光标移动到下一行,并且由于在ResultSet对象中没有更多行时返回false ,因此可以在while循环中使用循环来遍历结果集。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21693.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]java毕业设计-室内田径馆预约管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

轻量应用服务器和云服务器CVM有什么区别?

腾讯云新推出的轻量应用服务器Lighthouse和原来的CVM云服务器有什么区别?轻量应用服务器Lighthouse是一种易于使用和管理、适合承载轻量级业务负载的云服务器,主要用于Web网站应用,轻量服务器使用及后期运维更加简单方便;云服务器…

RNA-seq 保姆教程:差异表达分析(二)

介绍 RNA-seq 目前是测量细胞反应的最突出的方法之一。RNA-seq 不仅能够分析样本之间基因表达的差异,还可以发现新的亚型并分析 SNP 变异。本教程[1]将涵盖处理和分析差异基因表达数据的基本工作流程,旨在提供设置环境和运行比对工具的通用方法。由于完整…

计算机网络——数据链路层

数据链路层概述 数据链路层在网络体系结构中所处的地位 主机H1给主机H2发送数据时,需要通过路由器R1通过广域网链路转发到路由器R2,R2转发到主机H2。路由器转发只用到网络层及以下各层。【以上涉及数据包按网络体系结果逐层封装解封】 为了简单起见&am…

DevC++的调试方法

目录 Dev C调试程序 Dev C调试注意事项对于修改后的程序,调试程序之前一定要先编译程序。 要想学会编程,第一步就是要学会调试(想我这种码龄一年的人还不会调试,丢死人). 今天,为了让你们的脸丢少点,特意写了这篇博文,给予需要帮助的人. 所谓调试程序&#xff0…

[附源码]计算机毕业设计JAVA基于JSP健身房管理系统

[附源码]计算机毕业设计JAVA基于JSP健身房管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM m…

Python实现KNN(K近邻)分类模型(KNeighborsClassifier算法)并应用网格搜索算法寻找最优参数值以及数据标准化均衡化项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 股票市场是已经发行的股票转让、买卖和流通的场所,包括交易所市场和场外交易市场两大类别。…

【C++】C++11部分特性

目录 一、初始化列表 二、变量类型的推导 1、auto 2、decltype 三、右值引用 1、左值与右值 2、关于左值引用、右值引用的问题 1、左值引用可以引用右值吗? 2、右值引用可以引用左值吗? 3、右值引用之后的问题 3、移动构造、移动拷贝 1、引用…

软件测试质量保证与测试

软件测试质量保证与测试 第一章 软件测试概述 1.1 软件测试背景 随着计算机技术的迅速发展和越来越广泛深入地应用于国民经济与社会生活的各个方面,软件系统的规模和复杂性与日俱增,软件的生产成本和软件中存在的缺陷与故障造成的各类损失也大大增加&…

【应用】PostgreSQL 流复制配置

PostgreSQL 流复制配置centos7 安装 postgresql时序库 timescaleDB 的安装postgresql-14 主从流复制主库配置从库配置同步流复制与异步流复制异步流复制转换为同步流复制流复制的相关参数主从流复制原理PostgreSQL WAL 日志主从流复制架构主从流复制的过程基于 docker swarm 的…

CMSC5713-IT项目管理之七、质量管理Quality Management

文章目录7.1 Quality7.2. Software Quality7.2.1. ISO/IEC 25010 Software Qualities7.2.2. Internal versus External qualities7.2.3. Software Metrics7.3. Quality Specification7.4. Project Quality Management7.4.1. Quality Planning7.4.2. Quality Assurance7.4.2.1. …

vscode 阅读 linux kernel 源码

前言 虽然身边的朋友大都在使用 source insight,但我却更喜欢 vscode。 不过 vscode 在代码搜索上确实不如 source insight,这点上我也是吃过亏的。阅读大型代码时,常常搜索不到关键代码,导致对代码的理解不充分。 当使用 vscode…

Java-反射

前言 动态语言与静态语言 动态语言 是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构主要动态语言有:Object…

【开源电路】STM32F401RCT6开发板

【开源电路】STM32F401RCT6开发板🌷实物PCBA: 🌼优化后的3D效果图 📚STM32F401RCT6开发板简介 📑主控是LQFP-64封装的STM32F401RCT6芯片,Micro USB接口供电,功能引脚全部引出,一个…

金融强化学习与finRL开发包

原创文章第110篇,专注“个人成长与财富自由、世界运作的逻辑, AI量化投资”。 01 一些感受 时代的一粒沙,落在每个人身上就是一座山。 这三年,对于这句话,相信很多人更能感同身受。 看历史风云变幻,轻轻…

力扣(LeetCode)21. 合并两个有序链表(C++)

迭代 同时遍历两个链表 , 当前结点值较小的结点插入新的链表尾部。直到有一个链表为空 , 我们将另一个非空链表插入新的链表尾部。 提示 : 使用哑结点,避免特判头结点。二路归并思想应用于链表~ class Solution { public:ListNode* mergeT…

gRPC gateway - Http Restful API gRPC 协议转换

gRPC gateway - http restful gRPC gateway 介绍 gRPC-Gateway 是protocalBufffer的编译插件,根据protobuf的服务定义自动生成反向代理服务器,并将Restful Http API 转化为 gRPC通信协议。反向代理服务器根据 google.api.http 注解生成。 gRPC底层是使用HTTP2 协…

mybatis # $

总结: # 你传入的变量类型会被保留 $ 本质就是拼接 不会考虑拼串的 $ 情况下 参数是整数 跟参数是字符串 字符串情况: 缺少’’ 相当于字符串拼接 ”select * from t_user where username “ “张三” ”select * from t_user where username 张三&…

java 容器

java 容器 数组 数组的扩容问题 ArrayList 的默认初始化容量为0,首次添加元素时,创建容量为(10 || 添加集合大小) ,以后每次扩容的话,为当前容量的1.5倍 public ArrayList() {/*初始化容量大小为0private static final Object…

CEAC之《计算机应用助理工程师》2

👨‍💻个人主页:微微的猪食小窝 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 微微的猪食小窝 原创 收录于专栏 【CEAC证书】 1组合框的常用属性有 ____________ 。 A、Index B、Text C、Caption D、ListCountA,B,D2在…