20145335郝昊《java程序设计》第9周学习总结
20145335郝昊 《Java程序设计》第9周学习总结
教材学习内容总结
第16章
JDBC(
Java DataBase Connectivity
)即java数据库连接,是一种用于执行SQL语句的Java API
是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无需接触底层数据库驱动程序的差异性。JDBC驱动的四种类型(按操作方式分类的):
1. `JDBC-ODBC Bridge Driver`
2. `Native API Driver` 提供原生链接库
3. `JDBC-Net Driver` 将方法调用转换为特定的网络协议调用
4. `Native Protocal Driver`
建立数据库的步骤:
1. 注册`Driver`的操作对象
2. 取得`Connection`操作对象
3. 关闭`connection`操作对象
数据库操作相关的JDBC接口或类都位于
java.sql
包中。要连接数据库,可以向DriverManager
取得Connection
对象。Connection
是数据库连接的代表对象,一个Connection
对象就代表一个数据库连接。SQLException
是在处理JDBC
时经常遇到的一个异常对象,为数据库操作过程发生错误时的代表对象。Connection
是数据库连接的代表对象,接下来要执行SQL的话,必须取得java.sql.Statement
对象,它是SQL语句的代表对象,可以使用Connection
的createStatement()
来创建Statement
对象。在使用
Connection
、Statement
或ResultSet
时,要将之关闭以释放相关资源。Statement
的executeQuery()
方法则是用于SELECT
等查询数据库的SQL,executeUpdate()
会返回int结果,表示数据变动的笔数,executeQuery()
会返回java.sql.ResultSet
对象,代表查询的结果,查询的结果会是一笔一笔的数据。可以使用ResultSet
的next()
来移动至下一笔数据,它会返回true
或false
表示是否有下一笔数据,接着可以使用getXXX()
来取得数据。如果有些操作只是SQL语句中某些参数会有所不同,其余的SQL子句皆相同,则可以使用
java.sql.PreparedStatement
。可以使用Connection
的preparedStatement()
方法创建好一个预编译(precompile
)的SQL命令,其中参数会变动的部分,先指定“?”这个占位字符。等到需要真正指定参数执行时,再使用相对应的setInt()
、setString()
等方法,指定“?”处真正应该有的参数。
第17章
运用反射
JAVA真正需要某个类时才会加载对应的
.class
文档,不是程序启动时就加载所有类。通过
Object
的getClass()
方法,或者.class
常量取得每个对象对应的class
对象,如果是基本类型,也可以使用对应的打包类加上.TYPE
取得Class
对象。例如,Integer.TYPE
可取得代表int的Class对象。使用`class.forName()的方法来实现动态加载类。
java.lang.reflect.Method
实例是方法的代表对象,可以使用invoke()
方法来动态调用指定的方法。了解类加载器(
ClassLoader
)是指将
.class
文件中的二进制数据读入到内存中,将其放在运行时数据的方法区内,然后再堆区创建这个类的java.lang.Class
对象,用来封装类在方法区类的对象。JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)链接又分为三个步骤。
第18章
自定义泛型
在定义泛型时,使用
extends
限定指定T实际类型时,必须是某类的子类。在定义泛型时,使用extends
限定指定T实际类型时,必须是某类的子类。共变性(
Covariance
):,B是A的子类,NodeB
可视为一种NodeA
,称Node具有共变性。通配字符“?”与
extends
限制T的类型,只能通过T声明的名称取得对象指定给Object
,或将T声明的名称指定为null
。
教材学习中的问题和解决过程
关于类加载器的知识,分为三个步骤,装在(Load)、链接(Link)和初始化(Initialize)链接又分为三个步骤。
但是不太了解之间的关系,是包含,还是分支类型的?在链接里具体是怎么操作的,后来百度查到了一张图片,解决了问题。
代码调试中的问题和解决过程
关于代码的问题,主要是p511页的 MessageDAO.java范例。
package cc.openhome;
import java.sql.*;
import java.util.*;
public class MessageDAO {
private String url;
private String user;
private String passwd;
public MessageDAO(String url, String user, String passwd) {
this.url = url;
this.user = user;
this.passwd = passwd;
}
public void add(Message message)//注释1 {
try(Connection conn = DriverManager.getConnection//注释2(url, user, passwd);
Statement statement = conn.createStatement())//注释3 {
String sql = String.format(
"INSERT INTO t_message(name, email, msg) VALUES ('%s', '%s', '%s')",
message.getName(), message.getEmail(), message.getMsg());
statement.executeUpdate(sql);//**注释4**
} catch(SQLException ex) {
throw new RuntimeException(ex);
}
}
public List<Message> get() //注释5{
List<Message> messages = new ArrayList<>();
try(Connection conn = DriverManager.getConnection(url, user, passwd);
Statement statement = conn.createStatement()) {
ResultSet result =
statement.executeQuery("SELECT * FROM t_message");
while (result.next()) {
Message message = toMessage(result);
messages.add(message);
}
} catch(SQLException ex) {
throw new RuntimeException(ex);
}
return messages;
}
private Message toMessage(ResultSet result) throws SQLException {
Message message = new Message();
message.setId(result.getLong(1));
message.setName(result.getString(2));
message.setEmail(result.getString(3));
message.setMsg(result.getString(4));
return message;
}
}
最开始这段代码还存在一点问题,在自己编译的时候,对于一些函数的具体功能和语句存在,问题。
后来看了书上关于语法的具体讲解,对于代码的注释上有了了解。
- 注释1:这个方法会在数据库中下新增留言
- 注释2:取得
Connection
对象 - 注释3:建立
Statements
对象 - 注释4:执行
SQL
描述句 - 注释5:这个方法会从数据库中查询所有留言
本周代码托管截图
其他(感悟、思考等,可选)
JAVA厚厚的一本书终于学完了,突然觉得自己好有成就感,短短几周就学完了这样一门语言。虽然从下一周开始实现一些实践的编程,但是对于java语言的元知识和硬知识还是要掌握扎实,熟悉才可以。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 | |
第五周 | 200/1500 | 3/10 | 20/100 | |
第六周 | 300/1700 | 3/11 | 32/120 | 学会使用分块测试 |
第七周 | 220/1800 | 1/12 | 22/130 | |
第八周 | 280/1900 | 2/14 | 27/140 | 熟练使用git |
第九周 | 300/2000 | 2/15 | 25/150 | 安装安卓编译环境平台 |
参考资料
20145335郝昊《java程序设计》第9周学习总结的更多相关文章
- 20145335郝昊 Java学习心得 密码学代码复写
20145335郝昊 Java学习心得 密码学代码复写 本学期我们学习了现代密码学这门课程,在上课的时候接触到了很多种类型的密码体制,对于一些典型很通用的密码体制有自己的学习和设计.不论是从密码体制还 ...
- 20155210潘滢昊 2016-2017-2《Java程序设计》第一周学习总结
20155210 2016-2017-2<Java程序设计>第一周学习总结 教材学习内容总结 1.1.1: 本节主要讲了Java的由来,1995年5月23日是Java公认的诞生日.还有版本 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
随机推荐
- Spring 集合注入
Spring注入是spring框架的核心思想之一.在实际的开发中,我们经常会遇见这样一些类的注入,这些类中包含一些集合作为类的属性,那么要怎样想类中的集合注入数据呢?本文通过一个简单的示例向大家介绍一 ...
- JAVA基础之sql模糊匹配、外键以及jsp中include的用法
一.SQL模糊匹配 适用于对字符串进行模糊搜索 格式: 字段名 Like '%关键词%' % 表示这个位置可有任意个字符(没有也可以) %关键词% 只要包含关键词就算 ...
- webpack4学习笔记(三)
webpack打包资源文件 1,打包css文件,先安装css-loader和style-loader npm install --save-dev css-loader style-loader we ...
- ES6中的let和const
let和const let 用来声明变量,但是所声明的变量只在let命令所在的代码块内有效 { let a=12 alert(a)//12 } alert(a)//报错 找不到 let不像var那样会 ...
- 剑指Offer——复杂链表的复制
题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用, ...
- 【spring学习】中文乱码问题
问题: 在这样的一个控制器中: 返回字符串中文部分全是问号. 解决方案: 在spring-mvc.xml文件中加入以下代码: <!-- 支持spring3.0新的mvc注解 ,解决json中的中 ...
- PHPcms v9 get标签sql 语句limit无效问题的解决方法
get标签非常好用,自定义模型后get几乎变成万能的了.但是PHPCMS升级到V9后,把2008的很多功能都去掉了,比如get标签中,在后面自动添加了一个LIMIT 0,20,这样你即使写了num=' ...
- 六、Mosquitto 高级应用之SSL/TLS
mosquitto提供SSL支持加密的网络连接和身份验证.本章节讲述次功能的实现. 在此之前需要一些准备工作. 准本工作: 一台 Linux 服务器. 安装好 openssl (不会明白怎么安装 op ...
- OpenSSL拒绝服务漏洞(CNVD-2016-01479)
更新OpenSSL版本. [root@nginx ~]# openssl version -a OpenSSL 1.0.1e-fips 11 Feb 2013 built on: Wed Mar 22 ...
- 查看Oracle latch _spin_count默认值
查看Oracle latch _spin_count默认值 SELECT X.KSPPINM NAME, Y.KSPFTCTXVL VALUE, Y.KSPFTCTXDF ISDEFAULT FRO ...