JDBC和数据库应用总结

news2024/11/23 15:40:24

文章目录

    • 1. JDBC介绍
    • 2. 相关jar包引入
    • 3. JDBC与数据库基本连接
    • 4. JDBC API 详解
      • 4.1 Connection 接口
      • 4.2 Statement 接口
      • 4.3 ResultSet
    • 5. PreparedStatement 详解

1. JDBC介绍

  JDBC是一套标准接口,这套接口用于操作所有的数据库,不同的数据库厂商对迎合这套标准接口的相关操作都有着对应的实现类,这个实现类也就是对应的jar包即驱动程序。
在这里插入图片描述

2. 相关jar包引入

 Maven工程(依赖导入)

<!--mysql驱动连接 jar包-->
<dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>8.0.31</version>
 </dependency>

3. JDBC与数据库基本连接


在这里插入图片描述

 核心代码

	// 1. 注册驱动
	Class.forName("com.mysql.cj.jdbc.Driver");
	// 2. 获取连接 - jdbc:mysql://ip地址:端口号/数据库名
	// 若是本机mysql并且端口默认 可以省写 jdbc:mysql:///db_a?useSSL=false
	String url = "jdbc:mysql://127.0.0.1:3306/db_a";
	String username = "root";
	String password = "123456";
	Connection conn = DriverManager.getConnection(url, username, password);
	// 3. sql 语句
	String sql = "update tb_user set id = 1 where id = 1;";
	// 4. 获取执行的sql对象
	Statement stmt = conn.createStatement();
	// 5. 执行
	int k = stmt.executeUpdate(sql);
	// 6. 获取结果集
	System.out.println(k); // 1 
	// 7. 关闭连接
	stmt.close();
	conn.close();

4. JDBC API 详解

4.1 Connection 接口

  Connection 接口作用
在这里插入图片描述

  A. 获取执行SQL的对象
在这里插入图片描述

  B. 对事务进行管理
在这里插入图片描述

