【MySQL】JDBC

news2024/10/5 11:24:46

目录

1.JDBC

2.Java代码操作MySQL

2.1前置条件

2.2常用操作

2.2.1插入

2.2.2删除

2.2.3查询


1.JDBC

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

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

2.Java代码操作MySQL

2.1前置条件

1> 创建个普通Java项目并创建lib库:

2> 下载MySQL驱动包,作为项目的依赖;

可以通过以下渠道下载:

1)Oracle官方网站

2)GitHub

3)中央仓库(下面下载以该渠道为例)

      这里提供一个常用的中央仓库​​​​​​

在中央仓库中搜索mysql并选择第二个:

找到自己需要的版本,这里以5.1.49版本为例: 

点击 jar 即可开始下载:

3> 将驱动包导入到项目中;

找到jar包位置,复制jar包到项目的lib目录中:

右键放jar包的目录,点击 Add as library:

准备工作就绪,接下来就可以编写代码了~~

2.2常用操作

使用步骤:1. 创建数据库连接Connection;
                  2. 创建操作命令Statement ;
                  3. 使用操作命令来执行SQL;
                  4. 处理结果集ResultSet;
                  5. 释放资源.

2.2.1插入

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

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

public class JDBCDemo1 {
    public static void main(String[] args) throws SQLException {
        // 数据库中有一个student表(id, name), 利用Java代码往里面插入一个数据.
        // 让用户通过控制台来输入学号和姓名.
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学号: ");
        int id = scanner.nextInt();
        System.out.println("请输入姓名: ");
        String name = scanner.next();

        // 1.创建"数据源".
        DataSource dataSource = new MysqlDataSource();
                                        //Url:唯一资源定位符,通常使用URL来描述网络上的资源位置.
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/javasql?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");   //数据库所在IP地址 //想操作的数据库
        ((MysqlDataSource) dataSource).setPassword("123456");// 数据库的密码

        /*MysqlDataSource dataSource1 = new MysqlDataSource();
        dataSource1.setUrl();*/ //这种写法也可以.

        // 2.和数据库服务器建立连接.
        Connection connection = dataSource.getConnection(); // 选择后缀为java.sql的connection.

        // 3.构造SQL语句.
        String sql = "insert into student values(?, ?)";// ? 占位符,即占用一个位置.
        PreparedStatement statement = connection.prepareStatement(sql);// 要将String转换为PreparedStatement.
        statement.setInt(1, id);// 下标从1开始.
        statement.setString(2, name);

        // 4.执行SQL语句,返回值就是"这次操作影响到几行".
        int n = statement.executeUpdate();
        System.out.println("n = " + n);

        // 5.释放必要的资源. 关闭连接.
        //   注意关闭顺序,先创建的对象后关闭.
        statement.close();
        connection.close();
    }
}

2.2.2删除

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

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

public class JDBCDemo2 {
    public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要删除的 id: ");
        int id = scanner.nextInt();

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

        Connection connection = dataSource.getConnection();

        String sql = "delete from student where id = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, id);

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

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

2.2.3查询

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;
import java.util.Scanner;

public class JDBCDemo3 {
    public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要查询的学号: ");
        int studentId = scanner.nextInt();

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

        Connection connection = dataSource.getConnection();

        // 这里同样可以包含一些占位符.
        String sql = "select * from student where id = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, studentId);

        // 执行查询操作,要使用executeQuery.返回值是一个ResultSet类型的对象.表示一个"表格"
        ResultSet resultSet = statement.executeQuery();

        // 遍历结果集合.
        while (resultSet.next()) {
            // 获取这一行的 学号 列
            int id = resultSet.getInt("id");
            // 获取这一行的 姓名 列
            String name = resultSet.getString("name");
            System.out.println("id: " + id + ", name: " + name);
        }

        // 释放资源.
        resultSet.close();
        statement.close();
        connection.close();
    }
}


MySQL结束了,向着JavaEE,出发!!

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

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

相关文章

2611B数字源表

Keithley 2611B源表使精密DC、脉冲和低频交流源测量测试比以前更快、更容易、更经济。吉时利2611B的I-V功能测试速度是竞争产品的2到4倍,它结合了: 吉时利的高速第三代源测量单元(SMU)设计嵌入式测试脚本处理器(TSP)TSP-Link,一种快速触发和单元间通信总…

1775_树莓派3B键盘映射错误解决

全部学习汇总: GitHub - GreyZhang/little_bits_of_raspberry_pi: my hacking trip about raspberry pi. 入手树莓派3B之后用了没有多长时间,最初的这段时间感觉想让它代替我的PC机是不肯能的。性能先不说,我完全没有找到当初在我的笔记本上使…

java基础-----第三篇

系列文章目录 文章目录 系列文章目录前言一、final二、String、StringBuffer、StringBuilder前言 一、final 最终的 修饰类:表示类不可被继承 修饰方法:表示方法不可被子类覆盖,但是可以重载 修饰变量:表示变量一旦被赋值就不可以更改它的值。 (1)修饰成员变量 如果fina…

【Go 基础篇】Go语言结构体实例的创建详解

在Go语言中,结构体是一种强大的数据类型,允许我们定义自己的复杂数据结构。通过结构体,我们可以将不同类型的数据字段组合成一个单一的实例,从而更好地组织和管理数据。然而,在创建结构体实例时,有一些注意…

用深度强化学习来玩Flappy Bird

