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语句的代表对象,可以使用ConnectioncreateStatement()来创建Statement对象。

  • 在使用ConnectionStatementResultSet时,要将之关闭以释放相关资源。

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

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

第17章

  • 运用反射

    JAVA真正需要某个类时才会加载对应的.class文档,不是程序启动时就加载所有类。

    通过ObjectgetClass()方法,或者.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的子类,Node B 可视为一种Node A ,称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. 注释1:这个方法会在数据库中下新增留言
  2. 注释2:取得Connection对象
  3. 注释3:建立Statements对象
  4. 注释4:执行SQL描述句
  5. 注释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 安装安卓编译环境平台

参考资料

最新文章

  1. Vue2.0实现1.0的搜索过滤器功能
  2. 【转】javascript打印设置
  3. 功能分解——Android下画分时图与k线图有感
  4. MVC中如何在controller的action中输出JS到页面上
  5. (转)25个增强iOS应用程序性能的提示和技巧--中级篇
  6. windows 安装Beautiful Soup(转)
  7. c/c++浮点数在内存中存储方式
  8. CF980E
  9. hiho1249 Xiongnu&#39;s Land
  10. 第三个Sprint ------第八天
  11. chage命令
  12. 20180518VSTO多簿单表汇总外接程序按钮
  13. Spring Data JPA中的动态查询 时间日期
  14. vuejs 在移动端调起键盘并触发‘前往’按钮
  15. (转)NGUI中深度depth和z轴关系
  16. hadoop无法启动
  17. SSM框架整合(实现从数据库到页面展示)
  18. SCSS 实用知识汇总
  19. leetcode67
  20. ELKStack入门篇(四)之Filebeat

热门文章

  1. Scrapy使用详细记录
  2. Oracle的存储过程编程
  3. rabbitmq延迟队列相关
  4. datetime 模块详解 -- 基本的日期和时间类型
  5. python-gitlab 模块
  6. nodejs 异步编程 教程(推荐)
  7. PHPcms v9 get标签sql 语句limit无效问题的解决方法
  8. SpringMVC-SimpleDEMO
  9. Windows 和 Linux 的文件名
  10. Python(^^^^^小技巧^^^^^——不定期更新)