JDBC项目实践与源码解析——创建会话
本专栏为系列文章,如果想要系统学习JDBC,作者建议从第一篇文章,顺序读完全部文章。
文中项目源码地址:https://github.com/bethanwang/jdbc-study
使用上文返回的Connection
对象,创建Statement
对象。
//3 创建会话
sta = conn.createStatement();
此处其实是调用的是java.sql.Connection
类的子类com.mysql.cj.jdbc.ConnectionImpl
中的代码,通过下图可以看到它们之间的继承关系。
源码解析:
com.mysql.cj.jdbc.ConnectionImpl
类:
package com.mysql.cj.jdbc;
public class ConnectionImpl implements JdbcConnection, SessionEventListener, Serializable {
/** The database we're currently using. */
private String database = null;
private static final int DEFAULT_RESULT_SET_TYPE = ResultSet.TYPE_FORWARD_ONLY;
private static final int DEFAULT_RESULT_SET_CONCURRENCY = ResultSet.CONCUR_READ_ONLY;
private JdbcConnection topProxy = null;
@Override
public java.sql.Statement createStatement() throws SQLException {
return createStatement(DEFAULT_RESULT_SET_TYPE, DEFAULT_RESULT_SET_CONCURRENCY);
}
@Override
public java.sql.Statement createStatement(int resultSetType,
int resultSetConcurrency) throws SQLException {
StatementImpl stmt = new StatementImpl(getMultiHostSafeProxy(), this.database);
stmt.setResultSetType(resultSetType);
stmt.setResultSetConcurrency(resultSetConcurrency);
return stmt;
}
@Override
public JdbcConnection getMultiHostSafeProxy() {
return this.getProxy();
}
private JdbcConnection getProxy() {
return (this.topProxy != null) ? this.topProxy : (JdbcConnection) this;
}
}
java.sql.ResultSet
类:
package java.sql;
public interface ResultSet extends Wrapper, AutoCloseable {
/**
* The constant indicating the type for a <code>ResultSet</code> object
* whose cursor may move only forward.
* @since 1.2
*/
int TYPE_FORWARD_ONLY = 1003;
/**
* The constant indicating the concurrency mode for a
* <code>ResultSet</code> object that may NOT be updated.
* @since 1.2
*/
int CONCUR_READ_ONLY = 1007;
}
结合源码StatementImpl stmt = new StatementImpl(getMultiHostSafeProxy(), this.database)
可以看出,在com.mysql.cj.jdbc.ConnectionImpl
类中,创建了一个StatementImpl
实例并返回;在创建StatementImpl
实例时,同时设置了查询数据库返回的数据集合ResultSet
对象的两个特性:TYPE_FORWARD_ONLY
和CONCUR_READ_ONLY
。
-
TYPE_FORWARD_ONLY
表示返回的集合ResultSet
只能顺序正向遍历。 -
CONCUR_READ_ONLY
表示返回的集合ResultSet
只可以读取其中的数据,不允许修改集合中的数据。
上一篇:JDBC深入讲解——打开数据库连接
下一篇:JDBC深入讲解——执行sql
受作者水平限制,文中难免有不足之处,若读者阅读过程中发现问题,还望及时指正,感谢支持!
作者邮箱:547317812@qq.com