postgresql两个列模糊比较_JDBC进阶(一):批处理与获取自增长列的值

ae4497e20469228bf72957202ab90e58.png

一、批处理

假如要插入一万条记录到数据表中,那么使用普通的方法就要执行一万次插入操作,这样会频繁打开和关闭数据库连接,导致执行速度变慢。

因此可以使用批处理机制将多条语句一次性提交给数据库批量处理。

批处理的相关API:

  • void addBatch() —— 将一组参数添加到 PreparedStatement 对象的批处理命令中。
  • int[] executeBatch() —— 将一批SQL命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。
  • void chearBatch() —— 清空此 Statement 对象的当前 SQL 命令列表。

示例:使用批处理机制向Student表插入1008条记录

// 参数:
// jdbc协议:postgresql子协议://主机地址:数据库端口号/要连接的数据库名
String url = "jdbc:postgresql://localhost:5432/test2";
// 数据库用户名
String user = "postgres";
// 数据库密码
String password = "123456";// 1. 加载Driver类,Driver类对象将自动被注册到DriverManager类中
Class.forName("org.postgresql.Driver");// 2. 连接数据库,返回连接对象
Connection conn = DriverManager.getConnection(url, user, password);// 3. 预编译SQL语句
String sql = "INSERT INTO Student(Sno, Sname, Ssex, Sage, Sdept) " + "VALUES(?, ?, ?, ?, ?);";
PreparedStatement pstmt = conn.prepareStatement(sql);// 4. 批处理,向Student表中插入1008条记录
for(int i = 0; i < 1008; i++) {
// 设置一条记录的参数
pstmt.setString(1, "sno" + i);
pstmt.setString(2, "student" + i);
pstmt.setString(3, "男");
pstmt.setInt(4, 20);
pstmt.setString(5, "CS");// 将一条记录的参数添加到批处理命令中
pstmt.addBatch();// 每100条执行一次批处理
if(i % 100 == 0) {          
pstmt.executeBatch();    // 将100条插入记录命令提交给数据库来执行
pstmt.clearBatch();	     // 清空此Statement对象的当前SQL命令列表
}
}
// 将剩余的8条插入记录命令提交给数据库执行
pstmt.executeBatch();
pstmt.clearBatch();// 关闭资源
pstmt.close();
conn.close();

二、获取自增长列的值

数据表通常都具有主码自增长的功能,比如Oracle的Sequence机制、MySQL的AUTO_INCREMENT以及PostgreSQL的Serial数据类型。

如果使用JDBC往数据库表中插入一条新记录,要想获取主码新增长的值,则需要再进行一次查询操作,这样不够方便。

因此比较理想的方式是在进行数据插入操作时就能获取到自增长列对应的值,JDBC也提供了这样的功能。

相关API:

  • PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) —— 创建一个默认 PreparedStatement 对象,该对象能获取数据表自动生成的键值。

参数autoGeneratedKeys - 指示是否应该返回自动生成的键值,它可以是 Statement.RETURN_GENERATED_KEYS 或Statement.NO_GENERATED_KEYS

  • ResultSet getGeneratedKeys() —— 获取由于执行此 Statement 对象而创建的所有自动生成的键。如果此 Statement 对象没有生成任何键,则返回空的 ResultSet 对象。

示例:获取用户表的自增长列的值

首先在PostgreSQL中创建一张t_user表,其中主码id具有自增长功能:

CREATE TABLE t_user(id SERIAL PRIMARY KEY,name CHAR(20), password CHAR(20)
);

然后在JDBC中往表插入一条记录,获取新插入记录的主码自增长值:

// 省略参数代码...// 1. 加载Driver类,Driver类对象将自动被注册到DriverManager类中
Class.forName("org.postgresql.Driver");// 2. 连接数据库,返回连接对象
Connection conn = DriverManager.getConnection(url, user, password);// 3. 预编译SQL, 获取PreparedStatement对象
String sql = "INSERT INTO t_user(name, password) VALUES(?, ?);";	
// 创建一个默认 PreparedStatement 对象,该对象能获取自动生成的键。
PreparedStatement pstmt = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);// 4. 设置参数,并将SQL语句传给数据库执行
pstmt.setString(1, "张三");
pstmt.setString(2, "123456");
pstmt.executeUpdate();// 5. 获取主码自增长的值,以ResultSet类的形式返回
ResultSet rs = pstmt.getGeneratedKeys();
while(rs.next()) {System.out.println("主码自增长值为: " + rs.getInt(1));
}

