10个问题让你快速避开java中的jdbc常见坑
摘要:JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。
本文分享自华为云社区《10个问题让你快速避开java中的jdbc常见坑》,作者: breakDraw。
Connection.setAutoCommit(boolean)
用于事务提交。
setAutoCommit(true), 则执行的所有sql执行都会作为单个事务直接提交并运行
setAutoCommit(false), 则必须等调用conn.commit()才会提交运行
Q: setAutoCommit默认是true还是false
A: 默认是true。
Q: setAutoCommit(true)的缺点是什么?
A: 如果一次性执行多个sql语句, 中间sql出错时,就会造成脏数据。
Q: setAutoCommit(false)后,如果出了错却没有在catch中进行Connection的rollBack操作,会发生什么?
A; 操作的表就会被锁住,造成数据库死锁
fetchSize
fetchSize 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数
- fetchSize越 大, 客户端内存占用越 大,读取数据库次数越 少,速度越 快。
Q: Oracle和Mysql中的fetchSize有什么区别?
A: Oracle会每次网络传输fetchSize条数据到客户端, MYSQL则会一次性全部传送到客户端,因此Mysql中的fetchSize是一种模拟游标。
PreparedStatement
Q:相比Statement的好处?
A:
- PreparedStatement是预编译的,比Statement速度快,执行效率高,因此即使sql中不带参数也最好使用PreparedStatement
- 代码的可读性和可维护性更好(相比于sql拼接)
- PreparedStatement可以防止SQL注入攻击,而Statement却不能
Q:prepareStatement是statement接口的实现吗?
A:prepareStatement不是实现,而是继承的接口
CallableStatement
- CallableStatement继承自PreparedStatement
- CallableStatement接口添加了 调用存储过程 核函数以及处理输出参数(INOUT)的方法。
- 即存储过程就用CallableStatement
Connection Pool
连接池优点:
- 减少连接创建次数
- 更快的系统整体响应速度
- 统一连接管理,减少失误性的连接未关闭。
ResultSet
作用: 缓存数据结果集
Statement st = conn. createStatement (int resultSetType, int resultSetConcurrency)
ResultSet rs = st.executeQuery(sqlStr)
滚动,就是指调用.next()或者.previous()或者移动到对应行
resultSetType 是设置 ResultSet 对象的类型可滚动,或者是不可滚动。取值如下(见单词知意):
- ResultSet.TYPE_FORWARD_ONLY 只能向前滚动
- ResultSet.TYPE_SCROLL_INSENSITIVE, 支持前后滚动,对修改不敏感
- ResultSet.TYPE_SCROLL_SENSITIVE 支持前后滚动,对修改敏感
resultSetConcurency 是设置 ResultSet 对象能够修改的,取值如下:
- ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。
- ResultSet.CONCUR_UPDATABLE 设置为可修改类型的参数。
Q:Connection、statement、ResultSet的关闭顺序是?
A:先ResultSet、再Statement、最后再connection。
因为这种操作很麻烦,最好使用jdbc连接池,或者try-with-resource
数据库知识
Q:事务的ACID属性是什么?
A:
- A是 atomicity原子性, 事务内的行为一次性执行完,要么就回退
- C是consistency一致性 有a+b=c的限制条件,然后a变化的同时,b也必须跟着变化
- I是isolation隔离性 事务隔离,即事务的中间执行过程,对另外一个事务不可见。
- D是durability持久性 提交i成功后,修改不会改变,也会被记录。
Q: 脏读、不可重复读和幻读是什么?
A:
- 脏读:数据被更新了,但是还没提交, 然后另一个事务读到了更新后的数据,结果事务回滚了,导致读的数据其实是脏数据,
- 不可重复读: 1个事务要读2次数据(注意是单条数据),结果第一次读和第二次读数据不一致了。
- 幻读: 1个事务读了2次 数据,发现2次的记录数不一致(注意事项记录数)
10个问题让你快速避开java中的jdbc常见坑的更多相关文章
- JAVA中enum的常见用法
JAVA中enum的常见用法包括:定义并添加方法.switch.遍历.EnumSet.EnumMap 1.定义enum并添加或覆盖方法 public Interface Behaviour{ void ...
- 第67节:Java中的JDBC运用
第67节:Java中的JDBC运用 https://www.jianshu.com/p/628a9ba1b205
- Java中9种常见的CMS GC问题分析与解决
1. 写在前面 | 本文主要针对 Hotspot VM 中"CMS + ParNew"组合的一些使用场景进行总结.重点通过部分源码对根因进行分析以及对排查方法进行总结,排查过程会省 ...
- java中使用jdbc配置连接串时mysql 5.6与5.7版本“编码”参数有区别!
在mysql5.6中 java程序使用jdbc时链接字符串应该使用?characterEncoding=utf-8,而5.7版本可以省略,否则可能会有相关的语句执行结果出错! String drive ...
- Java中的JDBC是什么?
JDBC(Java Data Base Connectivity, Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它有一组用Java语言编写的类和接 ...
- java中的JDBC
Java 是通过 JDBC 技术实现对各种数据库访问的,换句话说,JDBC 充当了 Java 应用程 序与各种不同数据库之间进行对话的媒介. JDBC 是 Java 数据库连接(Java DataBa ...
- Java中避免空指针常见的方法
什么是空指针? 当一个变量的值为null时,在Java里表示一个不存在的空对象,没有实际内容,没有给它分配内存,null也是对象成员的默认值.所以,一个对象如果没有进行初始化操作,这时如果调用这个对象 ...
- Java中枚举的常见用法
在JDK1.5以后引入了一种新的类型,就是枚举(enum).enum是用来声明枚举类型数据,它可以像数组一样存储许多的元素,但是不同于数组的是,它除了数字不能存储以外, 其他类型的如字母.特殊符号.汉 ...
- 快速掌握Java中Lambda表达式的用法
Lambda表达式的作用: Lambda表达式的作用就是简化代码开发,让代码看起来更加简介.它是用来简化匿名内部类的.但是并不是所有的匿名内部类都能用Lambda表达式简化,Lambda表达式是有使用 ...
- 【视频+图文】带你快速掌握Java中含break语句的双重for循环
双重for循环掌握后,我们就一起来看看双重for循环的进阶内容一之带break语句的双重for循环. 双重for循环[视频+图文]讲解传输门:点击这里可去小乔的哔哩哔哩观看~ 带continue语句的 ...
随机推荐
- 从零开始搭建antd4.x + react16 + redux4 + webpack4 + react-router5基础框架解析
以上是2020年10月份的版本,后来,我将xmind进行了完善,文档也写的差不多了,可是,电脑坏了,硬盘换了,文件都没有了.这已经是第三次写这个文档了,思维导图就不更新了,按照几个重点进行说明. 这个 ...
- MySQL查看数据库性能常用命令和实战教学
MySQL查看数据库性能常用命令 # 列出MySQL服务器运行各种状态值 show global status; # 查询MySQL服务器配置信息语句 show variables; # 慢查询 sh ...
- [Python急救站课程]太阳花的绘制
太阳花的绘制 from turtle import * color('red', 'yellow') # 分别定义填充颜色 begin_fill() while True: forward(200) ...
- DDD技术方案落地实践
1. 引言 从接触领域驱动设计的初学阶段,到实现一个旧系统改造到DDD模型,再到按DDD规范落地的3个的项目.对于领域驱动模型设计研发,从开始的各种疑惑到吸收各种先进的理念,目前在技术实施这一块已经基 ...
- [WPF]浅析资源引用(pack URI)
WPF中我们引用资源时常常提到一个概念:pack URI,这是WPF标识和引用资源最常见的方式,但不是唯一的方式.本文将介绍WPF中引用资源的几种方式,并回顾一下pack URI标识引用在不同位置的资 ...
- 万字解析XML配置映射为BeanDefinition的源码
本文分享自华为云社区<Spring高手之路16--解析XML配置映射为BeanDefinition的源码>,作者:砖业洋__. 1. BeanDefinition阶段的分析 Spring框 ...
- 在Window系统中安装VMware虚拟机搭建Linux服务器
1.什么是VMware Workstation VMware Workstation Pro是一款桌面虚拟化软件.我们可以通过Workstation Pro在Windows或Linux PC上运行多个 ...
- 关于一类最优解存在长度为 $k$ 的循环节的问题
灵感来源 问题形式:给定长度为 \(n\) 的序列,要求选出一些位置,使这些位置满足限制条件 \(T\),其中 \(T\) 可以表述为一个长度为 \(k\) 的环满足条件 \(T'\),选出第 \(i ...
- 请查收,本周刷屏的两大热点「GitHub 热点速览」
如果你逛 HackerNews 或者是推特,你一定会被 multipleWindow3dScene 这个跨窗口渲染项目的成果刷屏,毕竟国内的技术平台上也出现了不少的模仿项目.另外一个热点,便是你在白板 ...
- java.util.List如何用
起因是这样,我在学习Javaweb,然后就突然有很多类似的语句 这是什么意思呢?让我们一起来解决看看吧! List有序集合(也成为序列),用户可以精确控制列表中每个元素的插入位置.用户可以通过整数索引 ...