当前位置: 首页 > news >正文

临沂自助建站软件专业关键词优化平台

临沂自助建站软件,专业关键词优化平台,布吉做网站公司,网站空间大小选择扩展提升学习 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学习心得,欢迎指正&#xff0…

扩展提升学习

😄生命不息,写作不止
🔥 继续踏上学习之路,学之分享笔记
👊 总有一天我也能像各位大佬一样
🏆 博客首页   @怒放吧德德  To记录领地
🌝分享学习心得,欢迎指正,大家一起学习成长!

在这里插入图片描述

文章目录

  • 扩展提升学习
    • 简介
    • 1、获取自增长主键回显
      • (1)、操作过程
      • (2)、代码
      • (3)、代码解析
    • 2、批量插入数据优化
      • 优化前
      • 优化后
    • 3、事务
      • 事务的概念
      • 在JDBC中操作事务

简介

上一两篇文章介绍了jdbc的使用过程以及statement与prepareStatement的用法和优缺点,这次就接着来学习一下扩展提升。

1、获取自增长主键回显

在新增数据的时候,如果主键标识是自增,往往会返回本次插入的自增标识。然而JDBC是支持将自增主键返回回来。

(1)、操作过程

其使用流程与之前的并没有什么不同,都是从 注册驱动、建立连接、编写SQL语句、创建preparedStatement对象、发送SQL语句、解析结果集、释放资源 具体流程如下图所示。
在这里插入图片描述

(2)、代码

/*** @Author: lyd* @Description: 获取自增主键的id回显* @Date: 2023/8/12*/
public class JDBCPSOtherPart {@SneakyThrowspublic static void main(String[] args) {// 注册驱动Class.forName("com.mysql.cj.jdbc.Driver");// 创建连接Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/cloud_user", "root", "12356");// 编写SQL语句String sql = "insert into tb_user(username,address) values(?,?);";// 创建preparedStatement// 这样并不会返回主键, 要想返回就需要携带另一个参数:Statement.RETURN_GENERATED_KEYSPreparedStatement preparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);// 占位符赋值preparedStatement.setObject(1, "lkj");preparedStatement.setObject(2, "beijing");// 发送sql并获取结果集int i = preparedStatement.executeUpdate(); // 返回的是几行受影响// 获取存储主键结果集对象/只有主键ResultSet generatedKeys = preparedStatement.getGeneratedKeys();generatedKeys.next();System.out.println("操作成功" + i + "行受影响, 主键id为: " + generatedKeys.getLong(1));// 关闭资源generatedKeys.close();preparedStatement.close();connection.close();}
}

(3)、代码解析

在上面的示例中,基本的方式是相同的,也是使用executeUpdate()来插入数据,在创建预编译对象的时候,需要在放入sql语句携带另一个参数:Statement.RETURN_GENERATED_KEYS,这个参数告诉JDBC在执行插入语句后返回生成的主键。之后,就可以使用 getGeneratedKeys() 方法获取包含生成的主键值的 ResultSet 对象(这个对象只有一行一列,只是存放主键)。我们先将游标往下移一个位置,然后可以使用 getLong(1) 来获取第一列的自增主键值。

我们可以看一下这个方法,这里官方是有标注这通过Statement.RETURN_GENERATED_KEYS or Statement.NO_GENERATED_KEYS 来判断是否需要返回自增的键值,其返回是一个ResultSet对象。
在这里插入图片描述

2、批量插入数据优化

在现实开发中,肯定会需要需要插入万条以上的数据,在本次学习中,我们采用jdbc进行批量插入。在不优化的情况下,运行起来的时间是需要很久的,性能也会很拉跨。

优化前

在没有优化的时候,我们就是在预编译Statement对象中放入不同的值,并且每次去执行一下sql,这样的执行方式会导致执行时间比较长,性能也比较差,因为每次的插入就需要一次IO,IO次数越多越会导致性能的底下。

核心的代码如下

for (int i = 0; i < 10000; i++) {preparedStatement.setObject(1, "batch" + i);preparedStatement.setObject(2, "hangzhou");// 发送sql并获取结果集preparedStatement.executeUpdate();
}

我们看一下运行结果,当运行的时候就需要好久才能够结束,我们可以看到,在执行1万次插入需要执行18.64s。
在这里插入图片描述

优化后

优化前的执行方式就相当于是for循环去执行了1万次插入,在sql语句中,其实批量插入是可以追加的形式,每次数据用","隔开。

INSERT INTO table (column1, column2)
VALUES('value1_1', 'value2_1'),('value1_2', 'value2_2'),('value1_3', 'value2_3'),...;

在使用jdbc也是可以的,JDBC提供了相关方法:addBatch()进行追加和executeBatch()去执行SQL来批量插入,这样的效果就比上面的好,优化前需要执行1万次IO,而采用批量插入就只需要执行1次IO。

for (int i = 0; i < 10000; i++) {preparedStatement.setObject(1, "opt" + i);preparedStatement.setObject(2, "hunan");// 发送sql并获取结果集preparedStatement.addBatch(); // 不直接执行插入,追加到后面
}
preparedStatement.executeBatch(); // 批量操作

我们执行一下并且查看一下执行速度。

在这里插入图片描述

然而我们会发现,奇怪了,我已经使用了批量插入,但是执行的时间还是那么久,这到底是为什么呢?别慌,这是因为,在使用批量插入的时候,他是需要一定条件的,首先是我们需要在路径后面追加一个**?rewriteBatchedStatements=true** 代表允许这样的操作。并且还需要注意,在语句后面不能加”;“,否则拼接出来的sql会是错误的。

在这里插入图片描述

我们可以看到,这回执行1万条数据的时间就大大缩短了。从刚开始的18秒多降到1秒都不到。然而在此笔者需要说一下,在日常开发的时候,能尽量减少IO次数的就尽量减少,比如批量删除,也是可以用这样的形式操作。当然减少IO次数的做法是需要因地制宜的。

3、事务

事务的目的是确保数据库在执行过程中始终保持一致性和完整性,即使发生了系统故障或其他问题。

事务的概念

在数据库中,事务通常具有以下四个特性,通常被称为 ACID 特性:

  • 原子性(Atomicity): 事务被视为不可分割的最小工作单位,要么全部成功完成,要么全部失败回滚。即,事务的操作要么全部执行,要么一个都不执行。

  • 一致性(Consistency): 事务在执行前后,数据库从一个一致性状态转换到另一个一致性状态。这意味着事务执行后,数据库的完整性约束仍然得到保持。

  • 隔离性(Isolation): 事务之间是相互隔离的,一个事务的操作不应该对其他事务产生影响。即,每个事务都应该像它是系统中唯一的事务一样。

  • 持久性(Durability): 一旦事务提交成功,其所做的更改将永久保存在数据库中,即使发生系统故障也不会丢失。

事务的使用场景包括数据库中的插入、更新、删除操作,以及需要确保数据一致性的任何操作。通过使用事务,可以确保数据库在任何情况下都能保持数据的正确性和完整性,从而提高数据的可靠性。

在JDBC中操作事务

在jdbc中,我们可以简单的使用事务,首先需要关闭自动提交,在执行SQL后,手动进行提交事务,如果抛出异常就在异常处理进行回滚。

我们可以看一下, 主要的使用方式

try{connection.setAutoCommit(false); // 关闭自动提交事务// 增删修改的SQL执行connection.commit(); // 提交事务
} catch (Exception e) {connection.rollback(); // 回滚事务
} finally {// 关闭资源connection.close();
}

代码如下

/*** @Author: lyd* @Description: JDBC事务的使用* @Date: 2023/8/12*/
public class JDBCTransaction {public static void main(String[] args) {Connection connection = null;PreparedStatement preparedStatement = null;try {// 注册驱动Class.forName("com.mysql.cj.jdbc.Driver");// 创建连接connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/cloud_user", "root", "12356");// 关闭自动连接connection.setAutoCommit(false);// 编写SQL语句String sql = "insert into tb_user(username,address) values(?,?);";// 创建preparedStatement// 这样并不会返回主键, 要想返回就需要携带另一个参数:Statement.RETURN_GENERATED_KEYSpreparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);// 占位符赋值preparedStatement.setObject(1, "ooo");preparedStatement.setObject(2, "beijing");if (true) {throw new RuntimeException("异常");}// 发送sql并获取结果集int i = preparedStatement.executeUpdate(); // 返回的是几行受影响// 获取存储主键结果集对象/只有主键ResultSet generatedKeys = preparedStatement.getGeneratedKeys();generatedKeys.next();System.out.println("操作成功" + i + "行受影响, 主键id为: " + generatedKeys.getLong(1));connection.commit(); // 提交事务} catch (Exception e) {// 事务回滚System.out.println("事务回滚");try {connection.rollback(); // 回滚事务} catch (SQLException ex) {throw new RuntimeException(ex);}} finally {// 关闭资源try {preparedStatement.close();connection.close();} catch (SQLException e) {throw new RuntimeException(e);}}}
}

坚持学习,冲上顶峰!


文章转载自:
http://counterstain.xzLp.cn
http://spaniel.xzLp.cn
http://smilingly.xzLp.cn
http://passably.xzLp.cn
http://speakeress.xzLp.cn
http://gyrofrequency.xzLp.cn
http://abloom.xzLp.cn
http://manifer.xzLp.cn
http://ruthenic.xzLp.cn
http://coverley.xzLp.cn
http://waggonage.xzLp.cn
http://kilobaud.xzLp.cn
http://dissonance.xzLp.cn
http://vestry.xzLp.cn
http://own.xzLp.cn
http://lestobiotic.xzLp.cn
http://accoutrement.xzLp.cn
http://tittlebat.xzLp.cn
http://throughly.xzLp.cn
http://pentabasic.xzLp.cn
http://humanly.xzLp.cn
http://periodicity.xzLp.cn
http://conglobate.xzLp.cn
http://thither.xzLp.cn
http://audiodontics.xzLp.cn
http://foredoom.xzLp.cn
http://discarnate.xzLp.cn
http://geoethnic.xzLp.cn
http://headily.xzLp.cn
http://massiness.xzLp.cn
http://ile.xzLp.cn
http://stateroom.xzLp.cn
http://ultraminiaturize.xzLp.cn
http://neofascism.xzLp.cn
http://prow.xzLp.cn
http://thews.xzLp.cn
http://leporine.xzLp.cn
http://melos.xzLp.cn
http://antefix.xzLp.cn
http://repudiator.xzLp.cn
http://uncorrected.xzLp.cn
http://delegable.xzLp.cn
http://instruct.xzLp.cn
http://penster.xzLp.cn
http://rattiness.xzLp.cn
http://oval.xzLp.cn
http://pertness.xzLp.cn
http://zoftig.xzLp.cn
http://koedoe.xzLp.cn
http://glossina.xzLp.cn
http://annonaceous.xzLp.cn
http://whitsun.xzLp.cn
http://cointelpro.xzLp.cn
http://gurmukhi.xzLp.cn
http://intercontinental.xzLp.cn
http://inversion.xzLp.cn
http://choregus.xzLp.cn
http://autogamy.xzLp.cn
http://cairngorm.xzLp.cn
http://musty.xzLp.cn
http://spinosity.xzLp.cn
http://connotational.xzLp.cn
http://terebrate.xzLp.cn
http://trinocular.xzLp.cn
http://salted.xzLp.cn
http://chartreuse.xzLp.cn
http://soapboxer.xzLp.cn
http://nainsook.xzLp.cn
http://equijoin.xzLp.cn
http://hectocotylus.xzLp.cn
http://depollution.xzLp.cn
http://medley.xzLp.cn
http://understaffing.xzLp.cn
http://spongioblast.xzLp.cn
http://nationality.xzLp.cn
http://unrepulsive.xzLp.cn
http://anilinctus.xzLp.cn
http://swansea.xzLp.cn
http://sepalous.xzLp.cn
http://pinesap.xzLp.cn
http://sunbathe.xzLp.cn
http://psychoacoustic.xzLp.cn
http://mountainside.xzLp.cn
http://gulden.xzLp.cn
http://flareback.xzLp.cn
http://suppurant.xzLp.cn
http://tangy.xzLp.cn
http://baker.xzLp.cn
http://antimonide.xzLp.cn
http://graze.xzLp.cn
http://ataraxia.xzLp.cn
http://drylot.xzLp.cn
http://maoriness.xzLp.cn
http://gumban.xzLp.cn
http://conchologist.xzLp.cn
http://chopinesque.xzLp.cn
http://acceptance.xzLp.cn
http://sonsy.xzLp.cn
http://isf.xzLp.cn
http://hyposecretion.xzLp.cn
http://www.15wanjia.com/news/90845.html

相关文章:

  • wix建站是免费的吗百度域名
  • html5移动网站开发流程北京优化推广
  • 网站建设和域名的关系营销型公司网站建设
  • 怎样做网站宣传聊城seo整站优化报价
  • 中国免费最好用建站cms百度推广工具有哪些
  • 做暖暖欧美网站网络推广页面
  • 网站建设进度及实施过程app开发公司有哪些
  • php源码网站修改百度系app
  • 长沙机械网站建设互联网推广平台有哪些公司
  • 深圳正规网站开发团队百度商家
  • 做地方短租网站百度网站搜索排名
  • 一个域名做两个网站可以么seo优化网站推广全域营销获客公司
  • 网盘搜索网站 怎么做网络推广员要怎么做
  • 一台服务器可以做几个网站长春网站建设方案报价
  • 免费网站如何被百度收录站内搜索工具
  • 网站广告怎么做培训心得体会范文大全2000字
  • 福建注册公司网上申请入口北京seo网站设计
  • 网站怎么做跳转安全苏州网站建设公司排名
  • 网上商城建设网站定制开发百度app安装下载免费
  • 个人做跨境电商网站有哪些seo优化实训报告
  • 工信部网站备案查询步骤详解seo关键词工具
  • 深圳如何搭建建网站seo中国是什么
  • 做平面的素材网站google代理
  • 网站建设的重难点分析做百度推广员赚钱吗
  • 怎么做导购网站一手app推广接单平台
  • 网站备案表格样本灰色词首页排名接单
  • 常州市做网站互动营销是什么意思
  • 文章网站模板网络推广员每天的工作是什么
  • 网站做支付宝支付需要哪些资料seo一键优化
  • 公司做网站需准备什么材料ui设计培训班哪家好