您的位置:首页 > 编程语言 > Java开发

20145301 《Java程序设计》第九周学习总结

2016-05-01 23:45 218 查看

20145301 《Java程序设计》第八周学习总结

教材学习内容总结

整合数据库

JDBC

JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无须接触底层数据库驱动程序的差异性。

数据库本身是个独立运行的应用程序,你撰写的应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找。通常你的应用程序会利用一组专门与数据库进行通信协议的链接库,以简化与数据库沟通时的程序撰写。

JDBC标准主要分为两个部分:JDBC应用程序开发者接口以及JDBC驱动程序开发者接口。如果应用程序需要联机数据库,就是调用JDBC应用程序开发者接口,相关API主要在
java.sql
javax.sql
两个包中,JDBC驱动程序开发者接口是数据库厂商操作驱动程序时的规范。

为了要连接数据库系统,必须要有厂商操作的JDBC驱动程序,必须在CLASSPATH中设定驱动程序JAR文档。

取得联机等与数据库来源相关的行为规范在
java.sql.DataSource
接口中,实际如何取得Connection则由操作接口的对象来负责。Connection是数据库连接的代表对象,接下来要执行SQL的话,必须取得
java.sql.Statement
操作对象,它是SQL描述的代表对象。

Statement的execute()可以用来执行SQL,并可以测试SQL是执行查询或更新,返回true表示SQL执行将返回ResultSet作为查询结果,此时可以使用getResultSet()取得ResultSet对象。视需求而定,Statement或者ResultSet在不使用时,可以使用close()将之关闭,以释放相关资源。Statement关闭时,所关联的ResultSet也会自动关闭。

在JDBC里要表示日期,是使用
java.sql.Date
,其日期格式是“年、月、日”,要表示时间的话则是使用
java.sql.Time
,其时间格式为“时、分、秒”,如果要表示“时、分、秒、微秒”的格式,你可以使用
java.sql.Timestamp


SimpleConnectionPoolDataSource操作了DataSource接口,其中使用List实例维护可重用的Connection,联机相关信息可以使用.properties设定。

在ResultSet时,默认可以使用next()移动数据光标至下一笔数据,而后使用getXXX()方法来取得数据。结果集类型可以指定3种设定:ResultSet.TYPEFORWARDONLY(默认)、ResultSet.TYPESCROLLINSENSITIVE、ResultSet.TYPESCROLLSENSITIVE。更新设定可以有两种指定:ResultSet.CONCURREADONLY(默认)、ResultSet.CONCUR_UPDATABLE。

每一次执行executeUpdate(),其实都会向数据库发送一次SQL,如果大量更新的SQL有一万笔,就等于通过网络进行了一万次的信息传送,网络传送信息实际上必须打开I/O、进行路由等动作。所以最好就是所有收集的SQL,最后会串为一句SQL,然后传送给数据库,既然是批次更新,顾名思义,就是仅用在更新上,所以批次更新的限制是,SQL不能是SELECT,否则会抛出异常。

JDBC定义了java.sql.RowSet接口,用以代表数据的列集合,这里的数据并不一定是数据库中的数据,可以是电子表格数据、XML数据或任何具有列集合概念的数据源。RowSet定义了列集合基本行为,其下有JdbcRowSet、CachedRowSet、FilteredRowSet、JoinRowSet、WebRowSet五个标准列集合子接口,定义在
javax.sql.rowset
包中。

反射与类加载器

运用反射

Java真正需要某个类时才会载入对应的.class文档,
java.lang.Class
的实例代表Java应用程序运行时载入的.class文档,Class类没有公开(public)构造函数,实例是由JVM自动产生,可以通过Object的getClass()方法,或者是透过.class常量取得每个对象对应的Class对象。

可以使用Class.forName()方法实现动态加载类,Class.forName()方法在找不到指定类时会抛出
ClassNotFoundException
异常。

Class对象加载的.class文档,取得Class对象后,就可以取得.class文档中记载的信息,每个类型都会有对应的类型,如果事先不知道类名称,可以利用Class.forName()动态加载.class文档,取得Class对象之后,利用其newInstance()方法建立类实例。

了解类加载器

类加载指的是将类的class文件读入JVM,并为之创建一个Class对象。

JVM预定义的三种类型类加载器,当一个JVM启动的时候,开始使用如下三种类型类装入器:

启动(Bootstrap)类加载器:引导类装入器是用本地代码实现的类装入器,它负责将 <java_runtime_home>/lib下面的核心类库或-Xbootclasspath选项指定的jar包加载到内存中。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。

扩展(Extension)类加载器:扩展类加载器是由Sun的ExtClassLoader(sun.misc.Launcher$ExtClassLoader)实现的。它负责将< Java_Runtime_Home >/lib/ext或者由系统变量-Djava.ext.dir指定位置中的类库加载到内存中。开发者可以直接使用标准扩展类加载器。

系统(System)类加载器:系统类加载器是由 Sun的 AppClassLoader(sun.misc.Launcher$AppClassLoader)实现的。它负责将系统类路径java -classpath或-Djava.class.path变量所指的目录下的类库加载到内存中。开发者可以直接使用系统类加载器。

Bootstrap Loader、Extended Loader与System Loader在程序启动后,就无法再改变它们的搜索路径。如果在程序运行过程中,打算动态决定从其他路径加载类,就要产生新的类加载器,新的类加载器建立后,父加载器会设为System Loader。

自定义泛型

泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在调用时传入具体的类型(类型实参)。

泛型也可以仅定义在方法上,可在方法返回类型前使用定义泛型,之后就可以使用T来定义返回类型、参数类型,或在方法内声明变量、转换类型等,在定义泛型时,使用extends限制指定T实际类型时,必须是某类的子类。

其他(感悟、思考等,可选)

心得体会:这周是这本学习笔记的最后的部分,这本学习笔记经过这两个月就算正式学完一遍,但我觉得我对各个章节的掌握情况不尽相同,这学习的一遍结束后,或许才是真正的开始,古人所谓读书要读三遍,所以我还需要反过头来继续巩固和复习,相信在回头看的过程中一定还会有许多新的体会和感悟,继续努力。

托管截图:



学习进度条

目标 代码行数 博客量学习时间重要成长
目标4000行30篇400小时----
第一周 100/4000 2/3015/400hello java
第二周350/40003/3040/400流程控制
第三周500/40004/3050/400类与对象、封装
第四周700/40005/3070/400继承、接口
第五周950/40006/3090/400异常与资源管理
第六周1200/40008/30120/400输入输出
第七周1400/400010/30145/400java时间
第八周1800/400012/30175/400API
第九周2400/400014/30220/400JDBC

参考资料

《Java学习笔记》

《Java学习笔记》学习指导

毕向东java教学
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: