使用 JDBC 执行 SQL 语句

2023-05-16

使用 JDBC 执行 SQL 语句

在上一篇文章中我们了解到什么是JDBC驱动程序以及如何打开和安全地关闭MariaDB数据库连接。接下来我们在上一篇文章的基础上学习如何使用 JDBC 对 SQL 数据库执行SELECTINSERTUPDATEDELETE语句。这些操作称为CRUD 操作(创建、读取、更新、删除),它们构成了应用程序中的大部分功能。如果你还没看过第一篇文章,点击这里查看Java应用程序连接MariaDB。

在本文中,我们将构建一个使用 JDBC与MariaDB 数据库交互的简单 Java 应用程序。从最终用户的角度来看,我们不会实现具有有用功能的应用程序。我们将简单地从 Java 标准main方法中调用每个 CRUD 操作的方法。以下是我们想要实现对数据库的 CRUD 操作的方法,但是具体的方法还没有实现,后面我们会一步步的实现这些方法:

public static void main(String[] args) throws SQLException {
    try {
        createData("Java", 10);
        createData("JavaScript", 9);
        createData("C++", 8);
        readData();
        updateData("C++", 7);
        readData();
        deleteData("C++");
        readData();
    } finally {
        closeDatabaseConnection();
    }
}

使用 JDBC 插入数据

代码如下:

package com.example;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Application {
    private static Connection connection;
    public static void main(String[] args) throws SQLException {
        try {
            openDatabaseConnection();
            //插入数据
            createData("Java", 10);
            createData("JavaScript", 9);
            createData("C++", 8);
            //插入数据结束

        } finally {
            closeDatabaseConnection();
        }
    }

    //createData()方法具体实现
    private static void createData(String name, int rating) throws SQLException {
        System.out.println("Create data: " );
        try (PreparedStatement statement = connection.prepareStatement(
                "    INSERT INTO programming_language(name, rating)\n" + "    VALUES (?, ?)\n")) {
            statement.setString(1, name);
            statement.setInt(2, rating);
            int rowsInserted = statement.executeUpdate();
            System.out.println("Rows inserted: " + rowsInserted);
        }
    }

    private static void openDatabaseConnection() throws SQLException{
        System.out.println("Opening database connection...");

        connection = DriverManager.getConnection(
                "jdbc:mariadb://localhost:3306/jdbc_demo",
                "user", "password"
        );

        System.out.println("Connection valid: " + connection.isValid(5));
    }
    private static void closeDatabaseConnection() throws SQLException {
        connection.close();
        System.out.println("Connection valid: " + connection.isValid(5));
    }

}

运行结果如下:

在这里插入图片描述

查看数据库表结果如下:

在这里插入图片描述

使用 JDBC 检索数据

要实现读取CRUD 操作,我们需要获取一个类型为ResultSet的对象,需要添加的代码如下

private static void readData() throws SQLException {
        try (PreparedStatement statement = connection.prepareStatement(
                "    SELECT name, rating\n" + "    FROM programming_language\n" + "    ORDER BY rating DESC\n")) {
            try (ResultSet resultSet = statement.executeQuery()) {
                boolean empty = true;
                while (resultSet.next()) {
                    empty = false;
                    String name = resultSet.getString("name");
                    int rating = resultSet.getInt("rating");
                    System.out.println("\t> " + name + ": " + rating);
                }
                if (empty) {
                    System.out.println("\t (no data)");
                }
            }
        }
    }

运行结果如下:

在这里插入图片描述

使用 JDBC 修改数据

Update CRUD 操作与Create操作类似,需要添加代码如下:

 private static void updateData(String name, int newRating) throws SQLException {
        try (PreparedStatement statement = connection.prepareStatement(
                "    UPDATE programming_language\n" + "    SET rating = ?\n" + "    WHERE name = ?\n")) {
            statement.setInt(1, newRating);
            statement.setString(2, name);
            int rowsUpdated = statement.executeUpdate();
            System.out.println("Rows updated: " + rowsUpdated);
        }
    }

运行结果如下:

在这里插入图片描述

使用 JDBC 删除数据

