20155228 2016-2017-2 《Java程序设计》第9周学习总结

教材学习内容总结

整合数据库

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

  • 厂商在操作JDBC驱动程序时,依方式可将驱动程序分为4种类型:

  • Type1:JDBC-ODBC Bridge Driver

  • Type2:Native API Driver

  • Type3: JDBC-Net Driver

  • Type4: Native Protocol Driver

  • 数据库操作相关的JDBC接口或类都位于java.sql包中。要连接数据库,可以向DriverManager取得Connection对象。Connection是数据库联机的代表对象,一个Connection对象就代表一个数据库联机。SQLException是在处理JDBC时经常遇到的一个异常对象,为数据库操作过程发生错误时的代表对象。

  • 取得联机等于数据库来源相关的行为规范javax.sql.DataSource接口,实际如何取得Connection则由操作接口的对象来负责。

  • Connection是数据库连接的代表对象,接下来要执行SQL的话必须取得java.sql.Statement对象,它是SQL描述的代表对象。可以使用Connection的createStatement()来建立Statement对象。

  • Statament的excuteQuery()方法则是用于SELECT等查询数据库的SQL,excuteUpdate()会返回int的结果,表示数据变动的笔数,excuteQuery()会返回java.sql.ResultSet对象,代表查询结果,查询的结果会是一笔一笔的数据。可以使用REsultSet的next()来移动至下一笔数据,它会返回true或false表示是否有下一笔数据,接着可以使用getXXX()来取得数据。

  • 在使用Connection、Statement或ResultSet时,要将至关闭以释放相关资源。

  • 如果有些操作只是SQL语句当中某些参数会有所不同,其余的SQL字句皆相同,则可以使用java.sql.PreparedStatement。可以使用Connetion的preparedStatement()方法建立好一个预先编译的SQL语句,当中参数会变动的部分,先指定“?”这个占位字符。等于需要真正指定参数执行时,再使用相对应的setIn()、setString()等方法,指定“?”处真正应该有的参数。

反射与类加载器

  • Java真正需要的某个类时才会加载对应.class文档,而非在程序启动就加载所有类。java.lang.Class的实例代表java应用程序运行时加载的.class文档。可以通过Object的getClass()方法,或者通过.class常量取得每个对象对应的Class对象,如果是基本类型,也可以使用对应的打包类加上.TYPE取得Class对象。例如Integer.TYPE可以代表int的class对象。

  • 使用Integer.TYPE取得代表int基本类型的Class,如果要取得代表Integer.class文档的Class,则必须使用Integer.class。

  • 编译时期若使用到相关类,编译程序会检查对应的.class文档中记载的信息,以确定是否可完成编译。执行时期使用某类时,会先检查是否对应的class对象,如果没有会加载对应的.class文档并生成对应的Class实例。每个类的实例都会知道自己由哪个Class实例生成。默认使用getClass()或.class取得的Class实例会是同一个对象。

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

  • Class对象代表加载的.class文档,取得class对象后,就可以取得与class文档中记载的信息,像是包、构造函数、方法成员、数据成员等类型。每个类型会有应有的类型,例如包对应类型是java.lang.Package,构造函数对应类型是java.lang.reflect.Field等。

  • 如果事先不知道类名称,可以利用Class.forName()动态加载.class文档,取得Class对应之后,利用其newInteger()方法建立实例。

  • 若要动态生成数组,必须使用java.lang.reflect.Array的newInstance()方法。

  • java.lang.reflect.Method实例是方法的代表对象,可以使用invoke()方法来动态调用指定的办法。

  • 启动JVM并进行初始化动作后会产生Bootstrap Loader,Bootstrap Loader会产生Extended Loader,并将Extended Loader的父加载器设为Bootstrap Loader,接着BootstrapLoader会产生SystemLoader,并将SystemLoader的父加载器设为ExtendedLoader。

  • 在加载类时,每个类加载器会先将加载类的任务交给父加载器设为ExtendedLoader。

  • 在加载类时,每个类加载器会先将加载类的任务交给父加载器,如果父类加载器找不到,才由自己加载。所以加载指定类时,会以Boststrap Loader——>Extended Loader——>System Loader顺序寻找类,如果所有类加载器都找不到指定类,就会抛出java.lang.NoClassDefFoundError。

  • 类加载器都继承自抽象类java.lang.ClassLoader()取得加载对应.class文档的ClassLoader实例,而ClassLoader的getParent()方法可以取得父ClassLoader实例。

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

  • 由同一类加载器载入的.class文档,只会有一个class实例,如果同一.class文档由两个不同的类加载器载入,则会有两份不同的class实例。

