Java的数据库编程-----JDBC

目录

一.JDBC概念&使用条件:

二.mysql-connector驱动包的下载与导入:

三.JDBC编程:

使用JDBC编程的主要五个步骤:

完整流程1(更新update):

完整流程2(查询query): 


一.JDBC概念&使用条件:

  • JDBC基本概念:

🧐JDBC:即JAVA Database Connectivity,Java数据库连接是一种用于执行SQL语句的JavaAPI,它是Java中的数据库连接规范。这个API由java.sql.*,javax.sql.*包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。

  •  JDBC使用条件:

1).编程语言,如Java,C、C++、Python等

2).数据库,如Oracle,MySQL,SQL Server等(本文主要演示MySQL数据库)

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

  • mysql-connector驱动包:

由于每个数据库,本身已经有一套API了,比如MySQL,本身的API,就是C语言的API,这时就需要我们把原生的C的API转换成为兼容JDBC的Java的API。MySQL官方提供了一个mysql-connector-->这个驱动包就可以帮助我们完成上述操作.mysql-connector不是mysql自带的,也不是java自带的,需要通过第三方途径,把这个驱动包下载下来并导入到自己的项目中(第三方库),主要由三个途径进行下载:

  1. 去Oracle官网进行下载
  2. 去github
  3. 去maven中央仓库(这种方法最为简便,下面例子以这个为主)

maven中央仓库网址:Maven Repository: Search/Browse/Explore (mvnrepository.com)

JDBC优势:

  • Java语言访问数据库操作完全面向抽象接口编程
  • 开发数据库应用不用限定在特定数据库厂商的API
  • 程序的可移植性大大增强 

二.mysql-connector驱动包的下载与导入:

  • 进入上述网址后,直接搜索mysql就行了,你会看到一下两个主要版本:

  • 进入后选择适合自己的版本进行下载:

  •  接下来我们在已经创建号的项目中,选中项目,右击鼠标新建一个目录,名字随便取,不要包含中文/特殊字符~

  • 复制我们刚才下载好的.jar文件,将其粘贴到刚才创建的lib目录中 :

  • 右击刚才的lib目录,add as library(意在告诉IDEA,这个lib目录是一个"库"目录): 

  • 直接点🆗就行了: 

  • 此时你会看到lib目录下多了以下内容,就说明驱动包导入成功了:

 

 完成上述操作后,我们就可以进行JDBC编程了

三.JDBC编程:

使用JDBC编程的主要五个步骤:

  • 1. 创建数据源对象:
DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/itcast?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");//用户名
        ((MysqlDataSource) dataSource).setPassword("2222");//密码

 url参数说明:

  • 2. 和数据库服务器建立网络连接.:
Connection connection = dataSource.getConnection();
  •  3. 构造 SQL 语句:
 String sql = "delete from student where id = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, id);

  • 4. 把 SQL 发送到服务器上进行执行: 
 int n = statement.executeUpdate();
        System.out.println(n);//返回值就表示, 这个 sql , 影响到 几行
  •  5. 释放上述的资源:
 statement.close();
 connection.close();

Statement对象 :

Statement对象主要是将SQL语句发送到数据库中。JDBC API中主要提供了三种Statement对象:

 主要两种执行SQL的方法:

  •  executeQuery() 方法执行后返回单个结果集的,通常用于select语句
  • executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于update、insert、delete 语句

ResultSet对象:

  • ResultSet对象它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法提供 了对这些行中数据的访问。
  • ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当 前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next() 方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。

完整流程1(更新update):


import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class TestJDBC1 {
    public static void main(String[] args) throws SQLException {
        // 0. 让用户输入 id 和 name
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入id: ");
        int id = scanner.nextInt();
//        System.out.println("请输入name: ");
//        String name = scanner.next();

        // 1. 创建数据源对象
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/itcast?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("2222");

        // 2. 和数据库服务器建立网络连接.
        Connection connection = dataSource.getConnection();
        // System.out.println(connection);

        // 3. 构造 SQL 语句
        //    PreparedStatement 基于这个类, 构造 SQL
        // String sql = "insert into student values(" + id + ", '" + name + "')";
        // String sql = "insert into student values (?, ?)";
        String sql = "delete from student where id = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, id);
        // statement.setString(2, name);

        // 4. 把 SQL 发送到服务器上进行执行
        //    返回值就表示, 这个 sql , 影响到 几行
        int n = statement.executeUpdate();
        System.out.println(n);

        // 5. 释放上述的资源
        statement.close();
        connection.close();
    }
}

