MySQL JDBC编程

2023-10-27

什么是JDBC编程?

JDBC编程就是用Java代码来操作数据库.JDBC即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API.

JDBC的工作原理

这里的JDBC编程,使用Java代码实现的是数据库的客户端,而像一些主流的数据库,为了方便程序员实现数据库的客户端程序,就会提供一些API接口,称为"数据库SDK",程序员就可以通过这些API接口更加方便的访问数据库服务器;
什么是API呢?API即Application Programming Interface,应用程序接口,它提供了一些函数,方法,或是类来供程序员来调用.由于API是数据库提供的,因此不同的数据库所提供的API就可能不同,为了解决这个问题,Java就提出了一套标准的接口体系,让这些不同数据库的API与这套接口体系进行适配,对于程序员而言,就只需要掌握Java的这套API即可,Java的这套操作数据库的API,就是JDBC;

JDBC的优点

  • 开发数据库应用不用限定在特定数据库厂商的API;
  • 程序的可移植性大大增强;
  • 对各种数据库的差异进行封装,简化了程序员的学习成本;

JDBC的使用

在这里插入图片描述选择第一个即可
在这里插入图片描述选择与自己的数据库适配的版本:
在这里插入图片描述然后点击这里进行下载:
在这里插入图片描述然后我们就得到了一个jar包;

在这里插入图片描述复制这个驱动包(不需要手动解压),到这里驱动包就准备完毕了.

  • 把jar包导入到Java项目中;

然后我们打开IDEA新建一个Java文件,然后右键我们的文件名新建一个目录:
在这里插入图片描述
右键我们的项目名,找到 Add as Library…

在这里插入图片描述不需要更改任何操作,直接ok即可

在这里插入图片描述
这样,我们就将这个jar包导入成功了
在这里插入图片描述

  • 新建一个Java类,就可以进行代码的编写了

插入操作

  • 构造数据源;

JDBC中,使用DataSource来描述数据库的位置;
DataSource是一个Interface,不能直接实例化,因此使用MysqlDataSource来实现DataSource;
MysqlDataSource来自于驱动包,因此必须驱动包安装正确;

设置其URL(统一资源定位器/网址),User,Password

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

在这里插入图片描述
通过上述的操作,我们就成功设置了数据库的ip地址,端口号,数据库名即用户登录密码;

这里的密码设置就是我们登录MySQL客户端的登录密码;

  • 2.和数据库服务器建立连接;
Connection connection=dataSource.getConnection();

使用dataSource.getConnection()来建立连接;

  • 构造SQL语句,JDBC操作数据库(本质仍然是通过SQL来描述数据库操作);
		Scanner scanner=new Scanner(System.in);
        System.out.println("请输入学号:");
        int num=scanner.nextInt();
        System.out.println("请输入姓名:");
        String name=scanner.next();

       // String sql="insert into student values(1,'张三')";
        //使用?作为占位符,后续使用statement对象针对?进行替换
        String sql="insert into student values(?,?)";
        //直接使用String格式的SQL还不行,还需要搭配一个特殊的类;
        PreparedStatement statement=connection.prepareStatement(sql);
        statement.setInt(1,num);
        statement.setString(2,name);
        System.out.println(statement);

Statement对象主要是将SQL语句发送到数据库中;

  • 执行SQL语句 insert
		int n=statement.executeUpdate();
        System.out.println("n = "+ n);

这里n描述的其实是上面插入操作影响数据库的行数;
executeQuery() 方法执行后返回单个结果集的,通常用于select语句
executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于update、insert、delete语句;

  • 断开连接,释放资源
		statement.close();
        connection.close();

释放资源是要注意后创建的需要先创建;

下面是完整代码:

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 JDBCInsert {
    public static void main(String[] args) throws SQLException {
        //1.使用DataSource描述MySQL服务器的位置;
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("000000");
        //2.和数据库服务器建立连接;
        Connection connection=dataSource.getConnection();
        //System.out.println(connection);
        //3.构造SQL语句,JDBC操作数据库,本质仍然是通过SQL来描述数据库操作;
        //尝试插入一个操作;
        //直接使用String格式的SQL还不行,还需要搭配一个特殊的类;
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入学号:");
        int num=scanner.nextInt();
        System.out.println("请输入姓名:");
        String name=scanner.next();

       
        //使用?作为占位符,后续使用statement对象针对?进行替换
        String sql="insert into student values(?,?)";
        PreparedStatement statement=connection.prepareStatement(sql);
        statement.setInt(1,num);
        statement.setString(2,name);
        System.out.println(statement);
        //4.执行SQL语句 insert,update,delete都是通过executeUpdate来执行的
        //select 则是通过 executeQuery来执行的;
        //executeUpdate的返回值是一个整数,表示这个操作影响到几行;
        int n=statement.executeUpdate();
        System.out.println("n = "+ n);
        //断开连接,释放资源;
        statement.close();
        connection.close();

    }
}