教材学习中的问题和解决过程

1.JDBC和ODBC区别

差异 解释
ODBC ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC
JDBC JDBC是执行SQL语句的Java API。JDBC本身是一个产品的商标名,但它也可被看作为"Java Database Connecivity(Java数据库连接)"。它由一组用Java语言编写的类与接口组成。JDBC已成为一种供工具/数据库开发者使用的标准API,用户可以用纯Java API来编写数据库应用。
Java不能直接使用ODBC,这是因为ODBC使用C语言接口,如果让Java来调用本机C代码的话,那么会在安全、属性、健壮性、应用的可移植性等方面带来困难。
不希望把ODBC C API逐字地翻译成Java API。例如,ODBC使用了大量的易于出错的指针,而Java取消了这种不安全的指针。现在通过JDBC,把ODBC翻译成具有Java风格的面向对象的接口。
JDBC的Java API提供"纯Java"的解决办法。当使用ODBC时,ODBC驱动器管理程序与驱动器必须手工地装入到每架客户机上。而JDBC驱动器全部是用Java编写的,JDBC代码则在所有Java平台(从网络计算机到主机)上都可自动安装,并且是可移植的和安全的。

2.JDBC中三种Statement对象的作用

  • Statement对象用于执行不带参数的简单SQL语句。

  • Prepared Statement 对象用于执行预编译SQL语句。

  • Callable Statement对象用于执行对存储过程的调用。

代码调试中的问题和解决过程

1.JDBC API应用的基本操作

  • 导入jdbc操作相关包

  • import java.sql.*;
    
    
  • 写好异常捕获结构

  • try{}catch()finally{}
    
    
  • 加载驱动程序

  •       Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
  • 获得连接对象

  •          con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=accp","sa","123");
  • 创建sql语句执行对象(预处理语句集对象)

  •         PreparedStatement ps=conn.prepareStatement("insert into student values('name','sex')");
  • 执行sql命令

  •         int count = ps.executeUpdate();
    //注意如果是查询就必须返回结果集:然后从结果集中取数据
    ResultSet rs=ps.executeQuery();
    while(rs.next())
    {
    String str1=rs.getString(1);//列下标从1开始
    int num1=rs.getInt(2);
    }
  • 关闭预处理语句集对象和结果集对象

  •   	rs.close();
    ps.close();
  • 关闭连接对象

  •   	conn.close();
    
    

2.JDBC对数据库的数据进行增加、修改、删除、查询等操作

增加
String s1="insert into tableNames (id,name,password) values(myseq.nextval,?,?);"
Class.forName(driver);
Connection conn = DriverManager.getConnection(url,dbUser,dbPwd);
PreparedStatement prepStmt = conn.prepareStatement(s1);
prepStmt.setString(1,name);
prepStmt.setString(2,password);
ResultSet rs=stmt.executeUpdate();
删除
String s2="delete from tbNames where name=?";
Class.forName(driver);
Connection conn = DriverManager.getConnection(url,dbUser,dbPwd);
PreparedStatement prepStmt = conn.prepareStatement(s2);
prepStmt.setString(1,name);
ResultSet rs=stmt.executeUpdate();
修改
String s3=“update tbNames set name=? where id=?”;
Class.forName(driver);
Connection conn = DriverManager.getConnection(url,dbUser,dbPwd);
PreparedStatement prepStmt = conn.prepareStatement(s3);
prepStmt.setString(1,name);
prepStmt.setString(2,id);
ResultSet rs=stmt.executeUpdate();

代码托管

上周考试错题总结

1.ByteBuffer 调用了flip()之后,position的值一定是0。

  • A .True

  • B .False

答案:B

2.正则表达式”(‘|”)(.*?)\1”匹配 “'Hello',"World””的结果是()

  • A .不匹配

  • B .'Hello'

  • C ."World"

  • D .'Hello',"World"

答案:B、C
解析:反向引用 \1 代表第一个()中的匹配内容

3.bc? 匹配( )

  • A .ab

  • B .abc

  • C .abcc

  • D .abccc

答案:A、B
解析:? 重复0或1次

4.Which of the statements is true about the following code snippet?(对于下面的代码段,说法正确的是?)

     int[] array = new int[25];