注意: 

完整流程2(查询query): 


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

public class TestJDBC2 {
    public static void main(String[] args) throws SQLException {
        // 1. 创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/itcast?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("2222");

        // 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()) {
            // 循环里针对一行进行处理,打印列表和mysql中查询的结果一致
            System.out.println(resultSet.getInt("id"));
            System.out.println(resultSet.getString("name"));
        }

        // 6. 关闭对应的资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

 结语: 写博客不仅仅是为了分享学习经历,同时这也有利于我巩固知识点,总结该知识点,由于作者水平有限,对文章有任何问题的还请指出,接受大家的批评,让我改进。同时也希望读者们不吝啬你们的点赞+收藏+关注,你们的鼓励是我创作的最大动力!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FS212E 系列PD协议

PD快充协议芯片FS212EL、FS212EH可以智能的识别插入的手机类型,选择最为合适的协议应对手机快充需要。兼容多类USB Type-C协议,包括TypeC协议、TypeC PD2.0、TypeC PD3.0、TypeC PD3.2等协议。集成OPTO输出,通过电阻直驱反馈光耦。FS212E 的调…

【STL】C++ queue队列(包含优先级队列) 基本使用

目录 一 queue 1 常见构造 1 空容器构造函数 2. 使用指定容器构造 3 拷贝构造函数 2 empty 3 size 4 front && back 5 push && pop 6 emplace 7 swap 二 优先级队列( priority_queue) 1 常见构造 2 其他操作 3 大堆和小堆 1. 大小堆切换 2 自…

961题库 北航计算机 MIPS基础选择题 附答案 选择题形式

有题目和答案,没有解析,不懂的题问大模型即可,无偿分享。 第1组 习题 MIPS处理器五级流水线中,涉及DRAM的是 A. 取指阶段 B. 译码阶段 C. 执行阶段 D. 访存阶段 MIPS处理器五级流水线中,R型指令保存结果的阶段是 A.…

Mixly UDP局域网收发数据

一、开发环境 软件:Mixly 2.0在线版 硬件:ESP32-C3(立创实战派) 固件:ESP32C3 Generic(UART) 测试工具:NetAssist V5.0.1 二、实现功能 ESP32作为wifi sta连接到路由器,连接成功之后将路由器…

基于Django的博客系统之增加类别导航栏(六)

上一篇:基于Django的博客系统之用HayStack连接elasticsearch增加搜索功能(五) 下一篇: 功能概述 博客类型导航栏。 需求详细描述 1. 博客类型导航栏 描述: 在博客首页添加类型导航栏,用户可以通过导航…

属性(property)

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 1 创建用于计算的属性 在Python中,可以通过property(装饰器)将一个方法转换为属性,从而实现用于计算…

vue3-调用API实操-调用开源头像接口

文档部分 这边使用是开源的API 请求地址: :https://api.uomg.com/api/rand.avatar 返回格式 : json/images 请求方式: get/post 请求实例: https://api.uomg.com/api/rand.avatar?sort男&formatjson 请求参数 请求参数说明 名称必填类型说明sort否strin…

探索安全之道 | 企业漏洞管理:从理念到行动

如今,网络安全已经成为了企业管理中不可或缺的一部分,而漏洞管理则是网络安全的重中之重。那么企业应该如何做好漏洞管理呢?不妨从业界标准到企业实践来一探究竟!通过对业界标准的深入了解,企业可以建立起完善的漏洞管…

算法每日一题(python,2024.05.28) day.10

题目来源(力扣. - 力扣(LeetCode),中等) 解题思路: 辅助数组 找规律,设旋转前某点matrix[i][j],则旋转后改点变为matrix[j][n-1-i](n为len(matr…

LLVM后端__llc中值定义信息的查询方法示例

关于LiveIntervals pass中相关数据结构的含义,在寄存器分配前置分析(5.1) - LiveInterval这篇博客中已经做了清晰的讲解,此处不再赘述,本文主要讲解值定义信息VNInfo的使用方法和注意事项。 1. VNInfo含义 在LLVM的源码中,VNInf…

!力扣 108. 将有序数组转换为二叉搜索树

给你一个整数数组 nums ,其中元素已经按升序排列,请你将其转换为一棵 平衡二叉搜索树。 示例 1: 输入:nums [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案…

Java——异常

1.什么是异常 将程序执行过程中发生的不正常行为称为异常。 常见的异常有:算数异常,空指针异常,数组越界异常 每一种异常都有对应的类对齐描述 为了对每一种异常进行管理,Java内部实现了一个对异常的体系结构 1. Throwable&#x…

HNCTF2022 REVERSE

[HNCTF 2022 WEEK2]esy_flower 简单花指令 Nop掉 然后整段u c p然后就反汇编 可能反编译的不太对&#xff0c;&#xff0c;看了别人的wp就是ida反编译的有问题 #include<stdio.h> #include<string.h> int main() {int i,j;char ch[]"c~scvdzKCEoDEZ[^roDICU…

Unity协程详解

什么是协程 协程&#xff0c;即Coroutine&#xff08;协同程序&#xff09;&#xff0c;就是开启一段和主程序异步执行的逻辑处理&#xff0c;什么是异步执行&#xff0c;异步执行是指程序的执行并不是按照从上往下执行。如果我们学过c语言&#xff0c;我们应该知道&#xff0…

node-sass和sass-loader安装Error经验

一、问题 当前笔记本环境版本&#xff1a;node-v16.15.1&#xff1b;npm-8.11.0&#xff0c;在面对五年前vue项目的依赖sass-loader8.0.2&#xff0c;node-sass4.14.1的情况下&#xff0c;怎么参考大神们的安装教程&#xff0c;始终存在Error&#xff0c;经过坚持不懈的努力&a…

list的简单模拟实现

文章目录 目录 文章目录 前言 一、使用list时的注意事项 1.list不支持std库中的sort排序 2.去重操作 3.splice拼接 二、list的接口实现 1.源码中的节点 2.源码中的构造函数 3.哨兵位头节点 4.尾插和头插 5.迭代器* 5.1 迭代器中的operator和-- 5.2其他迭代器中的接口 5.3迭代器…

Nginx源码编译安装

Nginx NginxNginx的特点Nginx的使用场景Nginx 有哪些进程 使用源码编译安装Nginx准备工作安装依赖包编译安装Nginx检查、启动、重启、停止 nginx服务配置 Nginx 系统服务方法一&#xff1a;方法二&#xff1a; 访问Nginx页面 升级Nginx准备工作编译安装新版本Nginx验证 Nginx N…

顶底背离的终极猜想和运用

这几天圈内都在传底蓓离什么的。作为严肃的量化自媒体&#xff0c;我们就不跟着吃这波瓜了。不过&#xff0c;我一直很关注技术指标的顶背离和底背离&#xff0c;一直在追问它的成因如何&#xff0c;以及如何预测。 底蓓离把我目光再次吸引到这个领域来&#xff0c;于是突然有…

Kubernetes-使用集群CA证书给用户颁发客户端证书访问Api-Server

一、官网地址 证书和证书签名请求 | Kubernetes 二、Demo 一、创建测试文件夹 cd ~ mkdir add_k8s_user_demo cd add_k8s_user_demo 二、创建符合X509标准的证书 openssl genrsa -out myuser.key 2048 openssl req -new -key myuser.key -out myuser.csr -subj "/CNmy…

【30天精通Prometheus:一站式监控实战指南】第14天:jmx_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细

亲爱的读者们&#x1f44b;   欢迎加入【30天精通Prometheus】专栏&#xff01;&#x1f4da; 在这里&#xff0c;我们将探索Prometheus的强大功能&#xff0c;并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。&#x1f680;   Prometheus是云原生和DevOps的…