20165226 2017-2018-4 《Java程序设计》第7周学习总结
教材学习内容总结
第十一章 JDBC与MySQL数据库
- 下载MySQL最新版本。
- 连接数据库
- 下载JDBC-MySQL数据库驱动
- 加载JDBC-MySQL数据库驱动
- 连接数据库(
Connection getConnection(java.lang.String,java.lang.String,java.lang.String)
和Connection getConnection(java.lang.String)
)
- 查询
- 顺序查询,使用
next()
移到下一个数据行 - 条件与排序查询
- where子语句
- 排序,用
order by
子语句对记录进行排序
select * from mess order by height select * from mess where name like '%林%' order by name
- 顺序查询,使用
- statement对象调用方法
- 更新
update 表 set 字段 = 新值 where<条件子句>
- 添加
insert into 表(字段列表)value (对应的具体的记录)
- 删除
delete from 表名 where <条件子句>
- 更新
- 连接SQL Server数据库
教材学习中的问题和解决过程
- 问题一:在学习P328中
11.5 连接数据库
时有些疑惑为什么用JDB连接数据库? 问题一解决方案:就像是接口一样,想要用这个接口,就要实现这个接口里的方法,jdbc也一样,它实现了某些特定功能的接口,也就是那些个能连接数据库的方法,所以,你必须用它。但也可以不用JDBC,也可以用hibernate,ibatis。
- 问题二:在查询上个问题的时候看到了hibernate,疑惑hibernate和jdbc连接数据库的区别?
- 问题二解决方案:
1、Hibernate先检索缓存中的映射对象( 即hibernate操作的是对象),而jdbc则是直接操作数据库。
2、Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合。
3、Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。
Hibernate毕竟是基于JDBC的技术,高度的封装提高了开发效率,从运行效率上来说如果正确使用JDBC那一定是比HB高的。
代码调试中的问题和解决过称
- 问题一:在编译Example11_1的时候,出现了点小bug
问题一解决方案:在Ubuntu中输入
sudo apt-get install mysql-server mysql-client
下载安装了MySQL问题二:上传代码时出现了错误
- 问题二解决方案:比对了一下,结果是
origin
拼写成了origion
- 问题三:在下载安装MySQL客户端管理工具时出现了一系列小bug,如无法初始化
- 问题三解决方案:开始在网上搜索相关错误及解决方案,然后进行源文件的编写保存,然后发现出现了另一个bug(见第二幅图),然后再回到书上,揣摩了一下,发现其实这个步骤时解压,我其实时已经解压了,因此我跳过这个环节,直接
mysqld install
,于是成功安装。
- 问题四:进入MySQL安装目录后,修改密码时出现错误
- 问题四解决方案:原来初始化时原用户没有设置密码,故直接
enter
,然后便可修改密码
代码托管
上周考试错题总结
第五周错题总结
- 知识点: 内部类的类体中不可以声明类变量和类方法,P162页。
下列关于内部类的说法,正确的是
A 其他类不可以用某个类的内部类声明对象。
B 内部类字节码文件的名字格式是“外嵌类名$内部类名”。
C 内部类的类体可以声明类变量和类方法。
D 内部类在成员位置上,因此可以被private修饰。
正确答案: A B D 我的答案: A B
- 知识点:Java使用throw抛出一个异常,使用throws声明方法可能抛出异常。
下列关于异常的说法,错误的是
A Java使用throws抛出一个异常,使用throw声明方法可能抛出异常。
B 执行System.out.println(3/0);语句会报ArithmeticException异常。
C Java中的错误是以对象的方式呈现为java.lang.Throwable的各种子类实例。
D 方法parseInt()在执行过程中可能抛出DataFormatException异常。
正确答案: A D 我的答案: D
- 知识点:对于严重的错误,通过Error类来描述,而对于非严重的问题,则是通过Exception类来进行描述的。
如果超出JVM运行能力之外,如“byte[] arr=new byte[1024*1024*600];”会抛出java.lang.OutOfMemoryError异常。
A true
B false
正确答案: B 我的答案: A
- 知识点:如果程序撰写的流程中先return了,也有finally区块,finally区块会先执行完后,再将值返回。Finally代码块只有一种情况不会被执行,就是在之前执行了System.exit(0)。
下列程序的运行结果为
public class FinallyDemo {
public static void main(String[] args) {
System.out.print(test(true));
}
static int test(boolean flag) {
try {
if (flag) {
return 1;
}
} finally {
System.out.print("finally…");
}
return 0;
}
}
A 1finally…
B finally…1
C 1finally…0
D 1
正确答案: B 我的答案: C
- 知识点:public int hashCode():计算此抽象路径名的哈希码。
以下关于File类常用方法的叙述,错误的是
A public long length():获取文件长度
B public int hashCode():计算此文件的哈希码
C public String toString():返回此抽象路径名的路径名字符串
D public Boolean isFile():判断一个文件是否是普通文件,而不是目录
正确答案: B 我的答案: D
- 知识点:InputStream是父类。
InputStream类继承自FileInputStream,可以以字节为单位读取文件。
A true
B false
正确答案: B 我的答案: A
- 知识点:D项:会抛出NullPointerException异常。
下列关于public int read(byte[] b, int off, int len)方法的叙述,正确的是
A 此方法覆盖了InputStream类中的read方法。
B 此方法从该输入流中将最多len个字节的数据读入一个byte数组中。
C 此方法返回读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回-1。
D 如果b为null,则会抛出IndexOutOfBoundsException异常。
正确答案: A B C 我的答案: B C
- 知识点:关于java.io类的子类的相关概念
下列哪一个不是java.io类的子类?
A BufferedReader
B BufferedWriter
C FileReader
D FileWriter
E PrintReader
F PrintWriter
正确答案: E 我的答案: C
第六周错题总结
- 知识点:TreeSet泛型类创建树集。
下列关于泛型类的子类的说法,正确的个数为
①LinkedList<E>泛型类创建一个链表结构的对象。
②Stack<E>泛型类创建一个堆栈对象。
③HashMap<E>泛型类创建散列映射。
④DelayQueue<E>泛型类创建一个无界阻塞队列。
⑤TreeSet<E>泛型类创建树映射。
⑥Vector<E>创建可增长的对象数组。
漏判了一个
- 知识点:B中如果此映射不包含该键的映射关系,则返回null。C中如果该映射以前包含了一个该键的映射关系,则旧值被替换。
下列关于HashMap<E>泛型类常用方法的介绍,正确的是
A public boolean isEmpty()如果此映射不包含键-值映射关系,则返回 true。
B public V get(Object key)返回指定键所映射的值;如果此映射不包含该键的映射关系,则抛出异常。
C public V put(K key, V value) 在此映射中关联指定值与指定键。如果该映射以前包含了一个该键的映射关系,则以先定义的值为准。
D public Object clone()返回此 HashMap 实例的浅表副本:并不复制键和值本身。
正确答案: A D 我的答案: A B D
- 知识点:A项:如果指定对象无法与该 set 中的当前元素进行比较,则抛出ClassCastException异常。
下列关于TreeSet<E>泛型类常用方法的介绍,正确的是
A public boolean contains(Object o) 如果此 set 包含指定的元素,则返回 true。如果指定对象无法与该 set 中的当前元素进行比较,或不包含,则返回false。
B public boolean add(E e)将指定的元素添加到此 set。如果此 set 已经包含这样的元素,则该调用不改变此 set 并返回 false。
C public boolean addAll(Collection<? extends E> c)将指定 collection 中的所有元素添加到此 set 中。如果此 set 由于调用而发生更改,则返回 true。
D public E lower(E e) 返回此 set 中严格小于给定元素的最大元素;如果不存在这样的元素,则返回 null。
正确答案: B C D 我的答案: A D
- 知识点:长度等于字符串中 Unicode 代码单元的数量。
String类中的length()方法用来获取一个String对象的字符序列的长度,单位为字节。
A true
B false
正确答案: B 我的答案: A
- 知识点:C项:\b\w{6}\b 匹配刚好6个字符的单词。F项: IP地址中每个数字都不能大于255,该表达式忽略了这个约束条件。正确的是((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。
下列关于正则表达式的说法,正确的是
A \ba\w*\b匹配以字母a开头的单词
B \d+匹配1个或更多连续的数字。
C \b\w{6}\b 匹配6个及以上字符的单词。
D [0-9]代表的含意与\d就是完全一致的:一位数字
E \S+匹配不包含空白符的字符串。
F (\d{1,3}\.){3}\d{1,3}用来匹配 IP地址。
正确答案: A B D E 我的答案: A B E F
- 知识点:③:要查找\本身,需要用\。⑥:注意字符转义,应为""Hello"".matches("(["'])[^\"']*\1")。
下列通过测试的断言语句有几个?
①assertEquals(true, "123".matches("\\d+"));
②assertEquals(true, "3.5".matches("\\d\\.\\d"));
③assertEquals(true, "C:\\Windows".matches("C:\\Windows"));
④assertEquals(true, "hello hello".matches("\\b(?<Word>\\w+)\\b\\s+\\k<Word>\\b"));
⑤assertEquals("r*pl*c*m*nt","replacement".replaceAll("[aeiou]","*"));
⑥assertEquals(true, "\"Hello\"".matches("([\"'])[^\"']*\1"));
⑦assertEquals("##","xfooxxxxxxfoo".replaceAll(".*?foo","#"));
⑧assertEquals("Let's meet at [TIME].","Let's meet at 12:38.".replaceAll("((1|0?)[0-9]|2[0-3]):([0-5][0-9])","[TIME]"));
A 7个
B 6个
C 4个
D 3个
正确答案: B 我的答案: C
- 知识点:Java throws an exception if invalid date values are passed. There is no 40th day in April—or any other month for that matter.
What is the output of the following code?(下面代码的运行结果是?)
LocalDate date = LocalDate.of(2018, Month.APRIL, 40);
System.out.println(date.getYear() + " " + date.getMonth()+ " "+ date.getDayOfMonth());
A 2018 APRIL 4
B 2018 APRIL 30
C 2018 MAY 10
D Another date
E The code does not compile.
F A runtime exception is thrown.
正确答案: F 我的答案: D
结对及互评
- 博客中值得学习的或问题:
- 要素全面
- 很认真细致
- 排版简介美观
- 代码中值得学习的或问题:
- 代码中文件分类简洁
- 很认真
点评过的同学博客和代码
- 本周结对学习情况
- 20165230
- 结对学习内容
- 商讨结对编程的相关应用
- 20165230
其他
学习了MySQL客户端管理工具,操作了如何下载安装MySQL等进行数据库的连接。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 48/48 | 1/1 | 20/20 | |
第二周 | 390/438 | 2/3 | 18/38 | |
第三周 | 866/1304 | 1/4 | 18/56 | |
第四周 | 1105/2409 | 1/5 | 30/86 | |
第五周 | 1229/3196 | 1/6 | 20/106 | |
第六周 | 1147 /4343 | 2/8 | 25/131 | |
第七周 | 1222 / 3668 | 1/9 | 20/151 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:30小时
实际学习时间:18小时
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)