修改操作

与插入操作十分相似,我们直接看完整代码:

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 JDBCUpdate {
    public static void main(String[] args) throws SQLException {

        //构造数据源
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("000000");
        //2.和数据库建立连接
        Connection connection= dataSource.getConnection();

        Scanner scanner =new Scanner(System.in);
        System.out.println("输入要修改的学号");
        int id=scanner.nextInt();
        System.out.println("输入修改后的名字");
        String name= scanner.next();

        //构造SQL语句
        String sql="update student set name = ? where id = ? ";
        PreparedStatement statement =connection.prepareStatement(sql);
        statement.setString(1,name);
        statement.setInt(2,id);
        System.out.println(statement);

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

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

    }
}

删除操作

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 JDBCDelete {
    public static void main(String[] args) throws SQLException {
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("000000");

        Connection connection=dataSource.getConnection();

        Scanner scanner=new Scanner(System.in);
        System.out.println("输入要删除的学生id");
        int id=scanner.nextInt();

        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();

    }
}

查询操作

与增删改不同,查询操作需要遍历表,因此查询操作略有不同:

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

import javax.sql.DataSource;
import java.io.PrintWriter;
import java.sql.*;
import java.util.logging.Logger;


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

		//和数据库建立连接
        Connection connection=dataSource.getConnection();
		//直接查找所有记录,不需要输入条件
        String sql="select * from student";
        PreparedStatement statement=connection.prepareStatement(sql);

        //此处使用executeQuery
        //executeUpdate只能返回一个int
        //executeQuery返回的是一个ResultSet对象,可以把这个对象视为是一个"临时表"

        //resultSet简单的当成一个类似于"迭代器"
       
        ResultSet resultSet=statement.executeQuery();

        //遍历临时表

        while (resultSet.next()){
            int id=resultSet.getInt("id");
		//通过getXXX的方法获取指定的列
            String name=resultSet.getString("name");
            System.out.println(id+":"+name);

        }

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


    }
}

executeQuery返回的是一个ResultSet对象,可以把这个对象视为是一个"临时表",然后对临时表进行遍历;
ResultSet对象它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法提供了对这些行中数据的访问;
我们如果想要取得某一条记录,就要使用ResultSet的next()方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环;
resultSet.next(), next如果没有到达末尾,就是返回true继续循环, next如果到达末尾,就返回false结束循环;

至此,MySQL的JDBC编程就是如此啦!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL JDBC编程 的相关文章

  • 垃圾收集器如何在幕后工作来收集死对象?

    我正在阅读有关垃圾收集的内容 众所周知 垃圾收集会收集死亡对象并回收内存 我的问题是 Collector 如何知道任何对象已死亡 它使用什么数据结构来跟踪活动对象 我正在研究这个问题 我发现GC实际上会跟踪活动对象 并标记它们 每个未标记的
  • Thymeleaf 3 Spring 5 映射加载字符串而不是 HTML

    我正在尝试将 Spring 5 和 Thymeleaf 3 一起配置 我正在 Eclipse 上工作 我使用 全新安装 构建并使用 springboot run 运行应用程序 我已经设置了一个控制器和几个模板 但 Thymeleaf 似乎找
  • Android中如何使用JNI获取设备ID?

    我想从 c 获取 IMEIJNI 我使用下面的代码 但是遇到了未能获取的错误cls 它总是返回NULL 我检查了环境和上下文 它们都没有问题 为什么我不能得到Context班级 我在网上搜索了一下 有人说我们应该使用java lang Ob
  • Android studio - 如何保存先前活动中选择的数据

    这是我的代码片段 这Textview充当按钮并具有Onclicklistner在他们 当cpu1000时Textview单击它会导致cpu g1000其代码如下所示的类 public class Game 1000 extends AppC
  • java inputstream 打印控制台内容

    sock new Socket www google com 80 out new BufferedOutputStream sock getOutputStream in new BufferedInputStream sock getI
  • Runtime.exec 处理包含多个空格的参数

    我怎样才能进行以下运行 public class ExecTest public static void main String args try Notice the multiple spaces in the argument Str
  • Mockito 使用 @Mock 时将 Null 值注入到 Spring bean 中?

    由于我是 Spring Test MVC 的新手 我不明白这个问题 我从以下代码中获取了http markchensblog blogspot in search label Spring http markchensblog blogsp
  • 如何在单个查询中搜索 RealmObject 的 RealmList 字段

    假设我有一堂课 public class Company extends RealmObject private String companyId private RealmList
  • 如何在php中根据url从mysql获取数据?

    我在 mysql 数据库中有一个页表 其中包含 page name title content author 字段 我想用 php 来获取它http www domain com index php page page name http
  • Java 中如何将 char 转换为 int? [复制]

    这个问题在这里已经有答案了 我是Java编程新手 我有例如 char x 9 我需要得到撇号中的数字 即数字 9 本身 我尝试执行以下操作 char x 9 int y int x 但没有成功 那么我应该怎么做才能得到撇号中的数字呢 ASC
  • Sun 在 EDT 之外做 GUI 工作的演示?

    我正在看SplashDemo java http download oracle com javase tutorial uiswing examples misc SplashDemoProject src misc SplashDemo
  • 从jar中获取资源

    我有包含文件的 jar myJar res endingRule txt myJar wordcalculator merger Marge class 在 Marge java 中我有代码 private static final Str
  • 提高 PostgreSQL 1 亿数据左连接查询性能

    我在用Postgresql 9 2 version Windows 7 64 bit RAM 6GB 这是一个Java企业项目 我必须在我的页面中显示订单相关信息 有三个表通过左连接连接在一起 Tables TV HD 389772 行 T
  • 退出 PHP 脚本后终止或停止 MySQL 查询

    我在工作中运行一个统计服务器 由于运行的查询量很大 该服务器有时会变得非常慢 我们的营销团队使用它作为主要统计工具 团队中的某些人有时会在脚本结束之前退出脚本 通过关闭浏览器或选项卡 同时 SQL 查询继续执行 当有人关闭或离开 PHP 脚
  • 使用 Elastic Beanstalk 进行 Logback

    我在使用 Elastic Beanstalk 记录应用程序日志时遇到问题 我正在 AWS Elastic Beanstalk 上的 Tomcat 8 5 with Corretto 11 running on 64bit Amazon Li
  • 不可变的最终变量应该始终是静态的吗? [复制]

    这个问题在这里已经有答案了 在java中 如果一个变量是不可变的并且是final的 那么它应该是一个静态类变量吗 我问这个问题是因为每次类的实例使用它时创建一个新对象似乎很浪费 因为无论如何它总是相同的 Example 每次调用方法时都会创
  • Spring @Cacheable 和 @Async 注解

    我需要缓存一些异步计算的结果 具体来说 为了克服这个问题 我尝试使用 Spring 4 3 缓存和异步计算功能 作为示例 我们采用以下代码 Service class AsyncService Async Cacheable users C
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于

