MySQL JDBC编程

MySQL JDBC编程

文章目录

  • MySQL JDBC编程
    • 1. 数据库编程的必备条件
    • 2. Java的数据库编程:JDBC
    • 3. JDBC工作原理
    • 4. JDBC使用
    • 5. JDBC常用接口和类
      • 5.1 JDBC API
      • 5.2 数据库连接Connection
      • 5.3 Statement对象
      • 5.4 ResultSet对象

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

  • 编程语言:如Java、C、C++、Python等

  • 数据库:如Oracle、MySQL、SQL Server等

  • 数据库驱动包:不同的数据库,为不同的编程语言提供了不同的数据库驱动包,如MySqL提供了Java的驱动包mysql-connector-java需要基于Java操作MySqL即需要获取该驱动包 [官网链接]

2. Java的数据库编程:JDBC

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

3. JDBC工作原理

JDBC为多种关系型数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。

JDBC访问数据库层次结构

在这里插入图片描述

JDBC优势

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

4. JDBC使用

操作步骤:

  1. 准备数据库驱动包,并添加到项目的依赖中
  2. 创建数据源
  3. 创建数据库连接Connection
  4. 创建操作命令Statement
  5. 使用操作命令来执行SQL
  6. 释放资源

具体步骤:

  • 配置驱动包

    在项目中创建文件夹lib:

    在这里插入图片描述

    将依赖包mysql-connection-java5.1.47.jar复制到lib中:

    在这里插入图片描述

    选择驱动包,点击Add as library,将jar包导入目录中

    在这里插入图片描述

    这样驱动包就导入成功了:

    在这里插入图片描述

  • 创建数据源,描述要操作的数据库在哪里

    import javax.sql.DataSource;DataSource dataSource = new MysqlDataSource(); 
    // 连接数据库的地址,MySQl默认端口号为3306
    ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/blog_test5?characterEncoding=utf8&useSSL=false"); 
    ((MysqlDataSource)dataSource).setUser("root"); // 用户名
    ((MysqlDataSource)dataSource).setPassword("123456");// 密码
    
  • 创建数据库连接

    Connection connection = dataSource.getConnection();
    

    这个过程中需要抛出异常,否则会报错:

    在这里插入图片描述

  • 创建操作命令Statement

    // 先构建SQL语句
    String sql ="insert into student values (101, '张三');";// 把String sql 转换为 语句对象
    PreparedStatement statement = connection.prepareStatement(sql);
    
  • 使用操作命令来执行SQL(把构造好的SQL发送给服务器执行)

    //把构造好的SQL发送给服务器去执行
    int n = statement.executeUpdate(); // 返回操作行数
    System.out.println("n = " + n);
    
  • 释放资源

    // 释放和创建的顺序是相反的
    statement.close();
    connection.close();
    

执行代码:

package demo1;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 Test1 {public static void main(String[] args) throws SQLException {// 1. 创建数据源,描述要操作的数据库在哪里DataSource dataSource = new MysqlDataSource();((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/blog_test5?characterEncoding=utf8&useSSL=false");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("123456");// 2. 连接数据库Connection connection = dataSource.getConnection();// 3. 先构建SQL语句String sql ="insert into student values (101, '张三');";// 把String sql 转换为 语句对象PreparedStatement statement = connection.prepareStatement(sql);// 4. 把构造好的SQL发送给服务器去执行int n = statement.executeUpdate();System.out.println("n = " + n);// 5. 释放资源(释放和创建的顺序是相反的)statement.close();connection.close();}
}

执行结果:

在这里插入图片描述
)

在这里插入图片描述

在这里插入图片描述

5. JDBC常用接口和类

5.1 JDBC API

在Java JDBC编程中对数据库的操作均使用JDK自带的API统一处理,通常与特定数据库的驱动类是完全解耦的。所以掌握Java JDBC API(位于java.sql包下),即可掌握Java数据库编程

5.2 数据库连接Connection

