作者:鬣狗
日期:2021年7月3日
0.简介
JDBC协议第五章主要介绍了组成JDBC协议的相关类和接口。主要涉及到两个包 java.sql 和 javax.sql。 其中核心的api在 java.sql 包里面, 所以对于java.sql包里面的类需要牢记!!!
1.java.sql包
下面的这些类我建议要像英语单词一样把它们的作用和名字记下来,或者起码混个脸熟
java.sql.Array
java.sql.BatchUpdateException
java.sql.Blob
java.sql.CallableStatement
java.sql.Clob
java.sql.ClientinfoStatus
java.sql.Connection
java.sql.ConnectionBuilder
java.sql.DataTruncation
java.sql.DatabaseMetaData
java.sql.Date
java.sql.Driver
java.sql.DriverAction
java.sql.DriverManager
java.sql.DriverPropertyInfo
java.sql.JDBCType
java.sql.NClob
java.sql.ParameterMetaData
java.sql.PreparedStatement
java.sql.PseudoColumnUsage
java.sql.Ref
java.sql.ResultSet
java.sql.ResultSetMetaData
java.sql.RowId
java.sql.RowIdLifeTime
java.sql.Savepoint
java.sql.ShardingKey
java.sql.ShardingKeyBuilder
java.sql.SQLClientInfoException
java.sql.SQLData
java.sql.SQLDataException
java.sql.SQLException
java.sql.SQLFeatureNotSupportedException
java.sql.SQLInput
java.sql.SQLIntegrityConstraintViolationException
java.sql.SQLInvalidAuthorizationSpecException
java.sql.SQLNonTransientConnectionException
java.sql.SQLNonTransientException
java.sql.SQLOutput
java.sql.SQLPermission
java.sql.SQLSyntaxErrorException
java.sql.SQLTimeoutException
java.sql.SQLTransactionRollbackException
java.sql.SQLTransientConnectionException
java.sql.SQLTransientException
java.sql.SQLType
java.sql.SQLXML
java.sql.SQLWarning
java.sql.Statement
java.sql.Struct
java.sql.Time
java.sql.Timestamp
1.java.sql包中主要类之间的关系

图1 类关系
上图从 Connection 对象出发,可以得到三类 Statement 对象,分别Statement、PreparedStatement、CallableStatement。然后通过Statement对象执行查询获得结果集(ResultSet)。
2.javax.sql包
javax.sql.CommonDataSource
javax.sql.ConnectionEvent
javax.sql.ConnectionEventListener
javax.sql.ConnectionPoolDataSource
javax.sql.DataSource
javax.sql.PooledConnection
javax.sql.PooledConnectionBuilder
javax.sql.RowSet
javax.sql.RowSetEvent
javax.sql.RowSetInternal
javax.sql.RowSetListener
javax.sql.RowSetMetaData
javax.sql.RowSetReader
javax.sql.RowSetWriter
javax.sql.StatementEvent
javax.sql.StatementEventListener
javax.sql.XAConnection
javax.sql.XAConnectionBuilder
javax.sql.XADataSource
可以看到在 javax.sql 包中添加了连接池(ConnectionPoolDataSource)的支持,以及分布式事务的支持(XADataSource)。以及添加了事件机制(ConnectionEvent、RowSetEvent、StatementEvent)。
3.java.sql包和javax.sql包类之间的关系

图2 DataSource和Connection关系
关系: java.sql.Connection con = javax.sql.DataSource.getConnection();

图3 连接池之间的关系
上图通过ConnectionPoolDataSource可以获得PooledConnection。PooledConnection本质上是一个逻辑连接,里面包装真正的物理连接对象Connection,通过PooledConnection.getConnection()方法可以获取到其持有的真正的物理连接对象。并且在PooledConnection添加了对事件的支持,当PooledConnection对象关闭的时候,会触发一个ConnectionEvent事件。

图4 分布式事务支持
图3和图4要对比着看。相比于图3,图4多了一个XAResource,XAResource是XA规范中规定的一个本地资源管理器,用于处理本地事务的提交和回滚。

图5 RowSet之间的关系
RowSet是ResultSet的子类,其中RowSetMetaData/ResultSetMetaData分别存储RowSet/ResultSet的元数据信息。RowSetReader/RowSetWriter分别可以从RowSetInternal中读/去数据。
4.总结
1.这些类一定要记住,背下来,像背英文单词一样。
2.上面类之间的交互图这种形式特别好,类交互图方便开发者了解类之间的交互关系。自己设计架构的时候,建议细粒度到类之间的交互。!!!!!!!!
3.还得看原汁原味的document文档
4.找一个技术问题(尤其是刨根问底)的时候,别用百度搜索了,第一页那都是啥玩意(博客园、CSDN、简书);如果有条件,我建议用google,直接用英文搜索问题,谷歌的排名结果排前几的几乎是官方文档。
5.其他
github主页:
git仓库地址:
gitbook地址:
欢迎各位加入鬣狗技术社区,希望能够为您提供有思考、有深度的文章。欢迎加入我们,如果你也有想法在鬣狗技术社区发表文章,头条私聊即可。
求 关注➕转发➕点赞,谢谢各位!您的支持就是我们更新的动力