摘要: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:

  1. PreparedStatement是预编译的,比Statement速度快,执行效率高,因此即使sql中不带参数也最好使用PreparedStatement
  2. 代码的可读性和可维护性更好(相比于sql拼接)
  3. PreparedStatement可以防止SQL注入攻击,而Statement却不能

Q:prepareStatement是statement接口的实现吗?
A:prepareStatement不是实现,而是继承的接口

CallableStatement

  • CallableStatement继承自PreparedStatement
  • CallableStatement接口添加了 调用存储过程 核函数以及处理输出参数(INOUT)的方法。
  • 即存储过程就用CallableStatement

Connection Pool

连接池优点:

  1. 减少连接创建次数
  2. 更快的系统整体响应速度
  3. 统一连接管理,减少失误性的连接未关闭。

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常见坑相关推荐

  1. java中OOD_还在傻傻分不清?3分钟快速认识Java中的OOA、OOD、OOP

    在计算机专业中,Java专业是最常设的专业之一,在学习Java时,框架是重要的学习内容,你还在傻傻分不清吗?3分钟快速认识Java中的OOA.OOD.OOP.OOA:Object-Oriented A ...

  2. 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 收集对象 ...

  3. Java中的JDBC教程

    Java中的JDBC教程 欢迎使用JDBC教程.Java DataBase Connectivity(JDBC)是企业应用程序中使用最广泛的API之一.这是因为大多数应用程序使用某种数据库连接.我最近 ...

  4. java布尔类型比较器_浅谈Java中几种常见的比较器的实现方法

    在java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题. 通常对象之间的比较可以从两个方面去看: 第一个方面:对象的地址是否一样,也就是是否引用自同一个对象.这种方式可以直接使用& ...

  5. 在java中使用JDBC连接mysql数据库时的服务器时区值无法识别或表示多个时区的问题解决方案

    项目场景: 在java中使用JDBC连接mysql数据库时,报以下的错:Exception in thread "main" java.sql.SQLException: The ...

  6. 快速解决java中的容器

    首先已知java中任何类都有一个共同的父类,那就是Object类.若定义一个Object类数组,理论上可以涵盖任何类的数据.例如: public static void main(String[] a ...

  7. 美团技术总结:Java中9种常见的CMS GC问题分析与解决

    1. 写在前面 | 本文主要针对 Hotspot VM 中"CMS + ParNew"组合的一些使用场景进行总结.重点通过部分源码对根因进行分析以及对排查方法进行总结,排查过程会省 ...

  8. 美团技术:Java中9种常见的CMS GC问题分析与解决

    目前,互联网上 Java 的 GC 资料要么是主要讲解理论,要么就是针对单一场景的 GC 问题进行了剖析,对整个体系总结的资料少之又少.前车之鉴,后事之师,美团的几位工程师历时一年多的时间,搜集了内部 ...

  9. Java中四则运算的那些坑

    为什么80%的码农都做不了架构师?>>>    使用Java开发多年,感觉自己的水平也在不断提升,但是被Java狂虐却从来都没变过,而且任何一个Java的小角落,都能把我虐的体无完肤 ...

最新文章

  1. spring boot+mybatis 系列
  2. C语言中结构体内存存储方式
  3. ios 视图切换翻页效果
  4. VB2010中的MediaPlayer控件在哪?
  5. 电脑网线,电脑网线主要分类
  6. 谷歌flash无法输入中文
  7. java围棋毕业设计,基于Java的围棋游戏的设计与实现.docx
  8. 差分密码分析读书报告
  9. javascript实现锁定网页、密码解锁效果(屏幕保护效果)
  10. 诗词格律[1] 诗词入门
  11. pytorch计算FLOPs
  12. 服务器(CentOS7)配置Jupyter Notebook远程访问
  13. 六、DOM(上) - 章节课后练习题及答案
  14. Linux驱动框架之misc类设备驱动框架
  15. 2011年高考模拟命题作文读我
  16. 如何利用校园邮箱免费使用IDEA
  17. 3D Tiles 简单介绍
  18. Java日期格式与文本格式的互相转化
  19. OAuth2.0_李孟_新浪博客
  20. 大公司与小公司之间,为何要选择大公司?

热门文章

  1. 推荐 | 作为IDEA的死忠粉,这样设置,效果棒棒哒!
  2. Bootstrap列表组的情景类
  3. Bootstrap 两端对齐的导航
  4. HTML5 绘制动画
  5. CSS 字体调整 font-size-adjust属性
  6. es6 next()方法的参数
  7. 大数据的相关性和因果性
  8. 视觉SLAM笔记(8) 齐次坐标
  9. 数据库连接字符串 mysql_数据库连接字符串(MySQL,SQL Server,Oracle)
  10. java自己实现linkedlist_自己根据java的LinkedList源码编写的一个简单的LinkedList实现...