
教材学习内容总结
学习目标
- 了解JDBC架构
- 掌握JDBC架构
- 掌握反射与ClassLoader
- 了解自定义泛型和自定义枚举
- 会使用标准注解
JDBC标准主要分为两个部分:JDBC应用程序开发者接口
和JDBC驱动程序开发者接口
。应用程序需要联机数据库,其相关API主要在java.sql和javax.sql两个包中。
应用程序会使用JDBC联机数据库:
Connection conn = DriverManager.getConnection(……);
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM T_USER");
JDBC驱动程序分为四种:
- JDBC-ODBC Bridge Driver
- Native API Driver
- JDBC-Net Driver
- Native Protocl Drivel:可跨平台,是最常见的驱动程序类型
基本数据库操作相关JDBC接口或类是为位于java.sql包中。要取得数据库联机,必须进行几个动作:
- 注册Driver对象
- 取得Connection操作对象
- 关闭Connection操作对象
使用JDBC要求加载.class文档的4种方式:
(1)使用Class.forName()
(2)自行建立Driver接口操作类的实例
直接撰写程序代码:java.sql.Driver driver = new com.mysql.jdbc.Driver()
(3)启动JVM时指定jdbc.drivers属性
执行Java指令:> java -Djdbc.drivers=com.mysql.jdbc.Driver;ooo.XXXDriver YourProgram
(4)设定JAR中/services/java.sql.Driver文档
Statement是SQL描述的代表对象,可以使用executeUpdate()、executeQuery()等方法来执行SQL。
Statement的executeUpdate()方法用于SELECT等查询数据库的SQL,返回int结果,表示数据变动的笔数
Statement的executeQuery()方法返回java.sql.ResultSet对象,代表查询结果。
Statement的execute()方法用来执行SQL,返回true表示SQL执行将返回ResultSet作为查询结果。
建立Statement或PreparedStatement实例时,可以指定结果集类型与并行方式。
createStatement(int resultSetType,int resultSetConcurrency) prepareStatement(String sql,int resultSetType,int resultSetConcurrency)
- 结果集类型resultSetType可以指定3种:
ResultSet.TYPE _ FORWARD _ ONLY(默认)
ResultSet.TYPE _ SCROLL _ INSENSITIVE
ResultSet.TYPE _ SCROLL _ SENSITIVE
- 更新设定resultSetConcurrency可以有2种指定:
ResultSet.CONCURREADONLY(默认)
ResultSet.CONCUR_UPDATABLE
- ResultSet进行数据修改,则有些条件限制:
必须选取单一表格
必须选取主键
必须选取所有NOT NULL的值
交易的四个基本原则:
原子性:若有一个步骤失败,必须撤回曾经执行过的动作,回到交易前的状态
一致性:交易作用的数据集合在交易前后必须一致
隔离行为:交易与交易之间,必须互不干扰
持续性:即使系统挂了,交易的结果也不能遗失多个交易并行时,可能引发很多数据不一致的问题。
更新遗失:一个交易进行时,因为另一个交易的介入而遗失更新效力。
脏读:两个交易同时进行,一个更新数据但是未确认,另一个就读取,可能会读取到不正确的数据。
无法重复的读取:某个交易两次读取同一段数据的结果不一致
幻读:同一交易期间,读取到的交易笔数不一样
“诠读取数据的数据”
可以通过Connection的getMetaDate()方法取得DatebaseMetaDate对象。JDBC的数据列集合(电子表格、XML数据或其他具有列集合概念的数据源),可以使用
RowSet
对列集合进行增删查改。通过setCommand()设定查询指令,通过execute()执行查询指令以填充数据。RowSet定义了五个标准列集合子接口:
jdbcRowSet
是联机式的RowSet,保持与数据库的联机,可视为取得、操作RowSet的行为封装。
CacheRowSet
是脱机式的RowSet,在查询并填充完数据后,会断开与数据源的联机
FilteredRowSet
可以对列集合进行过滤,实现类似SQL中WHERE等条件式的功能。
JoinRowSet
可以让你结合两个RowSet对象,可以通过setMatchColumn()指定要结合的行,然后使用addRowSet()来加入RowSet进行结合。
WebRowSet
是CachedRowSet的子接口,不仅具备脱机操作,还能进行XM读写。反射:.class文档反映了类基本信息,从Class等API取得类信息的方式称为反射。
建立ClassLoader实例
使用URLClassLoader来产生新的类加载器,需要java.net.URL作为其参数来指定类加载的搜索路径。使用URLClassLoader的loadClass()方法加载指定类时,会先委托父加载器代为搜索。
由同一类加载器载入的.class文档,只会有一个Class实例。如果同一.class文档由两个不同的类加载器载入,则会有两份不同的Class实例。
path可以输入不在System Loader以上层级类加载器搜索路径的其他路径。
- 使用常用的标准注释
@Override
就是标准注释,被注释的方法必须是父类或接口中已定义的方法,请编译程序协助是否真的为重新定义方法。@Deprecated
如果某个方法原先存在与API中,后来不建议再使用,可以在该方法上注释。若有用户后续想调用或重新定义这个方法,编译程序会提出警告。对于支持泛型的API,建议明确指定泛型真正类型,如果没有指定,编译程序会提出警告。@SuppressWarnings
指定抑制unchecked的警告产生:
@SuppressWarnings(value={"unchecked"})@SafeVarargs
表明开发人员确定避免了heap pollution问题。heap pollution问题就是编译程序无法检查执行时期的类型错误,无法具体确认自变量类型。@FunctionalInterface
让编译程序可协助检查interface是否可做为lambda的目标类型
本周代码托管截图
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 4000行 | 16篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 1/3 | 25/45 | |
第三周 | 500/1000 | 1/4 | 40/85 | |
第四周 | 800/1800 | 1/5 | 45/130 | |
第五周 | 700/2500 | 1/6 | 43/173 | |
第六周 | 700/3200 | 1/7 | 48/221 | |
第七周 | 400/3600 | 1/8 | 39/260 | |
第八周 | 400/4000 | 1/9 | 40/300 | |
第九周 | 500/4500 | 1/10 | 45/345 |