目录 演示视频 核心代码 演示视频 用深度强化学习来玩Flappy Bird 核心代码 import torch.nn as nnclass DeepQNetwork(nn.Module):def __init__(self):super(DeepQNetwork, self).__init__()self.conv1 nn.Sequential(nn.Conv2d(4, 32, kernel_size8, stride4), nn.ReLU(inp…

java八股文面试[数据库]——MySql聚簇索引和非聚簇索引区别

聚集索引和非聚集索引 聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致。 1、聚集索引 聚集索引表记录的排列顺序和索引的排列顺序一致(以InnoDB聚集索引的主键索引来说,叶子节点中存储的就是行数据,行数据在…

【Go 基础篇】Go语言结构体之间的转换与映射

在Go语言中,结构体是一种强大的数据类型,用于定义和组织不同类型的数据字段。当我们处理复杂的数据逻辑时,常常需要在不同的结构体之间进行转换和映射,以便实现数据的转移和处理。本文将深入探讨Go语言中结构体之间的转换和映射技…

Folx 5适用Mac的BT客户端下载器

Mac 上免费的网络下载管理器Folx Mac 下载器有一个支持 Retina 显示的现代界面。提供独特的系统排序、存储下载内容与预览下载文件。Folx 是具有真正 Mac 风格界面的 macOS 免费下载管理器。它提供了方便的下载管理,灵活的设置等。Folx 专业版是 Mac 上一个出色的种子下载器&am…

Solidity 小白教程:4. 函数输出 return

Solidity 小白教程:4. 函数输出 return 这一讲,我们将介绍Solidity函数输出,包括:返回多种变量,命名式返回,以及利用解构式赋值读取全部和部分返回值。 返回值 return 和 returns Solidity有两个关键字与…

1773_把vim的tab键设置为4个空格显示

全部学习汇总: GitHub - GreyZhang/editors_skills: Summary for some common editor skills I used. 有时候自己觉得自己很奇怪,看着Linux的命令窗口就觉得很顺眼。那些花花绿绿的字符以及繁多的方便命令工具,确实是比Windows强不少。不过&a…

电脑前置耳机没声音怎么办

有很多小伙伴反映在将自己的耳机连接到主机前面时没有声音,这是怎么回事呢,遇到这种情况应该怎么解决呢,下面小编就给大家详细介绍一下电脑前置耳机没声音的解决方法,有需要的小伙伴可以来看一看电脑前面耳机没声音。 解决方法&a…

SpringCloud(十)——ElasticSearch简单了解(三)数据聚合和自动补全

文章目录 1. 数据聚合1.1 聚合介绍1.2 Bucket 聚合1.3 Metrics 聚合1.4 使用 RestClient 进行聚合 2. 自动补全2.1 安装补全包2.2 自定义分词器2.3 自动补全查询2.4 拼音自动补全查询2.5 RestClient 实现自动补全2.5.1 建立索引2.5.2 修改数据定义2.5.3 补全查询2.5.4 解析结果…

Web安全——信息收集上篇

Web安全 一、信息收集简介二、信息收集的分类三、常见的方法四、在线whois查询在线网站备案查询 五、查询绿盟的whois信息六、收集子域名1、子域名作用2、常用方式3、域名的类型3.1 A (Address) 记录:3.2 别名(CNAME)记录:3.3 如何检测CNAME记录&#xf…

yolov5自定义模型训练二

前期准备好了用于训练识别是否有火灾的数据集后就可以开始修改yolo相关文件来进行训练 数据集放到yolov5目录里 在data目录下新建yaml文件设置数据集信息如下 在model文件夹下新增新的model文件 开始训练 训练出错 确认后是对训练数据集文件夹里的文件名字有要求,原…

YOLO目标检测——人脸数据集下载分享

目标检测人脸数据集在人脸识别、监控和安防、社交媒体、情感分析、医疗诊断等多个领域都具有广泛的应用潜力。 数据集点击下载:YOLO人脸数据集7000图片.rar

Shell 脚本入门

目录 一、Shell是什么 1.1 我们为什么要学习Shell和使用Shell? 1.2 Shell的分类有哪些? 二、Shell脚本入门知识 2.1 Shell文件命名规范 2.2 Shell解析器 2.3 用Shell 编写hello World 三、Shell的四种变量类型 3.1 系统预定义变量 3.2 自定义变…

移动端几种适配方式

移动端几种适配方式 第一种&#xff1a;rem <meta name"viewport" content"widthdevice-width, initial-scale1.0,,maximum-scale1,user-scalableno">设置窗口不能缩放 一般设备宽度的十分之一 如果这个值是动态计算的需要使用js去设置 根据设备…

【rar密码】使用WinRAR加密的三种方法

如何使用WinRAR加密压缩包&#xff1f;详细介绍WinRAR中的三种加密方法给大家。 方法一&#xff1a;加密 最简单的加密方法&#xff0c;就是在加密文件时输入想要设置的密码&#xff0c;完成加密和压缩了。 方法二&#xff1a;自动加密 普通的加密方式&#xff0c;需要我们加…

1.8.7 练习 冒泡排序 Bubble Sort(提取函数)

C自学精简教程 目录(必读) 1 前驱知识点 for循环语句 、 if语句、函数 、动态内存 2 排序 是将元素按照从小到大的顺序存放的方法。 一开始元素可能并不是按照从小到大的顺序存放的。 这时候我们需要找到需要调整的元素对&#xff0c;并交换这两个元素的值&#xff0c;不…

无涯教程-Android - Absolute Layout函数

Absolute Layout 可让您指定其子级的确切位置(x/y坐标)&#xff0c;绝对布局的灵活性较差且难以维护。 Absolute Layout - 属性 以下是AbsoluteLayout特有的重要属性- Sr.NoAttribute & 描述1 android:id 这是唯一标识布局的ID。 2 android:layout_x 这指定视图的x坐标…