【JAVAEE】JAVA数据库连接(JDBC)

news2024/12/29 14:43:07

1.什么是JDBC?

Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们通常说的JDBC是面向关系型数据库的。

简而言之,JDBC就是JDK提供的关于数据库操作的一套接口规范,不同数据库厂商来负责实现这个接口,完成指定的操作。

用程序和数据建立连接,分为三步骤

1.连接数据库

2.执行SQL语句

3.把查询到的结果集转换成JAVA对象

2.对于MySQL的JDBC编程的前期准备工作

知识拓展:

JAR文件(Java归档,英语:Java Archive)是一种软件包文件格式,通常用于聚合大量的Java类文件、相关的元数据和资源(文本、图片等)文件到一个文件,以便开发Java平台应用软件或库。

maven依赖是指项目对jar包的依赖。如果我们想要在工程中引入某个jar 包,只需要在pom.xml 中引入其jar 包的坐标即可。Maven 通过groupIdartifactIdversion三个向量来定位Maven 仓库其jar 包所在的位置,并把对应的jar 包引入到工程中来。

引入MySQL依赖:

打开下面这个网址:

https://mvnrepository.com/?__cf_chl_rt_tk=v38fZ3ofJLemjUxGfqXh71bR1gGKq7XXtFRXpsNsTSU-1682151712-0-gaNycGzNCuU

搜素MySQL

选择框选的这个选项。打开之后有很多版本,这里选择的是5.1.49版本。

 点击5.1.49版本。就找到了这个依赖,复制到pom.xml中

 添加完后手动点一下重新加载pom

工程栏里出现如下图内容时,表示导入成功。

3.建立连接

建立连接的五大步骤:

1加载(注册)数据库

2.连接数据库

3 执行SQL语句

4 处理结果集

5 关闭数据库,释放资源

代码实现连接:

1.连接数据库

    //先定义一个数据源对象
    private static DataSource dataSource=null;
    //连接数据库的用户名
    private static final String USER="root";
    //数据库的密码
    private static final String PASSWORD="111111";
    //数据库连接字符串
    private static final String URL="jdbc:mysql://127.0.0.1:3306/example?characterEncoding=utf-8&useSSL=false";

数据库连接字符串的释义如上图所示。

2.执行SQL语句

示例:根据学号查询学生信息

            // 1. 通过数据源获取一个数据库连接
            connection = dataSource.getConnection();
            // 接收用户输入的值
            System.out.println("请输入学号->");
            Scanner scanner = new Scanner(System.in);
            String sn = scanner.next();
            // 2. 定义SQL语句
            //String sql = "select * from student where sn = '" + sn +"'";
            String sql = "select * from student where sn = ?";
            System.out.println("sql-->" + sql);
            // 3. 获取statement对象
            //statement = connection.createStatement();
            // 获取一个预处理对象
            statement = connection.prepareStatement(sql);
            // 处理占位符的值
            statement.setString(1, sn);
            // 4. 执行SQL
            resultSet = statement.executeQuery();
           

3.把查询到的结果转换成Java对象

            if (resultSet.next()) {
                // 创建表示结果的JAVA对象
                Student student = new Student();
                // 依次读取结果集中的数据并赋值给JAVA对象
                student.setId(resultSet.getInt(1));
                student.setSn(resultSet.getString(2));
                student.setName(resultSet.getString(3));
                student.setMail(resultSet.getString(4));
                student.setClassesId(resultSet.getInt(5));
                // 打印结果
                System.out.println(student);
            }

4.释放资源

            // 依次关闭资源
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

完整代码

package com.bitejiuyeke;

import com.bitejiuyeke.model.Student;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.*;
import java.util.Scanner;

/**
 * @Author 比特就业课
 * @Date 2023-04-22
 */
public class Demo01_Connection {
    // 先定义一个数据源对象
    private static DataSource dataSource = null;
    // 数据库的用户名
    private static final String USER = "root";
    // 数据库的密码
    private static final String PASSWORD = "111111";
    // 数据库连接字符串
    private static final String URL = "jdbc:mysql://127.0.0.1:3306/example?characterEncoding=utf-8&useSSL=false";