public static void main(String[] args) throws Exception {
		Class.forName("com.mysql.cj.jdbc.Driver");
		String url = "jdbc:mysql://127.0.0.1:3306/db_a";
		String username = "root";
		String password = "123456";
		Connection conn = DriverManager.getConnection(url, username, password);

		try{
			conn.setAutoCommit(false);
			String sql = "update tb_user set username = 4 where id = 4;";
			Statement stmt = conn.createStatement();
			int k = stmt.executeUpdate(sql);
			System.out.println(k); // 1, 证明已经成功处理

			int x = 4 / 0; // 这里故意发生错误, 当发生错误时候,会发生错误回滚,数据库数据不会修改

			stmt.close();
			conn.close();
		}catch (Exception e){
			conn.rollback();
			e.printStackTrace();
		}

在这里插入图片描述

4.2 Statement 接口

  核心作用 : 执行相关SQl语句
在这里插入图片描述

4.3 ResultSet

  核心作用 : 对查询对象的结果集进行封装,获取相应查询结果
在这里插入图片描述
  案例展示:

	public static void main(String[] args) throws Exception {
		Class.forName("com.mysql.cj.jdbc.Driver");
		String url = "jdbc:mysql://127.0.0.1:3306/db_a";
		Connection conn = DriverManager.getConnection(url, "root", "123456");

		String sql = "select * from tb_user;";
		Statement stmt = conn.createStatement();

		ResultSet rst = stmt.executeQuery(sql);
		while (rst.next()) { // 获取结果集 : 可以根据索引(从1开始)或者列名
			int id = rst.getInt(1);
			String name = rst.getString("username");
			String password = rst.getString(3);
			System.out.println(id + " " + name + " " + password);
		}

		stmt.close();
		conn.close();
	}

在这里插入图片描述

5. PreparedStatement 详解

在这里插入图片描述
  A. 预编译SQL语句 —— 提升性能 : 因为对于每一个sql语句若使用普通的SQL对象进行使用的话, 需要每一次都对SQL对象进行检查和编译操作,即使对于相同的SQL语句这些操作也是不可避免的。 而使用PreparedStastement之后就可以对相同的sql模板进行一次检查与编译操作,简耗的时间的花销。

  B. 防止SQL注入(即原本的拼接字符串的操作可能导致某些特定字符串写上去过后导致字符串的验证操作永远为 true), PreparedStatement 可以将需要用户填入的部分使用 ? 来代替,然后再将用户输入的字符串放入到对应的?上面去,并且会对一些敏感字符进行转义(例如将 ’ 改为 /’ , 前面加上一个斜杠来进行转义, 防止引起字符串拼接所导致的错误 )
  例如以下图片: 最后导致拼接的结果永远为true
在这里插入图片描述

 实例:
在这里插入图片描述

	public static void main(String[] args) throws Exception {
		Class.forName("com.mysql.cj.jdbc.Driver");
		String url = "jdbc:mysql://127.0.0.1:3306/db_a?&useServerPrepStmts=true"; // 后面一定要加上 useServerPrepStmts=true 才证明预处理开启
		Connection conn = DriverManager.getConnection(url, "root", "123456");

		String sql = "update tb_user set password = ? where id = ?";
		PreparedStatement psmt = conn.prepareStatement(sql); // 在此个语句进行就已经完成检查编译操作
		psmt.setString(1,"xxxx");
		psmt.setInt(2, 6);
		psmt.executeUpdate();

		psmt.close();
		conn.close();
	}

在这里插入图片描述

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

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

相关文章

在C#下运行Python:IronPython和Pythonnet

在C#下运行Python可能有不同的原因。其中一些原因包括&#xff1a; 使用C#应用程序中不可用的特定Python功能或库。结合Python的简单性和表现力以及C#的性能和稳健性&#xff0c;完成不同任务。与基于Python的系统或服务进行集成。 为实现Python和C#之间的互操作性&#xff0…

Java日志框架介绍

​今天来聊一聊 Java 日志框架&#xff0c;不管是在项目开发阶段的调试&#xff0c;还是项目上线后的运行&#xff0c;都离不开日志。日志具有处理历史数据、定位程序问题、理解程序运行过程等重要作用。在 Spring 项目开发过程中我们常见的日志框架可能就是 logback、log4j2 和…

Go学习圣经:Go语言实现高并发CRUD业务开发

说在前面&#xff1a; 现在拿到offer超级难&#xff0c;甚至连面试电话&#xff0c;一个都搞不到。 尼恩的技术社群中&#xff08;50&#xff09;&#xff0c;很多小伙伴凭借 “左手云原生右手大数据”的绝活&#xff0c;拿到了offer&#xff0c;并且是非常优质的offer&#…

APP/小程序嵌入游戏,游戏飞跃的赛道

APP/小程序接入游戏运营已不是新鲜事&#xff0c;然而&#xff0c;其仍具有巨大的发展潜力&#xff0c;尤其是社交类APP&#xff0c;多以加入娱乐游戏增加互动&#xff0c;获取目标客户&#xff0c;同时为产品增加变现渠道&#xff0c;实现双赢。 对于APP嵌入式游戏&#xff0…

Java之SpringCloud Alibaba【一】【Nacos一篇文章精通系列】

Java之SpringCloud Alibaba【一】【Nacos一篇文章精通系列】 一、微服务介绍1、系统架构演变1&#xff09;单体应用架构2&#xff09;垂直应用架构3&#xff09;分布式4&#xff09;SOA架构5&#xff09;微服务框架6&#xff09;常见微服务架构 2、SpringCloud Alibaba介绍3、S…

【C语言督学训练营 第十四天】二叉树真题实战 ----- 层序建树、前中后序遍历、求树的WPL

文章目录 前言树概念二叉树层序建树四种遍历二叉树的方式层次遍历前序遍历中序遍历后续遍历 真题实战&#xff01; 前言 今天进行总结的是考研408有关二叉树的基础知识&#xff0c;是王道C语言督学营的第十四天&#xff0c;随着课程的深入&#xff0c;代码实战的难度慢慢的上来…

MyCat01——如何实现MySQL中的主从复制

1 问题 数据对于我们来说是一项最重要的资产&#xff0c;因为数据丢失带来的损失&#xff0c;对于一家公司来说&#xff0c;有时也是毁灭性的。 那么如何确保数据安全&#xff0c;不因断电或系统故障带来数据丢失呢&#xff1f; 当用户增加&#xff0c;对数据库的访问量也随…

推荐一款好用的时序预测工具——Alibaba DChain Forecast

前言 绝大部分行业场景&#xff0c;尤其是互联网、量化行业&#xff0c;每天都会产生大量的数据。金融领域股票价格随时间的走势&#xff1b;电商行业每日的销售额&#xff1b;旅游行业随着节假日周期变化的机票酒店价格等。我们称这种不同时间收到的&#xff0c;描述一个或多…

Ajax技术的秘密揭秘:异步传输,高效交互

文章目录 I. 什么是AjaxAjax的定义和起源Ajax与传统的Web应用程序之间的区别 II. Ajax的工作原理Ajax的基本原理Ajax如何通过异步传输实现无需刷新页面 III. Ajax的应用场景在Web应用程序中应用Ajax的优势Ajax在哪些场景中使用 IV. Ajax的组成部分和APIXHR对象FormData对象Fetc…

用postman进行web端自动化测试

目录 前言 一、抓包&#xff08;使用Charles抓包工具&#xff09; 二、选择请求方法 三、填写url地址 四、填写Header 五、填写body 六、断言&#xff08;Tests页&#xff09; 七、获取动态参数——例如token 八、设置静态参数&#xff08;请求地址、账号密码等&#x…

【Django-功能优化】存储、循环、操作选择对代码性能的影响

功能开发背景 港口货轮需要进行集装箱的装卸任务&#xff1a; 船上的每一个集装箱&#xff0c;可以用三个维度的坐标来唯一定位&#xff1a;(bay, column, layer)&#xff0c;这三个维度结合其他一些固有信息&#xff0c;构成了一个箱子的字段属性&#xff0c;存储在箱子数据表…

百度的人脸识别的技术

百度的人脸识别的技术 1.基本概念 分组&#xff1a;分组ID&#xff08;group_id&#xff09;&#xff1a;分组ID用于对一组相关的人脸进行分组和管理。你可以根据自己的需求&#xff0c;将不同的人脸数据分配到不同的分组中。例如&#xff0c; 你可以根据人员的职位、部门或其…

Nginx优化安全防盗链

1.Nginx的页面优化 1.1 Nginx的网页压缩 在Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能。进行相关的配置修改&#xff0c;就能实现Nginx页面的压缩&#xff0c;达到节约带宽&#xff0c;提升用户访问速度 1.2 配置Nginx的图片缓存 当Nginx将网页数据返回给…

阿里云企业邮箱免费版、标准版、集团版和尊享版区别

阿里云企业邮箱版本分为免费版、标准版、集团版和尊享版&#xff0c;除了价格区别&#xff0c;功能方面有什么差异&#xff1f;如何选择企业邮箱版本&#xff1f;免费版0元适合初创型企业&#xff0c;标准版适合大、中、小型企业使用&#xff0c;涉及子公司之间邮箱通讯可以选择…

jQuery学习

原生实现计数器 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wi…

getopt_long 函数的使用

getopt_long 函数的使用网上已经有很多了&#xff0c;这里只是记录一下方便自己后续查找。首先函数原型声明&#xff1a; #include <getopt.h>int getopt_long(int argc, char *argv[],const char *optstring,const struct option *longopts, int *longindex); 函数是用…

Navicat使用导入向导批量插入数据到数据库

Mybatis,"可持久层数据库框架" Html,"超文本标记语言" Css,"网页外设计语言" JavaScript,"用户行为交互" Jquery,"提升网页开发效率的一种框架" Vue,"前端开发框架" Vant,"前开发预装组件库" git,"…

SM2算法对比RSA算法,有哪些优势?

SM2算法和RSA算法都是公钥密码算法&#xff0c;SM2算法是一种更先进安全的算法&#xff0c;在安全性能、速度性能等方面都优于RSA算法&#xff0c;在我国商用密码体系中被用来替换RSA算法。国家密码管理局于2010年12月17日发布了SM2算法&#xff0c;并要求现有的基于RSA算法的电…

《面试1v1》Redis基础

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

Golang/Python 调用 openAI 的API 详解

学习目标&#xff1a; OpenAI API介绍 学习如何通过 Golang 使用 OpenAI 的 API OpenAI 的常用的参数及其说明 了解OpenAI API 中令牌&#xff08;tokens) OpenAI API 提供了几个不同的终端点&#xff08;endpoints&#xff09;和模式&#xff08;modes&#xff09; 复杂和…