最后,从 JDBC 的角度来看, Delete CRUD 操作类似于CreateUpdate操作,需要添加的代码如下:

private static void deleteData(String nameExpression) throws SQLException {
        try (PreparedStatement statement = connection.prepareStatement("    DELETE FROM programming_language\n" + "    WHERE name LIKE ?\n")) {
            statement.setString(1, nameExpression);
            int rowsDeleted = statement.executeUpdate();
            System.out.println("Rows deleted: " + rowsDeleted);
        }
    }

运行结果如下:

在这里插入图片描述

如有不妥之处请留言指正。相互学习,共同进步!

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

使用 JDBC 执行 SQL 语句 的相关文章

  • 当在另一个表中找到匹配项时更新列

    我尝试使用表 A 中与 Passport no 匹配的值更新表 B 中的列 下面是我的sql查询 update tabel b set b country id a national id from table a a join tabel
  • 在 SQLite GROUP BY 查询的 SELECT 列表中包含额外的列是否安全?

    我有一个简单的 SQLite 表 名为 message sequence INTEGER PRIMARY KEY type TEXT content TEXT 我想获取每种类型的最后一条消息的内容 由其序列确定 令我惊讶的是 以下简单查询有
  • 将 Linq 表达式转换为 SQL Server 查询

    我正在使用一些 crm 框架 该框架没有任何内部 orm 并且不使用实体框架 仅使用纯 sql 查询 我在数据库中的每个表都有实体 所以我有例如 public class Customer public string FirstName g
  • java为oracle VARCHAR2返回空字符串值

    我有以下代码 它似乎工作正常 但它不显示 personCode 字符串的任何值 PERSON CODE 是 Oracle 9i 数据库中的 VARCHAR2 我在我的项目中使用 Java SE 1 7 和 ojdbc7 jar 我是 Jav
  • 连接关闭时结果集未关闭?

    我一直在对我们的一个宠物项目进行代码审查 主要使用 FindBugs 等工具 FindBugs 将以下代码标记为错误 伪代码 Connection conn dataSource getConnection try PreparedStat
  • SSRS报告不显示数据

    我刚刚创建了 SQL Server 2005 SSRS 报告 数据未显示在预览窗格中 数据集是根据字符串参数从存储过程正确填充的 我可以在数据窗格中执行它 在预览窗格中运行报表时 会显示正确的行数 但单元格的内容不包含任何数据 源数据集基于
  • 当服务器时区不是 UTC 时,从 Java 中的 MySQL 检索 UTC DATETIME 字段

    我正在尝试编写代码以使用 Java 和 MySQL 与第三方开发的数据库进行互操作 该数据库有一个字段 用于存储时间戳DATETIME字段作为 UTC 日期 运行数据库和客户端的服务器的时区设置为非 UTC 时区 Europe London
  • 添加日期时间和时间

    服务器 SQL Server 2012 SP1 开发者版 Code declare datetime datetime 1900 01 01 00 00 00 000 declare time time 11 11 11 select da
  • 获取每件商品的最新价格

    我有一张桌子 ItemID PurchaseDate Price 001 03 17 2013 19 00 002 03 17 2013 14 00 001 03 18 2013 13 00 002 03 18 2013 15 00 001
  • 选择语句REF oracle

    我需要一些帮助来创建将使用引用的选择语句 我设法很好地插入了值 但是当我尝试使用 where 语句提取值时 输出要么是数据类型错误 要么会输出两个表以及它们都包含的数据 这只是一个例子 Create or replace table1 Ty
  • 使用绑定变量动态传递表名和列名

    有没有办法使用绑定变量将列名和表名动态传递给查询 这可以通过使用简单的串联运算符来完成 但我想要一种不同的方法来实现这一目标 EDIT OPEN abc cur FOR Select column name from table name
  • 在 SQL 中查询行序列

    假设我正在存储events有关联users如下表 其中dt代表事件的时间戳 dt user event 1 1 A 2 1 D 3 1 B 4 1 C 5 1 B 6 2 B 7 2 B 8 2 A 9 2 A 10 2 C 这样我们就可以
  • MySQL 命令输出在命令行客户端中太宽[重复]

    这个问题在这里已经有答案了 我在用mysql终端模拟器中的命令行客户端lxterminal在Ubuntu中 当我运行以下命令时 mysql gt select from routines where routine name simplep
  • SQL Server到Mysql迁移(使用Mysql Workbench)数据传输错误

    我正在使用 Mysql Work bench 6 3 将数据库从 MS Sql server 2008 迁移到 Mysql 在 批量数据传输 期间出错并出现以下警告 这种情况仅发生在像 varchar char 这样的列类型上 当我尝试使用
  • 我应该如何优化 .net 代码中对一个简单存储过程的多次调用?

    我有一个非常简单的存储过程 create procedure spFoo v varchar 50 as insert into tbFoo select v 我有 50 个值要插入到 tbFoo 中 这意味着在我的 c 代码中我调用 sp
  • SQL COUNT(*) 返回错误答案

    以下脚本应返回部门名称以及这些部门中的员工人数 营销 行政和销售部门有 0 名员工 但返回值不是 0 而是 1 我怎样才能纠正它 select Department Departments DepartmentID count as Num
  • 如何在 SQL 中编写 where 子句来按一天中的时间过滤 DATETIME 列?

    我有带有 DATETIME 列时间戳的数据 我想将其过滤到 DATETIME 介于上午 9 30 到下午 5 30 之间的任意一天的记录集 最好的方法是什么 更新 更改是因为我需要精确到分钟 而不仅仅是小时 对于那个很抱歉 您始终可以将其编
  • 获取SQL中前2个特殊字符之间的字符

    我有数据在sql 只是要注意 SQL STudio is the IDE like data a 10 b c a 1 b c 我想获取前两个符号之间的数据 Output 10 1 这就是我的方法 SELECT CAST
  • 对时间序列数据重新采样

    我有一个以毫秒为单位的时间序列列表 我想对时间序列进行重新采样并对组应用平均值 我如何在 Postgres 中实现它 重新采样 是指聚合一秒或一分钟内的所有时间戳 一秒或一分钟内的所有行形成一组 表结构 date x y z Use dat
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable

随机推荐

  • Android 打印调用栈的方法

    1 Java层调用栈打印 xff1a xff08 1 xff09 打印本地调用堆栈 Log i TAG Log getStackTraceString new Throwable 打印本地调用堆栈 xff08 2 xff09 打印远程调用堆
  • 利用gnome美化Ubuntu18.04

    先上最终的效果图 xff1a 首先需要安装gnome软件 sudo apt install gnome tweak tool 安装好后在terminal中输入 gnome tweaks 进入优化软件 软件里自带有一些主题和图标等 xff0c
  • 软件项目管理0712:干系人管理

    软件项目管理0712 xff1a 干系人管理 xff08 软件项目管理中最复杂的内容 xff09 这个题目是个大课题 xff0c 只谈一些自己的经验 xff0c 并不完整 xff0c 有很多缺漏 xff0c 在以后的工作中慢慢的完善 项目
  • 【JVM学习笔记】JVM内存区域定义与内存结构

    目录 定义和说明JVM内存区域的定义内存区域说明堆说明非堆 方法区说明堆栈的区别HotSpot虚拟机 JVM线程独占内存程序计数器 xff1a Program Counter RegisterJava虚拟机栈 xff1a Java Virt
  • 【自媒体营销神器】一键自动下载短视频并分发至长视频平台脚本开源展示

    项目语言 xff1a Python 开发历时 xff1a 一个月 为什么要开源 xff1a Those whom God wishes to destroy he first makes mad 用到的库 xff1a 首先是项目展示环节 x
  • 搞懂bashrc

    1 bashrc是什么 shell 是给电脑发送指令的地方 xff08 命令行 xff09 xff0c bash 是 Bourne Again Shell 的缩写1 我们在 Ubuntu 打开的命令行界面一般都是 bash xff0c 每次
  • powershell 解压RAR文件(简易版)

    01 前言 为啥要写这个 xff0c 因为可能有些特殊的环境无法使用RAR的解压软件 xff0c 因而动手找了一个库然后写了这个脚本 xff0c 希望有帮助 02 正文 准备 xff1a 第三方的dll SharpCompress xff0
  • 改变 Gnome Terminal 的默认大小

    Ubuntu 中 xff0c Gnome Terminal 的默认大小是 80列 xff0a 24行 xff0c 这是文本模式下的标准尺寸 对于图形界面环境而言 xff0c 默认的大小就不太适合了 如果不满意 Gnome Terminal
  • 主祷文

    主 祷 文 我们在天上的父 xff0c 愿人都尊你的名为圣 愿你的国降临 愿你的旨意行在地上 xff0c 如同行在天上 我们日用的饮食 xff0c 今日赐给我们 免我们的债 xff0c 如同我们免了人的债 不叫我们遇见试探 xff0c 救我
  • 一个失败的程序员

    一个失败的程序员 第一次写博客 xff0c 看了别人的很久 xff0c 也想了很久 xff0c 觉得无论文笔有多不好 xff0c 分享的内容有多糟糕 xff0c 都应该有这个勇气迈出第一步 xff0c 记录生活 抒写回忆 xff0c 等到回
  • H5新增标签及Tab切换水平垂直居中

    1 结构标签 xff08 1 xff09 section xff1a 独立内容区块 xff0c 可以用h1 h6组成大纲 xff0c 表示文档结构 xff0c 也可以有章节 页眉 页脚或页眉的其他部分 xff1b xff08 2 xff09
  • android构建工具gradle基础知识

    1 gradle概述 gradle是一个开源的通用构建工具 xff0c 可以构建几乎任意类型的产物 针对不同的场景 xff0c gradle使用不同的插件和DSL申明配置来共同完成构建 gradle有如下几个特点 xff1a 高性能基于jv
  • Kali linux 2016.2(Rolling)安装之后的常用配置

    转发 xff1a https www cnblogs com zlslch p 6047913 html 前言 使用默认的Kali Linux设置来学习是可以的 xff0c 但是我们通常要修改系统的一些基本设置 xff0c 来最大化使用Ka
  • JAVA版本:使用二分法查找数组中的数据

    使用二分法查找数组中的数据 xff1a 分析 xff1a 二分法查找适用于数据量较大时 xff0c 但是数据需要先排好顺序 主要思想是 xff1a xff08 设查找的数组区间为array low high xff09 xff08 1 xf
  • BlaBlaCar是如何解决四大挑战的?

    BlaBlaCar 是世界领先的长途拼车服务 xff0c 将汽车司机与乘客联系起来 BlaBlaCar 在 22 个国家 地区拥有 6000 万会员 xff0c 每季度有超过 1800 万旅客 xff0c 正在创建一个全新的 以人为本的旅行
  • K8S案例01

    一个简单的例子 Java Web应用 xff1a 是一个运行在 tomcat里的 Web App 如图1 1所示 xff0c JSP页面通过JDBC直接访问 MYSQL数据库并展示数据 为了演示和简化的目的 xff0c 只要程序正确连接到了
  • 【Ubuntu】修改ubuntu和windows双系统启动顺序

    目录 一 问题描述二 背景知识1 GRUB是什么2 GRUB配置文件3 96 etc default grub 96 主配置文件 二 问题分析三 解决方案1 修改grub主配置文件2 更新grub配置文件 一 问题描述 Ubuntu 43
  • OpenShift简介

    文章目录 OpenShift简介1 OpenShift是什么 xff1f OpenShift与K8S的区别1 应用部署2 应用管理3 节点配置4 安全性 2 为什么要用OpenShift xff1f 3 OpenShift的版本4 Open
  • Java 连接MariaDB

    Java应用程序连接MariaDB数据库 在本文中我们将了解到什么是JDBC驱动程序以及如何打开和安全地关闭MariaDB数据库连接 什么是 JDBC 驱动程序 xff1f JDBC 是一种 API规范 xff1a 一组定义该技术可以做什么
  • 使用 JDBC 执行 SQL 语句

    使用 JDBC 执行 SQL 语句 在上一篇文章中我们了解到什么是JDBC驱动程序以及如何打开和安全地关闭MariaDB数据库连接 接下来我们在上一篇文章的基础上学习如何使用 JDBC 对 SQL 数据库执行SELECT INSERT UP