    public static void main(String[] args) {

        // 1. 初化始数据源
        MysqlDataSource myDataSource = new MysqlDataSource();
        // 2. 设置连接的参数
        myDataSource.setURL(URL);
        myDataSource.setUser(USER);
        myDataSource.setPassword(PASSWORD);
        // 3. 把构建好的Mysql数据源赋值给JDBC中的datasource
        dataSource = myDataSource;

        Connection connection = null;
        // 预处理对象
        PreparedStatement statement = null;
        ResultSet resultSet = null;


        try {
            // 1. 通过数据源获取一个数据库连接
            connection = dataSource.getConnection();
            // 接收用户输入的值
            System.out.println("请输入学号->");
            Scanner scanner = new Scanner(System.in);
            String sn = scanner.next();
            // 2. 定义SQL语句
            //String sql = "select * from student where sn = '" + sn +"'";
            String sql = "select * from student where sn = ?";
            System.out.println("sql-->" + sql);
            // 3. 获取statement对象
            //statement = connection.createStatement();
            // 获取一个预处理对象
            statement = connection.prepareStatement(sql);
            // 处理占位符的值
            statement.setString(1, sn);
            // 4. 执行SQL
            resultSet = statement.executeQuery();
            // 5. 解析结果集,resultSet.next()表示结果集中是否有记录
            if (resultSet.next()) {
                // 创建表示结果的JAVA对象
                Student student = new Student();
                // 依次读取结果集中的数据并赋值给JAVA对象
                student.setId(resultSet.getInt(1));
                student.setSn(resultSet.getString(2));
                student.setName(resultSet.getString(3));
                student.setMail(resultSet.getString(4));
                student.setClassesId(resultSet.getInt(5));
                // 打印结果
                System.out.println(student);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 依次关闭资源
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

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

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

相关文章

[优雅的面试]MySQL与Redis双写一致性方案

前言 由于缓存的高并发和高性能已经在各种项目中被广泛使用,在读取缓存这方面基本都是一致的,大概都是按照下图的流程进行操作: 但是在更新缓存方面,是更新完数据库再更新缓存还是直接删除缓存呢?又或者是先删除缓存再…

TypeError: Object of type ‘Decimal‘ is not JSON serializable

错误 TypeError: Object of type ‘Decimal’ is not JSON serializable 场景 该错误是在Python3中使用Flask的报错,之前代码是运行正常的,时过几年后再次安装部署,确出现问题。 分析 经过分析发现依旧是版本依赖导致的更新问题。最近在…

JS手写实现Promise.race

Promise.race() 是一个常见的 JavaScript Promise 方法,它接受一个 Promise 数组作为参数,并返回一个新的 Promise 对象。这个新的 Promise 对象在传入的 Promise 数组中,任意一个 Promise 对象状态变为 fulfilled 或者 rejected,…

57.网页设计图标实战

首先我们需要找一个图标库,本次演示采用的是heroicon ● 之后我们根据需求搜索与之想匹配的图标并复制svg代码 ● 之后将我们的代码复制到我们想要放置图标的地方 ● 当然我们需要使用CSS来修饰一下 .features-icon {stroke: #087f5b;width: 32px;height: 3…

Python——Pyqt5的数据可视化小工具(完整代码)

前言 作业要求:【都已经打包放网上了,有缘人需要就自取】 一份报告书(在全球变暖背景下碳中和对各国的二氧化碳排放量的影响项目报告书) 一份代码 作业包:python数据可视化小工具.zip - 蓝奏云 大一的时候,…

Java 整合常用docker Api

整合环境: 与docker 版本差异不大,基本都可以 API version: 1.26开放docker api ,两种方式 /etc/sysconfig/docker ,最后一行添加;开放端口:2375 -H tcp://0.0.0.0:2375systemctl status docker 查询 d…

vsftpd.conf参数配置

文章目录 初始vsftdp.conf翻译后需修改参数write_enableYES(启用任何形式的FTP写入命令)userlist_file/etc/vsftpd.user_list、userlist_enableYES、userlist_denyNOlocal_umask022(放开权限)chroot_local_userYES(限定…

每日学术速递4.29

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.LG 1.A Cookbook of Self-Supervised Learning 标题:自监督学习食谱 作者:Randall Balestriero, Mark Ibrahim, Vlad Sobal, Ari Morcos, Shashank Shekhar, Tom…

学知识变现,看完这些就够了

点击查看【18本知识变现电子书】 100个实用知识点 60万字知识变现精华 资深知识变现教练海哥扛鼎之作 2000多位学员实战经验干货总结 从理论到实践,从思维到实操 教你彻底学透如何知识变财富 .......... 全网最全知识变现知识付费电子教程 资深知识变现教练海…

Linux线程相关函数:线程的创建、属性、回收、退出、取消

1. 线程号 进程号在系统中唯一&#xff0c;但线程号只在其所属进程环境中有效。 &#xff08;1&#xff09;pthread_self函数 #include<pthread.h>pthread_t pthread_self(void); /* 功能&#xff1a;获取线程号 返回值&#xff1a;调用此函数线程的ID */ pthread_se…

【Unity-UGUI控件全面解析】| Panel 容器组件详解

🎬【Unity-UGUI控件全面解析】| Panel 容器组件详解一、组件介绍二、组件属性面板三、代码操作组件💯总结🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游…

2007-2020年上市公司数字经济化指标含原始数据和计算代码(do文档)

2007-2020年上市公司数字经济化指标含原始数据和计算代码&#xff08;do文档&#xff09; 1、时间&#xff1a;2007-2020 2、范围&#xff1a;A股上市公司剔除jin rong行业 3、数据说明&#xff1a;包含计算过程和原始数据 4、参考文献&#xff1a;祁怀锦,数字经济对公司治…

利用C#实现动态替换桌面快捷方式对应的应用程序

公司有一个特殊的业务可能会用到这个&#xff0c;至于什么业务就不展开了。本文的内容作为备用方案。 实现思路&#xff1a; 1 获取当前exe程序运行的全路径 2 获取桌面的所有快捷方式 3 遍历快捷方式&#xff0c;获取快捷键方式对应程序的运行路径&#xff0c;并与当前…

【开发工具】 今天我要教会你安装Office 2021 RTM 专业增强零售版 你开不开心

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

统一请求封装和pytest入门使用

统一请求封装解决的问题 解决多个py文件共享session的问题 统计请求的数据 统一异常处理 统一日志监控 封装 在项目文件中创建一个common文件夹&#xff0c; 用来进行统一接口封装 import requestsclass RequestUtil:# 调用底层的requests.session()方法进行封装sess r…

超详细的R语言svykm函数绘制复杂抽样设计数据cox回归生存曲线(Kaplan-Meier)

我们在既往的文章《R语言绘制复杂抽样设计数据cox回归生存曲线(Kaplan-Meier)》中介绍了怎么使用jskm包的svykm函数绘制复杂抽样设计数据cox回归生存曲线(Kaplan-Meier)&#xff0c;但是有粉丝觉得讲得不够详细&#xff0c;希望讲得详细一点&#xff0c;今天我们继续来介绍一下…

flinkCDC在Delta.io中是什么 是CDF

类似flink CDC databricks 官方文档: How to Simplify CDC With Delta Lakes Change Data Feed - The Databricks Blog delta.io 官方文档: Change data feed — Delta Lake Documentation 概述 更改数据馈送 (CDF) 功能允许 Delta 表跟踪 Delta 表版本之间的行级更改 在…

vue+element-plus角色权限管理分配

这里的图片是截图这个老师的项目 在src/uitls/permission.js加入以下内容 本段代码讲解: 参数一:后台传来的路由 参数二:前端所有的路由 先遍历前端所有路由,在里面继续遍历后台路由,通过二者某一个关键字的是否相同判断用户是否有权限(这里老师使用的是title关键字),关键字相…

21安徽练习

题目分为4部分 APK 集群 流量 exe 我尽量都做一下&#xff0c;逆向不是很会&#xff0c;就当提升自己。 [填空题]请获取app安装包的SHA256校验值&#xff08;格式&#xff1a;不区分大小写&#xff09;&#xff08;10分&#xff09; e15095d49efdccb0ca9b2ee125e4d8136cac5…

树莓派Pico W无线开发板MQTT协议通信MicroPython编程实践

本博文介绍采用ThonnyMicroPython和umqtt.simple库MQTTClient类的对象方法编制树莓派Pico W无线开发板MQTT协议通信程序&#xff0c;将Pico W无线开发板、电脑或Android手机无线连接到远程MQTT服务器&#xff0c;给出采用电脑MQTTX应用程序及手机Android MQTT客户端App远程控制…