20145335郝昊 《Java程序设计》第9周学习总结

教材学习内容总结

第16章

  • JDBC(Java DataBase Connectivity)即java数据库连接,是一种用于执行SQL语句的Java API是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无需接触底层数据库驱动程序的差异性。

  • JDBC驱动的四种类型(按操作方式分类的):

    1. 1. `JDBC-ODBC Bridge Driver`
    2. 2. `Native API Driver` 提供原生链接库
    3. 3. `JDBC-Net Driver` 将方法调用转换为特定的网络协议调用
    4. 4. `Native Protocal Driver`
  • 建立数据库的步骤:

    1. 1. 注册`Driver`的操作对象
    2. 2. 取得`Connection`操作对象
    3. 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范例。

  1. package cc.openhome;
  2. import java.sql.*;
  3. import java.util.*;
  4. public class MessageDAO {
  5. private String url;
  6. private String user;
  7. private String passwd;
  8. public MessageDAO(String url, String user, String passwd) {
  9. this.url = url;
  10. this.user = user;
  11. this.passwd = passwd;
  12. }
  13. public void add(Message message)//注释1 {
  14. try(Connection conn = DriverManager.getConnection//注释2(url, user, passwd);
  15. Statement statement = conn.createStatement())//注释3 {
  16. String sql = String.format(
  17. "INSERT INTO t_message(name, email, msg) VALUES ('%s', '%s', '%s')",
  18. message.getName(), message.getEmail(), message.getMsg());
  19. statement.executeUpdate(sql);//**注释4**
  20. } catch(SQLException ex) {
  21. throw new RuntimeException(ex);
  22. }
  23. }
  24. public List<Message> get() //注释5{
  25. List<Message> messages = new ArrayList<>();
  26. try(Connection conn = DriverManager.getConnection(url, user, passwd);
  27. Statement statement = conn.createStatement()) {
  28. ResultSet result =
  29. statement.executeQuery("SELECT * FROM t_message");
  30. while (result.next()) {
  31. Message message = toMessage(result);
  32. messages.add(message);
  33. }
  34. } catch(SQLException ex) {
  35. throw new RuntimeException(ex);
  36. }
  37. return messages;
  38. }
  39. private Message toMessage(ResultSet result) throws SQLException {
  40. Message message = new Message();
  41. message.setId(result.getLong(1));
  42. message.setName(result.getString(2));
  43. message.setEmail(result.getString(3));
  44. message.setMsg(result.getString(4));
  45. return message;
  46. }
  47. }

最开始这段代码还存在一点问题,在自己编译的时候,对于一些函数的具体功能和语句存在,问题。

后来看了书上关于语法的具体讲解,对于代码的注释上有了了解。

  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 安装安卓编译环境平台

参考资料

20145335郝昊《java程序设计》第9周学习总结的更多相关文章

  1. 20145335郝昊 Java学习心得 密码学代码复写

    20145335郝昊 Java学习心得 密码学代码复写 本学期我们学习了现代密码学这门课程,在上课的时候接触到了很多种类型的密码体制,对于一些典型很通用的密码体制有自己的学习和设计.不论是从密码体制还 ...

  2. 20155210潘滢昊 2016-2017-2《Java程序设计》第一周学习总结

    20155210 2016-2017-2<Java程序设计>第一周学习总结 教材学习内容总结 1.1.1: 本节主要讲了Java的由来,1995年5月23日是Java公认的诞生日.还有版本 ...

  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. Spring 集合注入

    Spring注入是spring框架的核心思想之一.在实际的开发中,我们经常会遇见这样一些类的注入,这些类中包含一些集合作为类的属性,那么要怎样想类中的集合注入数据呢?本文通过一个简单的示例向大家介绍一 ...

  2. JAVA基础之sql模糊匹配、外键以及jsp中include的用法

    一.SQL模糊匹配 适用于对字符串进行模糊搜索 格式:   字段名 Like '%关键词%'      %          表示这个位置可有任意个字符(没有也可以) %关键词%  只要包含关键词就算 ...

  3. webpack4学习笔记(三)

    webpack打包资源文件 1,打包css文件,先安装css-loader和style-loader npm install --save-dev css-loader style-loader we ...

  4. ES6中的let和const

    let和const let 用来声明变量,但是所声明的变量只在let命令所在的代码块内有效 { let a=12 alert(a)//12 } alert(a)//报错 找不到 let不像var那样会 ...

  5. 剑指Offer——复杂链表的复制

    题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用, ...

  6. 【spring学习】中文乱码问题

    问题: 在这样的一个控制器中: 返回字符串中文部分全是问号. 解决方案: 在spring-mvc.xml文件中加入以下代码: <!-- 支持spring3.0新的mvc注解 ,解决json中的中 ...

  7. PHPcms v9 get标签sql 语句limit无效问题的解决方法

    get标签非常好用,自定义模型后get几乎变成万能的了.但是PHPCMS升级到V9后,把2008的很多功能都去掉了,比如get标签中,在后面自动添加了一个LIMIT 0,20,这样你即使写了num=' ...

  8. 六、Mosquitto 高级应用之SSL/TLS

    mosquitto提供SSL支持加密的网络连接和身份验证.本章节讲述次功能的实现. 在此之前需要一些准备工作. 准本工作: 一台 Linux 服务器. 安装好 openssl (不会明白怎么安装 op ...

  9. OpenSSL拒绝服务漏洞(CNVD-2016-01479)

    更新OpenSSL版本. [root@nginx ~]# openssl version -a OpenSSL 1.0.1e-fips 11 Feb 2013 built on: Wed Mar 22 ...

  10. 查看Oracle latch _spin_count默认值

    查看Oracle latch  _spin_count默认值 SELECT X.KSPPINM NAME, Y.KSPFTCTXVL VALUE, Y.KSPFTCTXDF ISDEFAULT FRO ...