Connection接口实现类由数据库提供,获取Connection对象通常有两种方式:

  • 一种是通过DriverManager(驱动管理类)的静态方法获取:

    // 加载JDBC驱动程序
    class.forName("com.mysql.jdbc.Driver");// 创建数据库连接
    Connection connection = DriverManager.getConnection(url);
    
  • 一种是通过DataSource(数据源)对象获取。(实际应用中一般使用DataSource对象)

    DataSource dataSource = new MysqlDataSource();((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/blog_test5?	characterEncoding=utf8&useSSL=false");
    ((MysqlDataSource)dataSource).setUser("root");
    ((MysqlDataSource)dataSource).setPassword("123456");Connection connection = dataSource.getConnection();
    

以上两种方式的区别是:

  1. DriverManager类获取的Connection连接无法重复利用,每次使用完以后释放资源时,通过connection.close()都是关闭物理连接
  2. DataSource提供/连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接是可以复用的,每次使用完数据库连接,释放资源调用connection.close()都是将Connection连接对象回收

5.3 Statement对象

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

在这里插入图片描述

实际应用中最常用的是Prepared Statement对象:

在这里插入图片描述

主要的两种执行SQl的方法:

  • executeUpdate():返回值是一个整数,指示受影响的行数,通常用于update、insert、delete语句

    在构建SQL语句时,我们可以通过?(占位符)来进行变量替换

    // ? 为占位符,在statement构建后调用方法进行替换
    String sql = "insert into student values (?, ?)";Scanner scanner = new Scanner(System.in);
    System.out.println("输入学号:");
    int id = scanner.nextInt();
    scanner.nextLine();
    System.out.println("输入姓名:");
    String st_name = scanner.nextLine();// 把String sql 转换为 语句对象
    PreparedStatement statement = connection.prepareStatement(sql);
    statement.setInt(1, id); // 这里的数字1表示第一个?符号
    statement.setString(2, st_name); // 这里的数字2表示第二个?符号// 把构造好的SQL发送给服务器去执行
    int n = statement.executeUpdate();
    System.out.println("n = " + n);
    

    将构造好的SQL发送给服务器执行:

    在这里插入图片描述

    在这里插入图片描述

  • executeQuery():执行后返回单个结果集的,通常用于select语句

    // 构建SQL语句
    String sql = "select * from student";
    PreparedStatement statement = connection.prepareStatement(sql);// 执行SQL,获取结果集
    ResultSet resultSet = statement.executeQuery();while(resultSet.next()) {// 这行代码,就是获取当前数据行中"id" 这一列的数值,期望得到一个intint id = resultSet.getInt("id");// 这行代码,就是获取当前数据行中"st_name" 这一列的数值,期望得到一个stringString st_name = resultSet.getString("name");System.out.println("id = " + id);System.out.println("name = " + st_name);
    }
    

    在这里插入图片描述

5.4 ResultSet对象

ResultSet对象也称结果集,它代表符合SQL语句条件的所以行,并且它通过一套get___方法提供了对这些行中数据的访问。
ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能操作当前的数据行中的数据。我们如果需要取得其中某一条记录,就要使用ResultSetnext()方法,如果我们想要得到ResultSet里的所有记录,就应该使用While循环遍历获得,如上述 executeQuery() 的操作。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[PyTorch][chapter 63][强化学习-时序差分学习]

目录: 蒙特卡罗强化学习的问题 基于转移的策略评估 时序差分评估 Sarsa-算法 Q-学习算法 一 蒙特卡罗强化学习的的问题 有模型学习: Bellman 等式 免模型学习: 蒙特卡罗强化学习 迭代: 使用策略 生成一个轨迹, for t…

京联易捷科技与劳埃德私募基金管理有限公司达成合作协议签署

京联易捷科技与劳埃德私募基金管理有限公司今日宣布正式签署合作协议,双方在数字化进程、资产管理与投资以及中英金融合作方面将展开全面合作。 劳埃德(中国)私募基金管理有限公司是英国劳埃德私募基金管理有限公司的全资子公司,拥有丰富的跨境投资经验和卓越的募资能力。该集…

LEEDCODE 220 存在重复元素3

class Solution { public:int getId(int a, int valuediff){// 值// return a/(valuediff1);return a < 0 ? (a ) -) / (valuediff 1) - 1 : a / (valuediff 1);}public: unordered_map<int, int> bucket;bool containsNearbyAlmostDuplicate(vector<int>&am…

【Java实现图书管理系统】

图书管理系统 1. 设计背景2. 设计思路3. 模块展示代码演示3.1 Book类3.2 BookList类&#xff08;书架类&#xff09;3.4 用户类 - User类3.5 子类管理员类 -- AdminUser类3.6 子类普通用户类 -- NormalUser类3.7 操作接口3.8 操作类3.8.1 查找操作 -- FindOperation类3.8.2 增加…

【excel技巧】Excel表格里的图片如何批量调整大小?

Excel表格里面插入了很多图片&#xff0c;但是每张图片大小不一&#xff0c;如何做到每张图片都完美的与单元格大小相同&#xff1f;并且能够根据单元格来改变大小&#xff1f;今天分享&#xff0c;excel表格里的图片如何批量调整大小。 方法如下&#xff1a; 点击表格中的一…

VBA技术资料MF83:将Word文档批量另存为PDF文件

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

JS原生-弹框+阿里巴巴矢量图

效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&q…

Linux_系统信息_uname查看内核版本、内核建立时间、处理器类型、顺便得到操作系统位数等

1、uname --help 使用uname --help查看uname命令的帮助信息 2、uname -a 通过上面的help就知道-a选项显示全部内容时的含义了。 内核名是Linux主机名是lubancat&#xff0c;如果想看主机名可以使用命令hostname&#xff1b;内核版本是Linux 4.19.232&#xff0c;建立时间为2…

NewStarCTF2023 Reverse方向Week3 ez_chal WP

分析 题目&#xff1a;ez_chal 一个XTEA加密&#xff0c; V6是key&#xff0c;v5是输入&#xff0c;然后v7就是密文。 看了v6&#xff0c;要用动调。 ELF文件用ida的远程调试。 然后在kali上输入长度为32的flag 全部转换成dd 再提取密文。 EXP #include <stdio.h>…

使用Spring Boot实现大文件断点续传及文件校验

一、简介 随着互联网的快速发展&#xff0c;大文件的传输成为了互联网应用的重要组成部分。然而&#xff0c;由于网络不稳定等因素的影响&#xff0c;大文件的传输经常会出现中断的情况&#xff0c;这时需要重新传输&#xff0c;导致传输效率低下。 为了解决这个问题&#xff…

OpenCV中的像素重映射原理及实战分析

引言 映射是个数学术语&#xff0c;指两个元素的集之间元素相互“对应”的关系&#xff0c;为名词。映射&#xff0c;或者射影&#xff0c;在数学及相关的领域经常等同于函数。 基于此&#xff0c;部分映射就相当于部分函数&#xff0c;而完全映射相当于完全函数。 说的简单点…

2.FastRunner定时任务Celery+RabbitMQ

注意&#xff1a;celery版本和Python冲突问题 不能用高版本Python 用3.5以下&#xff0c;因为项目的celery用的django-celery 3.2.2 python3.7 async关键字 冲突版本 celery3.x方案一&#xff1a; celery3.xpython3.6方案二 &#xff1a; celery4.xpython3.7 解决celery执…

海康Visionmaster-环境配置:VB.Net 二次开发环境配 置方法

Visual Basic 进行 VM 二次开发的环境配置分为三步。 第一步&#xff0c;使用 VS 新建一个框架为.NET Framework 4.6.1&#xff0c;平台去勾选首选 32 为的工程&#xff0c;重新生成解决方案&#xff0c;保证工程 Debug 下存在 exe 文件&#xff0c;最后关闭新建工程&#xff1…

2024有哪些免费的mac苹果电脑内存清理工具?

在我们日常使用苹果电脑的过程中&#xff0c;随着时间的推移&#xff0c;可能会发现设备的速度变慢了&#xff0c;甚至出现卡顿的现象。其中一个常见的原因就是程序占用内存过多&#xff0c;导致系统无法高效地运行。那么&#xff0c;苹果电脑内存怎么清理呢&#xff1f;本文将…

Linux动静态库

文章目录 1. 静态库2. 动态库3. 动态库的加载 本章代码gitee仓库&#xff1a;动静态库 1. 静态库 Linux开发工具gcc/g篇&#xff0c;此篇文章讲过动静态库的基本概念&#xff0c;不了解的可以先看一下这篇文章。 现在我们先来制作一个简单的静态库 mymath.h #pragma once#i…

Jmeter- Beanshell语法和常用内置对象(网络整理)

在利用jmeter进行接口测试或者性能测试的时候&#xff0c;我们需要处理一些复杂的请求&#xff0c;此时就需要利用beanshell脚本了&#xff0c;BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法&#xff0c;所以它和java是可以无缝衔接的。beans…

<MySQL> 什么是数据库索引?数据库索引的底层结构是什么?

目录 一、什么是数据库索引? 1.1 索引的概念 1.2 索引的特点 1.3 索引的适用场景 1.4 索引的使用 1.4.1 创建索引 1.4.2 查看索引 1.4.3 删除索引 二、数据库索引的底层结构是什么&#xff1f; 2.1 数据库中的 B树 长啥样&#xff1f; 2.2 B树为什么适合做数据库索…

B树与B+树

B树 B树&#xff0c;又称多路平衡查找树&#xff0c;B树中所有结点的孩子个数的最大值称为B树的阶&#xff0c;通常用m表示。一颗m阶B树或为空树&#xff0c;或为满足如下特征的m叉树。 树中每个结点至多有m棵子树&#xff0c;即至多含有m-1个关键字若根结点不是终端结点&…

从0到0.01入门 Webpack| 002.精选 Webpack面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

力扣刷题篇之数与位3

系列文章目录 目录 系列文章目录 前言 数学问题 总结 前言 本系列是个人力扣刷题汇总&#xff0c;本文是数与位。刷题顺序按照[力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 - 力扣&#xff08;LeetCode&#xff09; 数学问题 204. 计数质数 - 力扣&#xff08;Le…