array[25] = 2;
  • A .The integer value 2 will be assigned to the last index in the array.(整数2会赋给数组中最后一个元素)

  • B .The integer value 25 will be assigned to the second index in the array.(整数25会赋给数组中的第2个索引)

  • C .The integer value 25 will be assigned to the third value in the array. (整数25会赋给数组中的第3个元素)

  • D .This code will result in a compile-time error.(代码会产生编译时错误)

  • E .This code will result in a run-time error. (代码会产生运行时错误)

答案:E
解析:This code will throw an ArrayIndexOutOfBoundsException, since the last index in this array will be 24. This causes a run-time error.

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)

    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分

  4. 代码调试中的问题和解决过程, 一个问题加1分

  5. 本周有效代码超过300分行的(加2分)

    • 一周提交次数少于20次的不加分
  6. 其他加分:

    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分
  7. 扣分:

    • 有抄袭的扣至0分
    • 代码作弊的扣至0分
    • 迟交作业的扣至0分

点评过的同学博客和代码

  • 本周结对学习情况

  • 20155222

  • 上周博客互评情况

20155205

20155208

20155334

20145234

20155321

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 20篇 400小时
第一周 10/10 1/4 12/12
第二周 120/130 1/5 9/21
第三周 210/340 1/6 9/30
第四周 460/800 1/7 9/39
第五周 400/1200 1/8 9/48
第六周 300/1500 1/9 9/57
第七周 300/1800 2/11 9/66
第八周 300/2100 1/12 9/75
第九周 300/2400 2/14 9/84

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。

耗时估计的公式

:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:9小时

  • 实际学习时间:9小时

(有空多看看现代软件工程 课件

软件工程师能力自我评价表
)

参考资料

20155228 2016-2017-2 《Java程序设计》第9周学习总结的更多相关文章

  1. 20155334 2016-2017-2 《Java程序设计》第九周学习总结

    20155334 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章:整合数据库 16.1 JDBC入门 JDBC(Java DataBase Conn ...

  2. 20155321 2016-2017-2 《Java程序设计》第九周学习总结

    20155321 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 厂商在实现JDBC驱动程序时,依方式可将驱动程序分为四种类型: JDBC-OD ...

  3. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  4. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  5. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  6. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  7. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  8. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  9. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  10. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

随机推荐

  1. Http-server 的使用

    Http-server 是一款基于node.js的web前端开发服务,可以很好的承担前后端解耦后,前端服务的搭建. 1,首先安装node node下载地址:https://nodejs.org/zh- ...

  2. SQL server 2005数据库的还原与备份

    一.SQL数据库的备份: 1.依次打开 开始菜单 → 程序 → Microsoft SQL Server 2005→SQL Server Management Studio ,这里我以UMVTEST命 ...

  3. axios的特点有哪些?

    1.axios是一个基于promise的HTTP库,支持promise的所有API: 2.它可以拦截请求和响应: 3.它可以转换请求数据和响应数据,并对响应回来的内容自动转换为json类型的数据: 4 ...

  4. oracle创建索引表空间

    Oracle 的索引可分为5种,它们包括唯一索引.组合索引.反向键索引.位图索引和基于函数的索引.1.创建索引的标准语法CREATE INDEX 索引名 ON 表名 (列名)TABLESPACE 表空 ...

  5. 前端 HTML body标签相关内容 常用标签 表单标签 form 表单控件分类

    表单控件分类 input标签: input标签 type属性的text,password,button按钮,submit按钮 input标签placeholder属性 标签上显示内容 input标签 ...

  6. 前端 HTML body标签相关内容 常用标签 表单标签 form

    表单标签 form 表单是一个包含表单元素的区域表单元素是允许用户在表单中输入内容,比如:文本域(textarea).输入框(input).单选框() 表单的作用 form标签作用是把用户输入数据信息 ...

  7. Caffe上用SSD训练和测试自己的数据

        学习caffe第一天,用SSD上上手. 我的根目录$caffe_root为/home/gpu/ljy/caffe    一.运行SSD示例代码    1.到https://github.com ...

  8. wx工具栏,菜单栏,状态栏

    #!/usr/bin/env python # -*- coding: utf- -*- import wx import wx.py.images class ToolbarFrame(wx.Fra ...

  9. vue中$set的用法

    数组: this.$set(Array,index, newValue) 对象: this.$set(Object, key, value)

  10. HBuilder 自动整理代码格式快捷键设置

    工具 ->选项