JDBC实现对单表数据增、删、改、查

文章目录

  • API介绍
    • 获取 Statement 对象
    • Statement的API介绍
    • 使用步骤
    • 案例代码
  • JDBC实现对单表数据查询
    • ResultSet的原理
    • ResultSet获取数据的API
    • 使用JDBC查询数据库中的数据的步骤
    • 案例代码

在这里插入图片描述


API介绍

获取 Statement 对象

java.sql.Connection接口中有如下方法获取到Statement对象

//	创建一个 Statement 对象来将 SQL 语句发送到数据库
Statement createStatement() 

Statement的API介绍

//	 根据执行的DML(INSERT、UPDATE、DELETE)语句,返回受影响的行数
int executeUpdate(String sql)
//	根据查询语句返回结果集,只能执行SELECT语句
ResultSet executeQuery(String sql)

注意:在MySQL中,只要不是查询就是修改。
executeUpdate:用于执行增删改
executeQuery:用于执行查询

使用步骤

  1. 注册驱动
  2. 获取连接
  3. 获取Statement对象
  4. 使用Statement对象执行SQL语句
  5. 释放资源

案例代码

public class Demo03 {public static void main(String[] args) throws Exception {Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql:///day04_db", "root", "1234");System.out.println(conn);/*1)获取发送sql语句对象使用Connection连接接口对象调用Connection接口的方法:Statement createStatement() 创建一个 Statement 对象来将 SQL 语句发送到数据库。PreparedStatement prepareStatement(String sql) 创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。2)Statement和PreparedStatement都可以用来向数据库发送sql语句,Statement是PreparedStatement的父接口。3)PreparedStatement 是安全的,Statement不安全的。并且Statement效率低,PreparedStatement效率高4)Connection还可以手动控制mysql事务:开启事务  void setAutoCommit(boolean autoCommit) 将此连接的自动提交模式设置为给定状态。autoCommit - 为 true 表示启用自动提交模式;为 false 表示禁用自动提交模式1. conn.setAutoCommit(false);一切正常提交事务  void commit()2. conn.commit()出现异常,回滚事务  void rollback()3. conn.rollback()*/// 从连接中拿到一个Statement对象Statement stmt = conn.createStatement();/*Statement向数据库发送sql语句,使用Statement中的不同的方法可以向数据库发送不同的sql语句:1)DQL查询语句:  ResultSet executeQuery(String sql) 执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。参数:sql - 要发送给数据库的 SQL 语句,通常为静态 SQL SELECT 语句返回值:ResultSet用来存放查询的结果,表示结果集2)DML增删改和DDL语句(创建表和数据库)使用的方法:int executeUpdate(String sql)执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句(DML),或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。返回值:1) 对于 SQL 数据操作语言 (DML) 语句,返回行记录数,影响的行数2) 对于什么都不返回的 SQL 语句,返回 0 ,执行DDL返回的是0 了解*/// 1.插入记录String sql = "insert into user values(null, 'zhaoliu', 'abc')";int i = stmt.executeUpdate(sql);System.out.println("影响的行数:" + i);// 2.修改记录sql = "update user set username='tianqi' where username='zhaoliu'";i = stmt.executeUpdate(sql);System.out.println("影响的行数:" + i);// 3.删除记录sql = "delete from user where id=4";i = stmt.executeUpdate(sql);System.out.println("影响的行数:" + i);// 释放资源stmt.close();conn.close();}
}

JDBC实现对单表数据查询

ResultSet的原理

  1. ResultSet 内部有一个指针,刚开始记录开始位置
  2. 调用next方法, ResultSet 内部指针会移动到下一行数据
  3. 我们可以通过 ResultSet 得到一行数据 getXxx 得到某列数据

在这里插入图片描述

ResultSet获取数据的API

其实 ResultSet 获取数据的API是有规律的get后面加数据类型。我们统称getXXX()

在这里插入图片描述

例如:

idusernamesex
1snow
2rose

对于上表中的一行数据,我要获取 username 为 snow 这列的值,有如下 2 种写法:

  1. rs.getString(“username”); 通过列名获取该列的值。

  2. rs.getString(2); 通过username列所在的位置获取该列的值。

使用JDBC查询数据库中的数据的步骤

  1. 注册驱动
  2. 获取连接
  3. 获取到Statement
  4. 使用Statement执行SQL
  5. ResultSet处理结果
  6. 关闭资源

案例代码

public class Demo04 {public static void main(String[] args) throws Exception {Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql:///day04_db", "root", "1234");Statement stmt = conn.createStatement();String sql = "select * from user";ResultSet rs = stmt.executeQuery(sql);// 内部有一个指针,只能取指针指向的那条记录while(rs.next()){// 指针移动一行,有数据才返回trueint id = rs.getInt("id");String name = rs.getString(2);String pwd= rs.getString(3);System.out.println(id+"+++"+name+"++++"+pwd);}// 关闭资源rs.close();stmt.close();conn.close();}
}





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

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

相关文章

汽车电子笔记之-013:旋变硬解码ADI芯片AD2S1210使用记录(从零开始到软件实现)

目录 1、概述 2、技术规格 3、芯片引脚 4、旋变信号格式 5、使用过程只是要点分析 5.1、程序注意点分析 5.1.1、SPI配置时序 5.1.2、问题一:SPI时序问题 5.1.3、问题二:SPI读取时序(配置模式) 5.1.4、问题三&#xff1a…

削峰+限流:秒杀场景下的高并发写请求解决方案

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 哈喽,大家好!我是小米,一个29岁、活泼积极、热衷分享技术的码农。今天和大家聊一聊应对高并发的写请求这个主题,尤其是在大促、秒杀这种场景下,系统…

非线性规划及其MATLAB实现

目录 引言 非线性规划的基本模型 非线性规划的求解方法 非线性规划的MATLAB实现 例子:多目标优化问题的非线性规划求解 表格总结:MATLAB常用非线性规划函数 实例:使用MATLAB求解非线性投资决策问题 结论 引言 非线性规划(…

ES6解构赋值详解;全面掌握:JavaScript解构赋值的终极指南

目录 全面掌握:JavaScript解构赋值的终极指南 一、数组解构赋值 1、基本用法 2、跳过元素 3、剩余元素 4、默认值 二、对象解构赋值 1、基本用法 2、变量重命名 3、默认值 4、嵌套解构 三、复杂的嵌套结构解构 四、函数参数解构赋值 1、对象解构作为函…

C/C++实现植物大战僵尸(PVZ)(打地鼠版)

🚀欢迎互三👉:程序猿方梓燚 💎💎 🚀关注博主,后期持续更新系列文章 🚀如果有错误感谢请大家批评指出,及时修改 🚀感谢大家点赞👍收藏⭐评论✍ 游戏…

2022高教社杯全国大学生数学建模竞赛C题 问题一(1) Python代码演示

目录 问题 11.1 对这些玻璃文物的表面风化与其玻璃类型、纹饰和颜色的关系进行分析数据探索 -- 单个分类变量的绘图树形图条形图扇形图雷达图Cramer’s V 相关分析统计检验列联表分析卡方检验Fisher检验绘图堆积条形图分组条形图分类模型Logistic回归随机森林import matplotlib…

GAN的损失函数和二元交叉熵损失的对应及代码

以下解释为GPT生成 这里有个问题,使用二元交叉熵,的时候生成器的损失如何体现 看代码 import torch import torch.nn as nn import torch.optim as optim# 设置设备为GPU或CPU device torch.device("cuda" if torch.cuda.is_available() el…

EndnoteX9安装及使用教程

EndnoteX9安装及使用教程 一、EndNote安装 1.1 下载 这里提供一个下载链接: 链接:https://pan.baidu.com/s/1RlGJksQ67YDIhz4tBmph6Q 提取码:5210 解压完成后,如下所示: 1.2 安装 双击右键进行安装 安装比较简单…

【C++11 —— 线程库】

C11 —— 线程库 thread类介绍线程函数参数原子性操作库(atomic)lock_guard与unique_lockmutex的种类lock_guardunique_lock 两个线程交替打印奇偶数 thread类介绍 在C11之前,涉及到多线程的问题,都是和平台相关的,比如windows和Linux下各有…

AI 时代程序员的应变之道

一、AI 浪潮来袭,编程界风云变幻 随着 AIGC 大语言模型如 ChatGPT、Midjourney、Claude 等的涌现,AI 辅助编程工具日益普及,程序员的工作方式正经历着深刻的变革。 分析公司 OReilly 日前发布的《2023 Generative AI in the Enterprise》报告…

【Linux基础】冯诺依曼体系结构操作系统的理解

目录 前言一,冯诺依曼体系1. 为什么有内存结构?2. 对硬件中数据流动的再理解 二,操作系统(Operator System)1. 概念2. 操作系统结构的层状划分3. 操作系统对硬件管理的理解4. 用户与操作系统的关系的理解5. 系统调用和库函数的关系6. 为什么要有操作系统…

策略路由与路由策略的区别

🐣个人主页 可惜已不在 🐤这篇在这个专栏 华为_可惜已不在的博客-CSDN博客 🐥有用的话就留下一个三连吧😼 目录 一、主体不同 二、方式不同 三、规则不同 四、定义和基本概念 一、主体不同 1、路由策略:是为了改…

android 删除系统原有的debug.keystore,系统运行的时候,重新生成新的debug.keystore,来完成App的运行。

1、先上一个图:这个是keystore无效的原因 之前在安装这个旧版本android studio的时候呢,安装过一版最新的android studio,然后通过模拟器跑过测试的demo。 2、运行旧的项目到模拟器的时候,就报错了: Execution failed…

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0916)

接口文档: https://apifox.com/apidoc/shared-26c67aee-0233-4d23-aab7-08448fdf95ff/api-93850835 接口根路径: http://big-event-vue-api-t.itheima.net 本项目的技术栈 本项目技术栈基于 ES6、vue3、pinia、vue-router 、vite 、axios 和 element-plus http:/…

RabbitMQ(高阶使用)死信队列

文章内容是学习过程中的知识总结,如有纰漏,欢迎指正 文章目录 一、什么是死信队列? 二、死信队列使用场景 三、死信队列如何使用 四、打车超时处理 1.打车超时实现 以下是本篇文章正文内容 一、什么是死信队列? 先从概念解释上搞…

idea插件推荐之Cool Request

Cool Request是一款基于IDEA的HTTP调试工具,可以看成是轻量版的postman,它会自动扫描项目代码中所有API路径,按项目分组管理。一个类被定义为Controller且其中的方法被RequestMapping或者XXXMapping注解标注以后就会被扫描到。 对应方法左侧会…

智能硬件从零开始的设计生产流程

文章目录 市场分析团队组建ID设计结构设计pcba设计软件开发手板EVT开模DVTPVTMP 智能硬件研发是一个复杂的过程, 当然一件事要发出萌芽必须得有人, 有一天,几个合伙人凑在一起,说一起开发个智能硬件产品吧,于是故事开始了. 市场分析 合伙人: 万物互联的时代, 智能音箱已经成为…

LDR6020,单C口OTG,充放一体新潮流!

PD(Power Delivery)芯片实现单Type-C接口输入和输出OTG(On-The-Go)功能,主要是通过支持USB Power Delivery规范和OTG功能的特定硬件和软件设计来实现的。以下是对这一过程的具体解释: 一、PD芯片基础功能 …

Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用增强扩展(text2sql)

前言 我在上一篇文章中《Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用(text2sql)》 利用langchain 中create_sql_agent 创建一个数据库代理智能体,但是实测中发现,使用 create_sql_agent 在对话中&#x…

Qt控制开发板的LED

Qt控制开发板的LED 使用开发板的IO接口进行控制是嵌入式中非常重要的一点,就像冯诺依曼原理说的一样,一个计算机最起码要有输入输出吧,我们有了信息的接收和处理,那我们就要有输出。 我们在开发板上一般都是使用开发板的GPIO接口…