随机推荐

  • 老版本的 mybatis-generator 使用示例

    文章目录 main 入口 generatorConfig xml log4j properties main 入口 import java io File import java util ArrayList import java uti
  • c++返回数组引用的函数(4种方法)

    分享返回数组引用的4种方法 普通法 类型别名 尾置返回类型 decltype include
  • CSS层叠上下文

    在学习z index属性的时候 限制了能够使用z index属性的元素 那么为什么有的元素能够使用z index 因为他创建了一个层叠上下文 对于这个词的理解首先要理解上下文 上下文这个名词的出现有很多地方 块级格式上下文 执行上下文 在不
  • 【转载】VC常用小技巧(2)

    项目 如何干净的删除一个类 1 先删除项目中对应的 h和 cpp文件 选中后用 Delete键删除 2 保存后退出项目 到文件夹中删除实际的 h和 cpp文件 3 删除 clw文件 4 重新进入项目 进行全部重建 rebuild all 如
  • 批处理常用命令及用法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 批处理常用命令及用法大全 阅读本文需要一定的dos基础概念 象 盘符 文件 目录 文件夹 子目录 根目录 当前目录每个命令的完整说明请加 参数参考微软的帮助文档可以看到 在
  • 前端 - 实习两个星期总结

    文章目录 吐槽 总结 新人建议 项目学习到的 今天已经是菜鸟实习的第二个星期了 怎么说呢 反正就是进的一个不大不小的厂 做着不难不易的事 菜鸟现在主要做的就是适配 现在就来总结一下 不过这之前 菜鸟不得不吐槽一波 吐槽 1 菜鸟进的是一家国
  • kvm常见故障及解决

    一 启动虚拟机Connection reset by peer virsh start vmhost1error Failed to start domain vmhost1error Unable to read from monitor
  • 浙江大学计算机学院最权威的老师,浙江大学计算机科学与技术专业导师介绍:郑能干...

    姓名 郑能干 性别 男 职称 副教授 在岗性质 全职在岗 学院 系 计算机科学与技术学院 招生资格类别 硕士生导师 研究方向 人工智能嵌入式系统神经信息工程普适计算 Email zng cs zju edu cn 个人简介 郑能干 男 19
  • 【计算机视觉】深度学习框架-Keras

    文章目录 1 从零开始训练网络 1 1 搭建网络基本架构 1 2 构建训练网络 1 3 启动训练网络并测试数据 2 用Keras实现一个简单神经网络 2 1 Keras简介 2 2 MNIST手写数字识别 详细解释步骤 2 2 1 数据的加
  • C++内存管理(3)——内存池

    1 默认内存管理函数的不足 为什么使用内存池 利用默认的内存管理操作符 new delete 和函数 malloc free 在堆上分配和释放内存会有一些额外的开销 系统在接收到分配一定大小内存的请求时 首先查找内部维护的内存空闲块表 并且
  • [tensorflow] eval和run的区别

    在tensorflow中 eval和run都是获取当前结点的值的一种方式 在使用eval时 若有一个 t 是Tensor对象 调用t eval 相当于调用sess run t 一下两段代码等效 float tensor tf cast tf
  • 毕设系列 - java web 项目获取方式说明

    文章目录 1 项目获取地址 2 项目包含内容 2 1 整体项目内容 3 样例 基于java web的网上招聘系统的设计与实现 3 1 系统研究背景 3 2 系统研究意义 3 3 开发环境 3 4 系统设计 3 4 1 系统设计模块 3 4
  • AOSP>设计>测试>(第三节)兼容性测试套件CTS

    AOSP gt 设计 gt 测试 gt 兼容性测试套件CTS 第三节 兼容性测试套件 CTS 概览 工作流程 测试用例的类型 涵盖的领域 设置CTS 物理环境 蓝牙 LE 信标 相机 GPS GNSS WLAN 和 IPv6 Wi Fi R
  • 基于MATLAB实现语音信号加噪与去噪的低通滤波器

    基于MATLAB实现语音信号加噪与去噪的低通滤波器 一 概述 在语音信号处理中 由于外界环境的干扰或传输过程中的噪声引入 可能导致语音信号质量下降 为了提高语音信号的清晰度和可懂度 需要对信号进行去噪处理 本文将介绍如何使用MATLAB实现
  • 启明智显分享

    提示 启明智显专为智能产品提供一站式彩屏显示 连接 云端服务 APP软件开发 维护等解决方案 帮厂商快速实现硬件的智能化 作为启明云端旗下方案公司 我们用心整理了开发小伙伴在开发过程中可能会遇到的问题以及快速上手的简明教程 同时也用心整理了
  • 最小二乘法 python实现

    最小二乘法适用于对处理的一堆数据 不必精确的经过每一点 而是根据图像到每个数据点的距离和最小确定函数 最小二乘法逼近的最简单的例子是根据一组观测值对 x1 y1 x2 y2 xn yn 来拟合一条直线 直线的数学表达式为 下面是一元线性拟合
  • Qt版本的选择与安装

    Qt简介 Qt是当下最流行的C 开发库 也是当下最流行的跨平台开发框架之一 可开发桌面端应用 移动端应用以及嵌入式端应用 可以说能支持的系统基本都支持 它可以做GUI但功能远不止GUI 我们用的最多的还是桌面端和嵌入式端的应用 移动端应用流
  • 最新Android Studio解决> No cached version of org.javailable for offline mode.

    问题 A problem occurred configuring root project kaikeba gt Could not resolve all artifacts for configuration classpath gt
  • 报错:Dependency annotations: {@org.springframework.beans.fact}

    我当时检查了下面的所有内容发现都没有错 最后在第五个监听器打错了 这给我气的 大家自己对照下面的内容仔细看看自己哪里错了吧 类检查方面 1 是否在加了 Controller Repository Service 注解 Controller
  • MySQL JDBC编程

    文章目录 什么是JDBC编程 JDBC的工作原理 JDBC的优点 JDBC的使用 插入操作 修改操作 删除操作 查询操作 什么是JDBC编程 JDBC编程就是用Java代码来操作数据库 JDBC即Java Database Connecti