
正文
20165228 2017-2018-2 《Java程序设计》第7周学习总结
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
20165228 2017-2018-2 《Java程序设计》第7周学习总结
教材学习内容总结
-
MySQL数据库管理系统安装和初始化
-
使用MySQL建立连接和数据库、表
-
使用JDBC:(1)与一个数据库建立连接。
(2)向数据库发送SQL语句。
(3)处理数据库返回的结果。
-
应用程序负责加载的JDBC-MySQL数据库驱动,代码如下:
try{ Class.forName("com.mysql.jdbc.Driver");
}
catch(Exception e){}
-
应用程序要和MySQL数据库服务器管理的数据库students(在11.3节建立的数据库)建立连接
-
使用Connection getConnection(java.lang.String) 方法建立连接的代码如下:
Connection con;
String uri =
"jdbc:mysql://192.168.100.1:3306/students?user=root&password=&useSSL=true";
try{
con = DriverManager.getConnection(uri); //连接代码
}
catch(SQLException e){
System.out.println(e);
}
-
使用Connection getConnection(java.lang.String, java.lang.String, java.lang.String)方法建立连接的代码如下:
Connection con;
String uri = "jdbc:mysql:// 192.168.100.1:3306/students? useSSL=true";
String user ="root";
String password ="";
try{
con = DriverManager.getConnection(uri,user,password); //连接代码
}
catch(SQLException e){
System.out.println(e);
}
-
如果数据库的表中的记录有汉字,那么在建立连接时需要额外多传递一个参数characterEncoding,并取值gb2312或utf-8
String uri =
"jdbc:mysql://localhost/students?useSSL=true&characterEncoding=utf-8";
con = DriverManager.getConnection(uri, "root",""); //连接代码
-
查询操作:
1、得到SQL查询语句对象
try{ Statement sql=con.createStatement();
}
catch(SQLException e ){}
- MySQL数据库管理系统安装和初始化
- 使用MySQL建立连接和数据库、表
-
使用JDBC:(1)与一个数据库建立连接。
(2)向数据库发送SQL语句。
(3)处理数据库返回的结果。 - 应用程序负责加载的JDBC-MySQL数据库驱动,代码如下:
try{ Class.forName("com.mysql.jdbc.Driver");
}
catch(Exception e){}
- 应用程序要和MySQL数据库服务器管理的数据库students(在11.3节建立的数据库)建立连接
- 使用Connection getConnection(java.lang.String) 方法建立连接的代码如下:
Connection con;
String uri =
"jdbc:mysql://192.168.100.1:3306/students?user=root&password=&useSSL=true";
try{
con = DriverManager.getConnection(uri); //连接代码
}
catch(SQLException e){
System.out.println(e);
}
- 使用Connection getConnection(java.lang.String, java.lang.String, java.lang.String)方法建立连接的代码如下:
Connection con;
String uri = "jdbc:mysql:// 192.168.100.1:3306/students? useSSL=true";
String user ="root";
String password ="";
try{
con = DriverManager.getConnection(uri,user,password); //连接代码
}
catch(SQLException e){
System.out.println(e);
}
- 如果数据库的表中的记录有汉字,那么在建立连接时需要额外多传递一个参数characterEncoding,并取值gb2312或utf-8
String uri =
"jdbc:mysql://localhost/students?useSSL=true&characterEncoding=utf-8";
con = DriverManager.getConnection(uri, "root",""); //连接代码
-
查询操作:
1、得到SQL查询语句对象
try{ Statement sql=con.createStatement();
}
catch(SQLException e ){}
2、这个对象就可以调用相应的方法实现对数据库中表的查询和修改,并将查询结果存放在一个ResultSet类声明的对象
ResultSet rs = sql.executeQuery("SELECT * FROM students");
也就是说SQL查询语句对数据库的查询操作将返回一个ResultSet对象,ResultSet对象是按“列”(字段)组织的数据行构成。
-
关闭连接:
ResultSet对象和数据库连接对象(Connection对象)实现了紧密的绑定,一旦连接对象被关闭,ResultSet对象中的数据立刻消失。这就意味着,应用程序在使用ResultSet对象中的数据时,就必须始终保持和数据库的连接,直到应用程序将ResultSet对象中的数据查看完毕
con.close();
此后,程序将无法获取ResultSet对象中的数据
-
顺序查询:
指ResultSet对象一次只能看到一个数据行,使用next()方法移到下一个数据行,next()方法最初的查询位置,即游标位置,位于第一行的前面。next()方法向下(向后、数据行号大的方向)移动游标,移动成功返回true,否则返回false - 使用下述方法获得一个Statement对象,从而得到一个可滚动的结果集
Statement stmt = con.createStatement(int type ,int concurrency);
-
条件和排序查询:
1. where子语句
一般格式:
select 字段 from 表名 where 条件
2. 排序
用order by子语句对记录排序
select * from mess where name like '%林%' order by name
- 更新操作
update 表 set 字段 = 新值 where <条件子句>
- 添加操作
insert into 表(字段列表) values (对应的具体的记录)
或
insert into 表 values (对应的具体的记录)
- 删除操作
delete from 表名 where <条件子句>
- 使用预处理语句和通配符
-
通用查询:
编写一个类,只要用户将数据库名、SQL语句传递给该类对象,那么该对象就用一个二维数组返回查询的记录。 -
事务:
事务由一组SQL语句组成,所谓事务处理是指:应用程序保证事务中的SQL语句要么全部都执行,要么一个都不执行 -
JDBC事务处理步骤:
1.用setAutoCommit(booean b)方法关闭自动提交模式
2.用commit()方法处理事务
3.用rollback()方法处理事务失败
教材学习中的问题和解决过程
-
问题1:教材中提到“JDBC操作不同的数据库仅仅是连接方式上的差异而已”,连接方式有什么差异呢?
-
问题1解决方案:参考JDBC各种数据库连接方式
代码调试中的问题和解决过程
-
问题1:在按照配套PPT使用windows安装MySqlt初始data时出错
-
问题1解决方案:进入C:/windows/system32 ,找到cmd,通过管理员身份运行cmd,在mysql目录的bin子目录下输入mysqld --initialize-insecure可以初始化成功
代码托管
-
问题1:在按照配套PPT使用windows安装MySqlt初始data时出错
-
问题1解决方案:进入C:/windows/system32 ,找到cmd,通过管理员身份运行cmd,在mysql目录的bin子目录下输入mysqld --initialize-insecure可以初始化成功
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
-
错题1:
下列关于HashMap泛型类常用方法的介绍,正确的是 ACD
A.public boolean isEmpty()如果此映射不包含键-值映射关系,则返回 true。
B.public V get(Object key)返回指定键所映射的值;如果此映射不包含该键的映射关系,则抛出异常。
C.public V put(K key, V value) 在此映射中关联指定值与指定键。如果该映射以前包含了一个该键的映射关系,则以先定义的值为准。
D.public Object clone()返回此 HashMap 实例的浅表副本:并不复制键和值本身。
-
解析:查询API。B项:如果此映射不包含该键的映射关系,则返回null。C项:如果该映射以前包含了一个该键的映射关系,则旧值被替换。
-
错题2:
下列关于TreeSet泛型类常用方法的介绍,正确的是 BCD
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。
-
解析:A项:如果指定对象无法与该 set 中的当前元素进行比较,则抛出ClassCastException异常。查询API。B项:如果此映射不包含该键的映射关系,则返回null。C项:如果该映射以前包含了一个该键的映射关系,则旧值被替换。
-
错题3:
String类中的length()方法用来获取一个String对象的字符序列的长度,单位为字节。 B
A.true
B.false
-
解析:长度等于字符串中 Unicode 代码单元的数量。
-
错题4:
public boolean startsWith(String prefix)方法,如果参数是空字符串,则抛出异常。 B
A.true
B.false
-
解析:返回的结果是true
-
错题5:
下列关于public int compareTo(String anotherString)的说法,正确的是 ACDE
A.按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode值。
B.如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个正整数。
C.如果它们在一个或多个索引位置上的字符不同,假设 k 是这类索引的最小值,compareTo 返回这两个字符串在位置 k 处两个char 值的差,即值:this.charAt(k)-anotherString.charAt(k)
D.如果没有字符不同的索引位置,则较短字符串的字典顺序在较长字符串之前。在这种情况下,compareTo 返回这两个字符串长度的差
E.compareTo 只在方法 equals(Object) 返回 true 时才返回 0。
-
解析:查询API。B项:返回一个负整数。
-
错题6:
下列关于substring方法的说法,正确的是 ACD
A.public String substring(int beginIndex)返回的子字符串从指定索引处的字符开始,直到此字符串末尾。
B.public String substring(int beginIndex, int endIndex) 子字符串从指定的 beginIndex 处开始,直到索引 endIndex处的字符。
C."emptiness".substring(9)返回值为""。
D."smiles".substring(1, 5)返回值为"mile"。
E.若beginIndex 大于 endIndex,则substring(int beginIndex, int endIndex)返回-1。
-
解析:查询API。B项:直到索引 endIndex - 1 处的字符。E项:抛出IndexOutOfBoundsException异常
-
错题7:
下列说法错误的是 D
A.java.util包中的Data类重写了toString()方法。
B.Arrays和Point都继承了toString方法。
C.调用x.toString()方法的地方可以用""+x代替。
D.定义int[] Numbers = {1, 2, 3}; String s1 = ""+Numbers;,则System.out.println(s1);调用了toString方法,可以将数组输出。
-
解析:D项:若想打印数组,数组必须调用静态方法Arrays.toString,也就是将以上程序中的String s1 = ""+Numbers;改为String s1 = Arrays.toString(Numbers);。如果要打印多维数组,则需要调用Arrays.deepToString方法。
-
错题8:
下列关于字符串与字符数组、字节数组的说法,正确的是 ACD
A.getChars (int srcBegin, int srcEnd, char[] dst, int dstBegin)方法的返回值为空。
B.srcEnd是字符串中要复制的最后一个字符的索引。
C.srcBegin 大于 srcEnd时,会抛出IndexOutOfBoundsException异常。
D.要复制到 dst 子数组的字符从索引 dstBegin 处开始,并结束于索引dstbegin + (srcEnd-srcBegin) - 1
-
解析:查询API。B项:srcEnd是字符串中要复制的最后一个字符之后的索引。
-
错题9:
下列关于正则表达式的说法,正确的是 ABDE
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地址。
-
解析: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?)。
结对及互评
-
博客中值得学习的或问题:
要素全面
很认真细致
排版简介美观
-
代码中值得学习的或问题:
代码中文件分类简洁
很认真
其他(感悟、思考等,可选)
下列关于HashMap泛型类常用方法的介绍,正确的是 ACD
A.public boolean isEmpty()如果此映射不包含键-值映射关系,则返回 true。
B.public V get(Object key)返回指定键所映射的值;如果此映射不包含该键的映射关系,则抛出异常。
C.public V put(K key, V value) 在此映射中关联指定值与指定键。如果该映射以前包含了一个该键的映射关系,则以先定义的值为准。
D.public Object clone()返回此 HashMap 实例的浅表副本:并不复制键和值本身。
下列关于TreeSet泛型类常用方法的介绍,正确的是 BCD
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。
String类中的length()方法用来获取一个String对象的字符序列的长度,单位为字节。 B
A.true
B.false
public boolean startsWith(String prefix)方法,如果参数是空字符串,则抛出异常。 B
A.true
B.false
下列关于public int compareTo(String anotherString)的说法,正确的是 ACDE
A.按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode值。
B.如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个正整数。
C.如果它们在一个或多个索引位置上的字符不同,假设 k 是这类索引的最小值,compareTo 返回这两个字符串在位置 k 处两个char 值的差,即值:this.charAt(k)-anotherString.charAt(k)
D.如果没有字符不同的索引位置,则较短字符串的字典顺序在较长字符串之前。在这种情况下,compareTo 返回这两个字符串长度的差
E.compareTo 只在方法 equals(Object) 返回 true 时才返回 0。
下列关于substring方法的说法,正确的是 ACD
A.public String substring(int beginIndex)返回的子字符串从指定索引处的字符开始,直到此字符串末尾。
B.public String substring(int beginIndex, int endIndex) 子字符串从指定的 beginIndex 处开始,直到索引 endIndex处的字符。
C."emptiness".substring(9)返回值为""。
D."smiles".substring(1, 5)返回值为"mile"。
E.若beginIndex 大于 endIndex,则substring(int beginIndex, int endIndex)返回-1。
下列说法错误的是 D
A.java.util包中的Data类重写了toString()方法。
B.Arrays和Point都继承了toString方法。
C.调用x.toString()方法的地方可以用""+x代替。
D.定义int[] Numbers = {1, 2, 3}; String s1 = ""+Numbers;,则System.out.println(s1);调用了toString方法,可以将数组输出。
下列关于字符串与字符数组、字节数组的说法,正确的是 ACD
A.getChars (int srcBegin, int srcEnd, char[] dst, int dstBegin)方法的返回值为空。
B.srcEnd是字符串中要复制的最后一个字符的索引。
C.srcBegin 大于 srcEnd时,会抛出IndexOutOfBoundsException异常。
D.要复制到 dst 子数组的字符从索引 dstBegin 处开始,并结束于索引dstbegin + (srcEnd-srcBegin) - 1
下列关于正则表达式的说法,正确的是 ABDE
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地址。
-
博客中值得学习的或问题:
要素全面
很认真细致
排版简介美观 -
代码中值得学习的或问题:
代码中文件分类简洁
很认真
其他(感悟、思考等,可选)
本周学习了如何安装和使用MySQL数据库管理系统,建立连接,关闭链接,以及查询、添加、删除等各种操作
学习进度条
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
|---|---|---|---|---|
| 目标 | 5000行 | 25篇 | 400小时 | |
| 第一周 | 235/235 | 1/1 | 15/15 | |
| 第二周 | 224/459 | 2/3 | 15/30 | |
| 第三周 | 443/902 | 1/4 | 15/73 | |
| 第四周 | 577/1479 | 2/6 | 17/90 | |
| 第五周 | 1222/2360 | 1/7 | 14/104 | |
| 第六周 | 1527/3294 | 1/8 | 14/118 | |
| 第七周 | 591/3883 | 1/9 | 14/132 |
- 计划学习时间:15小时
- 实际学习时间:14小时







