JDBC-Java中JDBC常见坑-《Java笔记》

admin 2025-10-19 03:53:26 编程 来源:ZONE.CI 全球网 0 阅读模式

Java JDBC

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中进行ConnectionrollBack操作,会发生什么?

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:prepareStatementstatement接口的实现吗?

A:prepareStatement不是实现,而是继承的接口2021-06-20-11-29-26-103562.png

CallableStatement

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

    Connection Pool

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

    ResultSet

    作用:缓存数据结果集
    1. Statement st = conn. createStatement (int resultSetType, int resultSetConcurrency)
    2. 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:ConnectionstatementResultSet的关闭顺序是?

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次的记录数不一致(注意事项记录数)
以太坊cppgolang区别 编程

以太坊cppgolang区别

以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
progolang 编程

progolang

Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
golangn个发送者 编程

golangn个发送者

Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
golang技能图谱 编程

golang技能图谱

从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
评论:0   参与:  11