IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 10个问题让你快速避开java中的jdbc常见坑 -> 正文阅读

[大数据]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:

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

点击关注,第一时间了解华为云新鲜技术~

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-01-12 00:04:27  更:2022-01-12 00:04:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 14:58:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码