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次的记录数不一致(注意事项记录数)

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
今天你的静态变量和静态代码块执行了吗?
摘要:今天你的静态变量和静态代码块执行了吗? 本文分享自华为云社区《【java】静态变量和静态代码块那些事》,作者: 大金(内蒙的)。 今日题目: 今天你的静态变量和静态代码块执行了吗? 话不多说,开始今天的题目讲解吧。 先介绍个常识: 静态成员属性的初始化早于静态代码块; 静态代码块是指的类的初始化操作,初始化早于对象的创建; 类静态域的只会初始化一次。 题目一:输出啥? class Father{ public static int m = 33; static{ System.out.println("父类被初始化"); } } class Child extends Father{ static{ System.out.println("子类被初始化"); } } class StaticTest{ public static void main(String[] args){ System.out.println(Child.m); System.out.println(new Child()); } } 答案: 父类被初始化 33 子...
- 下一篇
服务网格定义企业上云新路径! | Forrester X 蚂蚁集团 发布服务网格白皮书
Forrester 认为: 包括容器、微服务与服务网格等领域在内的云原生平台,将成为构建适应未来的现代企业的核心引擎。 在常态化混合异构环境下,面对云原生应用路径的多样化趋势与全维度挑战,企业必须将服务网格技术与微服务有效结合,才能真正释放云原生技术的红利。 近几年云计算发展如火如荼,异构变革日新月异,这是基础设施层明确的发展趋势。值得关注的是,随着基础设施的复杂度越来越高,也为整个基础设施的统一资源调度带来了极大挑战。 在越来越复杂的异构基础设施上,存量应用和增量应用应该如何上云?面对大量异构基础设施带来的挑战,企业如何最大化上云价值? 服务网格(SOFAStack Mesh)是蚂蚁集团自主研发的基于金融级生产实践的增强版服务网格平台,将传统微服务和 Service Mesh 技术进行了深度融合,其核心技术经过了蚂蚁集团的大规模生产实践验证。 它深度、无缝对接了 SOFAStack 经典应用服务和容器应用服务,为客户提供了简单易用的 Service Mesh 架构的支撑平台。目前, 服务网格已经广泛应用在大型金融机构。 近日,蚂蚁集团联合 Forrester 公司发布了《蚂蚁集团服务...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7