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中OOD_还在傻傻分不清?3分钟快速认识Java中的OOA、OOD、OOP
在计算机专业中,Java专业是最常设的专业之一,在学习Java时,框架是重要的学习内容,你还在傻傻分不清吗?3分钟快速认识Java中的OOA.OOD.OOP.OOA:Object-Oriented A ...
- Java中 9 种常见的 CMS GC 问题分析与解决
目录 Java中 9 种常见的 CMS GC 问题分析与解决 1. GC 1.1 引言 1.2 概览 2. GC 基础 2.1 基础概念 2.2 JVM 内存划分 2.3 分配对象 2.4 收集对象 ...
- Java中的JDBC教程
Java中的JDBC教程 欢迎使用JDBC教程.Java DataBase Connectivity(JDBC)是企业应用程序中使用最广泛的API之一.这是因为大多数应用程序使用某种数据库连接.我最近 ...
- java布尔类型比较器_浅谈Java中几种常见的比较器的实现方法
在java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题. 通常对象之间的比较可以从两个方面去看: 第一个方面:对象的地址是否一样,也就是是否引用自同一个对象.这种方式可以直接使用& ...
- 在java中使用JDBC连接mysql数据库时的服务器时区值无法识别或表示多个时区的问题解决方案
项目场景: 在java中使用JDBC连接mysql数据库时,报以下的错:Exception in thread "main" java.sql.SQLException: The ...
- 快速解决java中的容器
首先已知java中任何类都有一个共同的父类,那就是Object类.若定义一个Object类数组,理论上可以涵盖任何类的数据.例如: public static void main(String[] a ...
- 美团技术总结:Java中9种常见的CMS GC问题分析与解决
1. 写在前面 | 本文主要针对 Hotspot VM 中"CMS + ParNew"组合的一些使用场景进行总结.重点通过部分源码对根因进行分析以及对排查方法进行总结,排查过程会省 ...
- 美团技术:Java中9种常见的CMS GC问题分析与解决
目前,互联网上 Java 的 GC 资料要么是主要讲解理论,要么就是针对单一场景的 GC 问题进行了剖析,对整个体系总结的资料少之又少.前车之鉴,后事之师,美团的几位工程师历时一年多的时间,搜集了内部 ...
- Java中四则运算的那些坑
为什么80%的码农都做不了架构师?>>> 使用Java开发多年,感觉自己的水平也在不断提升,但是被Java狂虐却从来都没变过,而且任何一个Java的小角落,都能把我虐的体无完肤 ...
最新文章
- spring boot+mybatis 系列
- C语言中结构体内存存储方式
- ios 视图切换翻页效果
- VB2010中的MediaPlayer控件在哪?
- 电脑网线,电脑网线主要分类
- 谷歌flash无法输入中文
- java围棋毕业设计,基于Java的围棋游戏的设计与实现.docx
- 差分密码分析读书报告
- javascript实现锁定网页、密码解锁效果(屏幕保护效果)
- 诗词格律[1] 诗词入门
- pytorch计算FLOPs
- 服务器(CentOS7)配置Jupyter Notebook远程访问
- 六、DOM(上) - 章节课后练习题及答案
- Linux驱动框架之misc类设备驱动框架
- 2011年高考模拟命题作文读我
- 如何利用校园邮箱免费使用IDEA
- 3D Tiles 简单介绍
- Java日期格式与文本格式的互相转化
- OAuth2.0_李孟_新浪博客
- 大公司与小公司之间,为何要选择大公司?
热门文章
- 推荐 | 作为IDEA的死忠粉,这样设置,效果棒棒哒!
- Bootstrap列表组的情景类
- Bootstrap 两端对齐的导航
- HTML5 绘制动画
- CSS 字体调整 font-size-adjust属性
- es6 next()方法的参数
- 大数据的相关性和因果性
- 视觉SLAM笔记(8) 齐次坐标
- 数据库连接字符串 mysql_数据库连接字符串(MySQL,SQL Server,Oracle)
- java自己实现linkedlist_自己根据java的LinkedList源码编写的一个简单的LinkedList实现...