使用JDBC操作数据库

2023-11-19

导包 数据库驱动包 msql-connector-java

1.掌握JDBC连接数据库

1.1 JDBC 流程图

mysql
oracle
Java应用程序
JDBC API
JDBC DriverManager
JDBC 驱动
JDBC 驱动
MySQL数据库
Oracle数据库
  1. Connection接口 数据库连接接口(想操作数据库 首先就要连接起来 其实就是驱动对接)
  2. Statement接口 语句执行者(SQL语句执行平台) 它能够帮助你在连接建立好之后 进行SQL语句执行
  3. ResultSet接口 结果集 它是数据库执行完对应的【查询】之后得到的伪数据表集合

在这里插入图片描述

		Connection conn = null;
		Statement state = null;
		ResultSet rs = null;
		try {
			/**1.加载驱动(驱动<对应JavaJDBC的实现类>是数据库厂商提供)*/
			Class.forName("com.mysql.jdbc.Driver");  // 本来Class.forName() 获取对应的类的字节码对象
			// DriverManager.registerDriver(new Driver()); 因为它的静态代码块已经注册过了 所以不用了
			/**2.建立与数据库的连接*/
			// p1:数据库地址   p2:数据库用户名  p3:数据库密码
			// HTTP协议:http://localhost:8080     你现在是JDBC连接 所以它也有固定前缀 jdbc:数据库://
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/kgcnews", "root", "root");
			/**3.创建SQL语句执行平台*/
			state = conn.createStatement();
			/**4.准备SQL语句*/
			String sql = "select * from news_detail limit 5";
			/**5.语句执行平台执行SQL语句*/
			rs = state.executeQuery(sql);
			/**6.处理结果集(只在查询的时候才有,可以理解为是一个伪查询到的表)*/
			// 每一次next()表示判断是否存在下一行  而且可以理解为有一个虚拟的指针指向了某行
			while(rs.next()) {
				// 将某行的指定列数据取出来 并 转换为合适的Java数据类型
				int id = rs.getInt(1); // 根据列的索引获取对应的列内容
				String title = rs.getString(3);
				String author = rs.getString("author");  // 根据列的名称来获取列内容(有别名记得改为别名)
				System.out.println(id+"--"+title+"--"+author);
			}
		
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				rs.close();
				state.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

2.使用JDBC对数据库进行Crud操作

2.1 最开始的步骤

  1. 加载驱动
  2. 获取连接
  3. 创建语句执行者
  4. 编写SQL语句
  5. 执行SQL语句
  6. 处理结果集(如果是增删改 没有结果集)
  7. 释放资源(关闭连接…)
public class JDBCDemo3 {

	public static void main(String[] args) {
		Connection conn = null;
		Statement state = null;
		try {
			// 1.加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			// 2.获取连接 本地可以省略那串
			conn = DriverManager.getConnection("jdbc:mysql:///kgcnews", "root", "root");
			// 3.创建语句执行者
			state = conn.createStatement();
			// 4.编写SQL语句
			String sql = "update news_category set name = '汽车' where id = 8";
			// 5.执行SQL语句
			int rows = state.executeUpdate(sql);
			if(rows > 0) {
				System.out.println("修改成功!");
			}else {
				System.out.println("修改失败!");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				state.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

}

在这里插入图片描述

2.2 解决SQL注入之后采用步骤

  1. 加载驱动
  2. 获取连接
  3. 编写SQL语句
  4. 根据SQL语句创建语句执行者。(预编译SQL)
  5. 如果有占位符 给占位符赋值
  6. 执行SQL语句
  7. 处理结果集…
  8. 释放资源
public class JDBCDemo5 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入用户名:");
		String username = input.next();
		System.out.print("请输入密码:");
		String password = input.next();
		
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			/** 1.加载驱动(驱动<对应JavaJDBC的实现类>是数据库厂商提供) */
			Class.forName("com.mysql.jdbc.Driver"); // 本来Class.forName() 获取对应的类的字节码对象
			/** 2.建立与数据库的连接 */
			// p1:数据库地址 p2:数据库用户名 p3:数据库密码
			// HTTP协议:http://localhost:8080 你现在是JDBC连接 所以它也有固定前缀 jdbc:数据库://
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/kgcnews", "root", "root");
			/** 3.准备SQL语句 */
			String sql = "select * from news_user where username = ? and password = ?";
			/** 4.创建SQL语句执行平台 */
			ps = conn.prepareStatement(sql);
			/** 5.给占位符赋值  索引从1开始 */
			ps.setString(1, username);
			ps.setString(2, password);
			/** 6.语句执行平台执行SQL语句 */
			rs = ps.executeQuery();
			/** 6.处理结果集(只在查询的时候才有,可以理解为是一个伪查询到的表) */
			// 每一次next()表示判断是否存在下一行 而且可以理解为有一个虚拟的指针指向了某行
			boolean flag = false;
			while (rs.next()) {
				flag = true;
			}
			System.out.println(flag == true ? "登录成功!" : "登录失败!");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				rs.close();
				ps.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

}

模糊查询 ==需要写concat 不写会报错,数据库中写写sql的话 不需要concat 代码中需要加 ==

StringBuffer sql=new StringBuffer();
			List<Object> params=new ArrayList<>();
			 sql.append("select * from news_detail where 1=1 ");
			 if(categoryId!=null && categoryId>0) {
				 sql.append(" and categoryId=? ");
				 params.add(categoryId);
			 }
			 if(!(StringUtils.isNullOrEmpty(title))) {
				 sql.append(" and title like CONCAT('%',?,'%')");
					params.add(title);
			 }
			 sql.append(" order by createDate desc limit ?,?");
			 params.add(startIdex);
			 params.add(pageSize);
			 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用JDBC操作数据库 的相关文章

  • STM32CubeMAX:H库函数整理笔记

    GPIO HAL GPIO TogglePin GPIO TypeDef GPIOx uint16 t GPIO Pin 功能 用于切换指定的GPIO引脚 HAL GPIO EXTI Callback uint16 t GPIO Pin 功
  • Windows应急响应-入侵排查

    Windows应急响应 入侵排查 1检测系统账户安全 查看服务器有没有可疑账户新增账户 Win R lusrmgr msc 看有没有新增加用户 查看服务器有没有隐藏用户克隆账户 第一步 Win R打开运行窗口 输入regedit打开注册表编
  • cehp 维护(二)常见告警维护

    零 修订记录 序号 修订时间 修订内容 1 2021 11 18 新增 一 摘要 笨猪主要介绍ceph常见告警及维护方法或过程中遇到的问题 二 环境信息 2 1 ceph版本 cephadmin proceph01 ceph v ceph
  • 为什么不发展三进制计算机,三进制计算机

    三进制计算机 是以三进法数字系统为基础而发展的计算机 三进制逻辑相比较现今的计算机使用二进制数字系统更接近人类大脑的思维方式 二进制计算规则非常简单但并不能完全表达人类想法 在一般情况下 命题不一定为真或假 还可能为未知 在三进制逻辑学中
  • 折半查找算法 ,又称二分查找。(C语言)

    分析 此题目的是找到k 7的数 k的值可随便更改 如果数组中没有k对应的值 则找不到这个数字 并且输出查找次数 代码 include
  • Django 项目部署

    Django 项目部署 1 概述 将开发完成的 Django 项目部署到指定的服务器上 而服务器的系统基本都是 linux Django 项目当前最主要的部署方式是 Python Django Nginx uWSGI python 是 py
  • 一键换衣,任何图片局部一键AI修改,超强“魔法棒”!

    今天分享一个咱们的AI绘画工具的一个强大功能 它能够针对图片的任意局部进行一键AI修改 炒鸡强大 下面是花了几分钟修改的一张图片 原图 修改后 看出区别没有 头发颜色 裤子 项链 背景画面都发生了改变 下面就来揭秘咱是怎么操作的 首先打开软
  • Ceph 4 slow ops, oldest one blocked for 638 sec, mon.cephnode01 has slow ops

    因为实验用的是虚拟机的关系 晚上一般会挂起 第二天早上都能看到 4 slow ops oldest one blocked for 638 sec mon cephnode01 has slow ops的报错 虽然不影响使用 但看着有点难受
  • 【100%通过率 】【华为OD机试c++\python】组合出合法最小数【2023 Q1 A卷

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 给一个数组 数组里面都是代表非负整数的字符串 将数组里所有的数值排列组合拼接起来组成一个数字 输出拼接成的最小的数字 输入描述 一个数组 数组不
  • oracle函数与触发器

    1 无参函数 CREATE OR REPLACE FUNCTION func1 RETURN VARCHAR2 IS BEGIN RETURN 欢迎你 USER 现在是 to char SYSDATE yyyy mm dd END func
  • 笔记总结备份

    目录 文章目录 目录 前言 版本控制 常用git 命令 操作系统 系统 机器数 时间管理 早期的 Linux 时间系统 中断 内存管理 内存分区 malloc申请一块内存的背后原理 RTOS 系统栈和协议栈 寄存器 磁盘调度算法 虚拟内存
  • python 把数据写到tet_Crawlab准备之python+scrapy环境搭建

    上篇 分布式爬虫管理平台Crawlab开发搭建 把爬虫的管理后台搭建起来了 捣鼓一番发现要真正爬取数据还有下不少的功夫 这篇看看怎么搭建python scrapy环境 0x01 安装Python3 下载python安装包 具体版本根据自己的
  • 关于矩形窗函数DFT和FFT的笔记

    一直想写这个程序 今日终于如尝所愿 非常开心 矩形窗函数的FT是个什么样子呢 1 先从理论上分析一下 如图所示 贼简单 我们在二维坐标系里只能画出信号的幅度谱 F w 那么矩形窗的幅度谱是啥形状呢 本科的时候快把Sa函数的图画烂了 这时 我
  • Lustre客户端挂载失败报错

    查看 var log messages日志 发现出现OST0001等待OST0002分配序列号的报错 Jul 26 01 36 20 mds001 kernel perf interrupt took too long 11438 gt 1
  • 即时通信工具简介

    即时通信工具 什么是即时通信 即时通信是基于网络的一种新兴应用 它最基本的特征就是信息的即时传递和用户的交互性 并可将音 视频通信 文件传输及网络聊天等业务集成为一体 为人们开辟了一种新型的沟通途径 简单地讲 即时通信是一种使人们能在网络上
  • UP9616Q自带识别功能降压QC3.0车载快充芯片方案

    UP9616Q是一个高效率降压转换器能够提供高达3 3A充电器输出电流接口和一个宽范围输入电压 输入电压可从8V至32V 可工作在CV 恒定输出电压 模式 或 CC 恒定输出电流 模式 并带有电流限制功能 UP9616具有恒定的输出QC高通
  • Hyperledger Fabric配置文件解析-configtx.yaml

    configtx yaml简介 transaction的英文缩写是TX 表示交易 configtx表示交易配置 所以和交易相关的配置 如应用通道 锚节点 Orderer服务等 都是在configtx yaml文件中配置的 它主要生成通道创世
  • 自学黑客【网络安全】,一般人我劝你还是算了吧

    一 前言 1 这是一条坚持的道路 三分钟的热情可以放弃往下看了 2 多练多想 不要离开了教程什么都不会了 最好看完教程自己独立完成技术方面的开发 3 有时多 google baidu 我们往往都遇不到好心的大神 谁会无聊天天给你做解答 4

随机推荐

  • U盘制作成启动盘后容量变小怎么恢复

    今天用雨林木风做U盘启动后发现原本29G的可用空间只有25G可用了 怎么格式化都没办法还原 最后百度过后才知道出现这一问题的主要原因是在制作启动u盘时 软件会占用u盘部分空间进行制作并将这些空间隐藏起来 所以导致u盘的容量变小 恢复的方式也
  • maven笔记:maven创建archetype时的package路径错乱问题

    在使用mvn archetype create from project创建代码工程模板时 代码模板的import位置会出现 package 有时候可能会出现 紊乱 情况 比如org apache log4j 会被替换成net pgia i
  • centos7安装redis

    文章目录 1 检查是否安装Redis依赖 2 解压并编译安装 3 设置开机启动 3 1配置文件中允许后台运行 3 2redis服务文件中修改 1 检查是否安装Redis依赖 Redis是基于C语言编写的 需要gcc依赖 检查gcc是否安装
  • 使用Fragment作为Item的ViewPager不更新问题.

    最近做一个项目 需要在内存里动态切换ViewPager里面的Fragment 但是无论是我创建ViewPager还是刷新Adapter 只要被展示过的Fragment就不刷新 蛋疼了一下午 终于研究出来鸟 我首先使用的是fragmentPa
  • C语言实现的贪吃蛇(无EasyX,详解)

    前言 或许厌倦了枯燥的做题 那就学学贪吃蛇 激发你的学习乐趣吧 你将进一步加深对结构体 单链表 函数 循环等基础的理解 希望对你有所帮助 纯C实现的贪吃蛇 前言 代码效果 视频 学习新函数 让你的代码变得 高大上 任意位置输出 重点注意事项
  • SaveRenderTextureToPNG保存贴图到本地

    将RenderTexture保存成一张png图片 public bool SaveRenderTextureToPNG RenderTexture rt string contents string pngName RenderTextur
  • Nginx-内存池

    系列文章目录 Nginx资源目录简介 第一章 Nginx学习入门之内存池分析 文章目录 系列文章目录 Ngxin内存池简介 一 nginx内存池结构体 二 使用步骤 1 Ngix 内存池原理 内存作用范围 总结 Ngxin内存池简介 Ngi
  • maven 教程

    Maven项目管理 Maven是什么 Maven是Apache下的项目管理工具 它由纯Java语言开发 可以帮助我们更方便的管理和构建Java项目 为什么要使用Maven jar包管理 从Maven中央仓库获取标准的规范的jar包以及相关依
  • 故障:fork failed:Resource Temporarily Unavailable解决方案

    故障 fork failed Resource Temporarily Unavailable解决方案 在一次crontab bkapp txt导入N多定时任务时候 该用户无法执行任何命令 再ssh连报fork failed Resourc
  • oVirt快速安装指南

    介绍 此文档是针对第一次安装使用oVirt的用户 带领你们逐步完成oVirt的安装 基本环境设置和安装虚拟机 css 系统需求 下面介绍的系统要求只适合典型的中小规模环境的安装 若是对于安装 系统规划和负载均衡有特殊要求的用户 也可使用下面
  • 如何看待中小企业实现数字化转型难的问题?_光点科技

    中小企业在今天的商业环境中扮演着至关重要的角色 它们为就业创造了大量机会 促进了创新 支持了经济增长 然而 中小企业在数字化转型方面面临着许多挑战 这些挑战使得实现数字化转型变得困难 资源限制 中小企业通常拥有有限的资金和人力资源 这使得数
  • Onvif协议学习:12、修改分辨率

    Onvif协议学习 12 修改分辨率 文章目录 Onvif协议学习 12 修改分辨率 1 原理简介 2 函数接口 3 编码流程 4 示例代码 原文链接 https blog csdn net benkaoya article details
  • fc2 php,fc2fans_club.py

    import re from lxml import etree need install import json import ADC function def getTitle htmlcode 获取厂商 print htmlcode
  • 简单看看TypeScript、C# 和 Delphi 这三种编程语言

    TypeScript C 和 Delphi 是三种不同的编程语言 它们都有自己的特点和适用领域 在本篇博客中 我们将对这三种语言进行比较和介绍 分析它们的共同点和区别 TypeScript 是由微软公司的 Anders Hejlsberg
  • xctf-supersqli

    xctf supersqli 堆叠注入 一 堆叠注入 本次采用的靶场xctf的supersqli 一 堆叠注入 进入靶场 发现一个提示框 先随便点一下提交 发现输出了些东西 输入1 判断存在注入点 分别输如1 1 1 2 判断为单引号注入
  • MatConvNet 框架的mnist实例

    mnist 手写是被 cnn mnist m 主函数代码 function net info cnn mnist varargin 主函数 cnn mnist 功能 1 初始化CNN 2 设置各项参数 3 读取和保存数据集 4 初始化tra
  • (图像变换)Python-opencv,(批处理笛卡尔坐标系,也就是平时咱们看到的正常图片)二维彩色图像转化为极坐标系下的图像

    这个其实代码量不大 但对于我这个啥也编不出来的废柴来说我觉得真的好不容易 历经两天的痛苦折磨 终于完成了 下面进入正题 昨天我找了一天代码 然后挑挑拣拣也就找到一篇还是c 的图像极坐标化处理 代码如下 include
  • linux查看显卡型号p4卡或者t4卡_NVIDIA Tesla GPU系列P4、T4、P40以及V100参数性能对比...

    NVIDIA Tesla系列GPU适用于高性能计算 HPC 深度学习等超大规模数据计算 Tesla系列GPU能够处理解析PB级的数据 速度比使用传统CPU快几个数量级 NVIDIA Tesla GPU系列P4 T4 P40以及V100是Te
  • substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。

    tableData sbsj result sbsj substr 0 result sbsj indexOf
  • 使用JDBC操作数据库

    导包 数据库驱动包 msql connector java 1 掌握JDBC连接数据库 1 1 JDBC 流程图 mermaid svg oRZnGw9oql7DhsSu label font family trebuchet ms ver