控制台打印输出:

384ed62d77d73a8a8869679f908dd65d.png

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

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

相关文章

深度解读后疫情时代下,零售行业的趋势及技术前瞻

来源&#xff1a;苏宁零售技术研究院作者&#xff1a;王俊杰、罗海棠博士、郭永慧、池曙强、张绿漪博士新冠状病毒肺炎疫情发展严峻&#xff0c;短时间内席卷全国。民众在政府的号召下选择了尽量不出行&#xff0c;餐饮、旅游、线下零售等行业面临严峻考验。但同时&#xff0c;…

php 两个数组中不同的元素,PHP实现查询两个数组中不同元素的方法

这篇文章主要介绍了PHP实现查询两个数组中不同元素的方法,涉及PHP数组差集运算与数组合并的相关技巧,需要的朋友可以参考下本文实例讲述了PHP实现查询两个数组中不同元素的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;<?php $a array("max_allow_dia…

JAVA-配置path环境

配置path环境变量变的目的是什么&#xff1f; 控制台可以在任意的路径下都可以找到java的开发工具。 为了说明几个JDK环境变量的作用&#xff0c;这里先给出环境变量的定义 环境变量&#xff1a; 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数&#xff0c;比…

c井语言python_【一点资讯】C井风靡一时的编程语言和现在最火编程语言Python!谁更强? www.yidianzixun.com...

步入正题&#xff1a; 欢迎提出更简单或者效率更高的方法基础系列&#xff1a;(这边重点说说Python&#xff0c;上次讲过的东西我就一笔带过了)1.输出类型转换Python写法&#xff1a;2.字符串拼接 拼接输出方式python&#xff1a;NetCore这次为了更加形象对比&#xff0c;一句一…

add php support,wordpress函数add_post_type_support()用法示例

add_post_type_support( string $post_type, string|array $feature )Register support of certain features for a post type.描述All core features are directly associated with a functional area of the edit screen, such as the editor or a meta box. Features includ…

170页PPT入门深度强化学习! 汪荣贵 图灵人工智能 昨天

转自&#xff1a;中国图象图形学报什么是强化学习&#xff1f;和其他学习方法相比&#xff0c;有何不同与特色&#xff1f;深度学习如何与强化学习结合&#xff1f;并各取所长&#xff1f;深度强化学习会成为未来引领智能计算的方法吗&#xff1f;深度强化学习将强化学习和深度…

matlab 文件路径问题

1. fullfile&#xff1a;路径补全 f fullfile(filepart1,...,filepartN) 显然可变参数之间填充的路径分隔符&#xff08;path separator&#xff09;&#xff0c;会根据操作系统而变化&#xff1a; windows&#xff1a;/Linux&#xff1a;\2. fileparts&#xff1a;路径拆分 […

php querystring使用,node.js中的querystring.parse方法使用说明_node.js

方法说明&#xff1a;将字符串转成对象。说白了其实就是把url上带的参数串转成数组对象。(看例子就知道咯)语法&#xff1a;代码如下:querystring.parse(str, [sep], [eq], [options])接收参数&#xff1a;str 欲转换的字符串sep 设置分隔符&#xff0c;默认为 ‘&eq 设置赋…

钟南山院士应邀向欧洲同仁全方位解析新冠肺炎(配中文文字版)

来源&#xff1a;ERS欧洲呼吸学会尊敬的同事们&#xff0c;女士们&#xff0c;先生们&#xff1a;非常荣幸能有机会与您分享我们处理中国境内COVID19感染的相关经验。在这种情况下&#xff0c;我仍然在前线工作&#xff0c;所以准备这个PPT比较匆忙。我只能告诉您一些事实、某些…

powerbi的功能介绍_Power BI性能提升的5大秘密武器

​Power BI无疑已经走了很长一段路&#xff0c;它以其作为自助服务工具的强大根基&#xff0c;易于使用的功能以及在企业领域的持续推动和推动而发展。但是&#xff0c;我们仍然可以发现许多开发和维护Power BI解决方案可以通过应用一些更改而受益匪浅&#xff0c;这些更改将导…

递归推导——猜年龄

一、问题描述 班里转来了一位新同学&#xff0c;他在介绍自己年龄的时候说&#xff1a;“我的年龄的平方是一个三位数&#xff0c;立方是一个四位数&#xff0c;四次方是一个六位数。三次方和四次方正好将0/1/2/3/4/5/6/7/8/9这10个数字全部覆盖。”&#xff0c;那么&#xff0…

matlab画布透明,MATLAB怎么生成带透明对象的矢量图

从很早的版本开始MATLAB就支持对patch、surface等对象设定透明属性&#xff0c;有些示意图也必须使用透明的对象才能充分展示所要表达的含义。对透明对象支持最好的通用图片格式就是.png了&#xff0c;但是png图像并非矢量图形&#xff0c;对于一些需要以矢量图显示的场合并不适…

综述:持续感知系统在边缘计算的应用

来源&#xff1a;《微纳电子与智能制造》随着边缘计算技术的兴起&#xff0c;各种各样的感知系统给人类带来了便捷高效的生活。以日常使用的手机为例&#xff0c;工程师为其置入了各种各样的传感器&#xff0c;并通过运行其上的机器学习算法&#xff0c;部署了很多便捷的功能。…

python如何监控程序运行状态_shell脚本-监控python进程是否在运行及启动python进程...

shell脚本-监控python进程是否在运行&#xff0c;没有则重启jingdong_prices_run.py 并发送邮件告知重启时间,否则不重启不发送邮件定时检测京东商品状态*/5 * * * * sh /data/jingdong-app-spider-py/shell/check-jingdong-goods-run.sh >/store/logs/jingdong-app-spider-…

数据流InputStream转字符串

public static String ScreamToString(InputStream in) throws Exception{//定义一个内存输出流ByteArrayOutputStream out new ByteArrayOutputStream();int len0;byte[] btnew byte[1024];while((lenin.read(bt))!-1){out.write(bt,0,len);}String contentnew String(out.to…

matlab fgoalattain,matlab优化工具箱 | 学步园

1工具箱概述1.1 功能(1)求解无约束条件非线性极小值&#xff1b;(2)求解约束条件下非线性极小值&#xff0c;包括目标逼近问题、极大-极小值问题和半无限极小值问题&#xff1b;(3)求解二次规划和线性规划问题&#xff1b;(4)非线性最小二乘逼近和曲线拟合&#xff1b;(5)非线性…

python如何反转列表_四种Python 列表反转显示方法

原标题&#xff1a;四种Python 列表反转显示方法第一种&#xff0c;使用reversed 函数&#xff0c;reversed返回的结果是一个反转的迭代器&#xff0c;我们需要对其进行 list 转换第二种&#xff0c;使用sorted函数&#xff0c;sorted是排序函数&#xff0c;它是对一个列表进行…

自保护、人机互动柔性织物传感器研究取得进展

来源&#xff1a;中国科学院宁波材料技术与工程研究所可穿戴柔性电子器件&#xff0c;因其柔性/拉伸性、质轻、成本低、便携等特性&#xff0c;被广泛应用于人体运动/人体健康的实时监测、人机/脑机交互以及机器学习等领域。但目前仍存在灵敏度及响应速度较低、检测下限较高、检…

什么是对冲基金

对冲基金采用各种交易手段进行对冲、换位、套头、套期来赚取巨额利润。这些概念已经超出了传统的防止风险、保障收益操作范畴。加之发起和设立对冲基金的法律门槛远低于互惠基金&#xff0c;使之风险进一步加大。为了保护投资者&#xff0c;北美的证券管理机构将其列入高风险投…

谐波分析显著性检验matlab,关于谐波检测方法的MATLAB仿真及综合性能分析.pdf

bq谐波检测方法的MATLAB仿真及综合性能分析谐波检测方法的MATLAB 仿真及综合性能分析王 林&#xff0c;吴军基(南京理工大学动力工程学院&#xff0c;江苏 南京 210094 )摘 要&#xff1a;电力系统谐波一般由非线性设备引起的&#xff0c;对电力系 1 基于瞬时无功理论的谐波检测…