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

教材学习内容总结

整合数据库

  • JDBC

    • JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无须接触底层数据库驱动程序的差异性。
    • 数据库本身是个独立运行的应用程序,你撰写的应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找。通常你的应用程序会利用一组专门与数据库进行通信协议的链接库,以简化与数据库沟通时的程序撰写。
    • JDBC标准主要分为两个部分:JDBC应用程序开发者接口以及JDBC驱动程序开发者接口。如果应用程序需要联机数据库,就是调用JDBC应用程序开发者接口,相关API主要在java.sqljavax.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启动的时候,开始使用如下三种类型类装入器:
    1. 启动(Bootstrap)类加载器:引导类装入器是用本地代码实现的类装入器,它负责将 <java_runtime_home>/lib下面的核心类库或-Xbootclasspath选项指定的jar包加载到内存中。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。
    2. 扩展(Extension)类加载器:扩展类加载器是由Sun的ExtClassLoader(sun.misc.Launcher$ExtClassLoader)实现的。它负责将< Java_Runtime_Home >/lib/ext或者由系统变量-Djava.ext.dir指定位置中的类库加载到内存中。开发者可以直接使用标准扩展类加载器。
    3. 系统(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/30 15/400 hello java
      第二周 350/4000 3/30 40/400 流程控制
      第三周 500/4000 4/30 50/400 类与对象、封装
      第四周 700/4000 5/30 70/400 继承、接口
      第五周 950/4000 6/30 90/400 异常与资源管理
      第六周 1200/4000 8/30 120/400 输入输出
      第七周 1400/4000 10/30 145/400 java时间
      第八周 1800/4000 12/30 175/400 API
      第九周 2400/4000 14/30 220/400 JDBC

      参考资料

      • 《Java学习笔记》
      • 《Java学习笔记》学习指导
      • 毕向东java教学

最新文章

  1. CSS样式表
  2. Python的平凡之路(17)
  3. WPF嵌入Unity3D代码下载
  4. C# 参考之方法参数关键字:params、ref及out
  5. 今天遇到的一个问题(windows的ssh客户端连接不到虚拟机Ubuntu)
  6. React如何性能调优
  7. MyBatis一对多双向关联——MyBatis学习笔记之七
  8. 第一节 Hibernate 基本配置
  9. [转帖]2010.10.7google北大笔试题回忆
  10. Web前端新人笔记之CSS值和单位
  11. SQL 时间戳转DateTime类型
  12. object c入门
  13. 景观指数分析 - 初识FragStats4.2
  14. CSS,JavaScript知识点
  15. 使用ArcMap做一个1:5000标准分幅图并编号
  16. 深入学习javaScript闭包(闭包的原理,闭包的作用,闭包与内存管理)
  17. 【转】Influxdb 编译
  18. 齐博CMS:最常用的一些变量名,方便二次开发.必须要熟悉的
  19. 20165230 《Java程序设计》实验五《网络编程与安全》实验报告
  20. C#整数三种强制类型转换int、Convert.ToInt32()、int.Parse()、string到object 的区别

热门文章

  1. Oracle的存储过程编程
  2. Strut2流程分析-----从请求到Action方法()
  3. linux下安装JDK,及配置环境变量
  4. 并发编程&amp;数据库 - 考核题
  5. qemu进程页表和EPT的同步问题
  6. oracle查看被锁的表和被锁的进程,杀掉进程
  7. [React-Native]入门(Hello World)
  8. lower_bound()函数,upper_bound()函数
  9. cocosBuider 控件命名的坑
  10. 【转】C#操作xml