20145201 《Java程序设计》第九周学习总结

教材学习内容总结

JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无须接触底层数据库驱动程序的差异性。

JDBC全名Java DataBase Connectivity,是联机数据库的标准规范。具体而言,它定义一组标准类与接口,应用程序需要联机数据库时调用这组标准API,而标准API中的接口会由数据库厂商操作,通常称为JDBC驱动程序,如图所示:

JDBC标准分为两个部分:JDBC应用程序开发者接口和JDBC驱动程序开发者接口。

JDBC驱动程序开发者接口是数据库厂商操作驱动程序时的规范,如图所示:

厂商在操作JDBC驱动程序时,依操作方式可将驱动程序分为4种类型:

  • Type 1:JDBC-ODBC Bridge Driver

    ODBC是由Microsoft主导的数据库连接标准,基本上JDBC是参考ODBC制定而来,所以ODBC在Microsoft系统上最为成熟。

    Type 1驱动程序会将JDBC调用转换为对ODBC驱动程序的调用,由ODBC驱动程序操作数据库。

  • Type 2:Native API Driver

    这个类型的驱动程序会以原生方式,调用数据库提供的原生链接库

    由于使用了原生链接库,所以驱动程序本身与平台相依,没有达到JDBC驱动程序的目标之一:跨平台

    由于直接调用数据库原生API,因此在速度上,有机会成为4种类型中最快的驱动程序

  • Type 3:JDBC-Net Driver

    这类型的JDBC驱动程序会将JDBC方法调用转换为特定的网络协议调用。

    这种技术可以跨平台。

    由于通过中介服务器转换,速度较慢,获得架构弹性是使用这种类型驱动程序的目的。

  • Type 4:Native Protocal Driver

    驱动程序可以使用纯粹Java技术实现,因此这种类型驱动程序可以跨平台

    是最常见的驱动程序类型

  • 基本数据库操作相关的JDBC接口或类是位于java.sql包中,要取得数据库联机,必须有几个动作:

    1.注册Driver操作对象

    2.取得Connection操作对象

    3.关闭Connection操作对象

数据库操作相关的JDBC接口或类都位于java.sql包中。

取得联机等与数据库来源相关的行为规范在javax.sql.DataSource接口,实际如何取得Connection则由操作接口的对象来负责。

Connection是数据库连接的代表对象,接下来要执行SQL的话,必须取得java.sql.Statement对象,它是SQL描述的代表对象。可以使用Connection的createStatement()来建立Statement对象。

测试可否联机数据库并取得Connection实例:

package cc.openhome;

import static java.lang.System.out;
import java.sql.*; public class ConnectionDemo {
public static void main(String[] args)
throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
String jdbcUrl = "jdbc:mysql://localhost:3306/demo";
String user = "root";
String passwd = "openhome";
try(Connection conn =
DriverManager.getConnection(jdbcUrl, user, passwd)) {
out.printf("已%s数据库联机%n",
conn.isClosed() ? "关闭" : "开启");
}
}
}
  • Java真正需要某个类时才会加载对应的.class文档,而非在程序启动就加载所有类。java.lang.Class的实例代表Java应用程序运行时加载的.class文档。可以通过Object的getClass()方法,或者通过.class常量取得每个对象对应的Class对象,如果是基本类型,也可以使用对应的打包类加上.TYPE取得Class对象。例如:Integer.TYPE可取得代表int的Class对象。

在取得Class对象后,就可以操作Class对象的公开方法取得基本信息。例如,以下可取得String类的Class实例,并从中获得String的基本信息:

package cc.openhome;

import static java.lang.System.out;

public class ClassInfo {
public static void main(String[] args) {
Class clz = String.class;
out.println("类名称:" + clz.getName());
out.println("是否为接口:" + clz.isInterface());
out.println("是否为基本类型:" + clz.isPrimitive());
out.println("是否为数组对象:" + clz.isArray());
out.println("父类名称:" + clz.getSuperclass().getName());
}
}

结果如图:

例,指定加载路径,测试Class实例是否为同一对象:

import static java.lang.System.out;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader; public class ClassLoaderDemo {
public static void main(String[] args) {
try {
String path = args[0]; // 测试路径
String clzName = args[1]; // 测试类
Class clz1 = loadClassFrom(path, clzName);
out.println(clz1);
Class clz2 = loadClassFrom(path, clzName);
out.println(clz2);
out.printf("clz1 与 clz2 为%s实例",
clz1 == clz2 ? "相同" : "不同");
} catch (ArrayIndexOutOfBoundsException e) {
out.println("沒有指定类加载路径与名称");
} catch (MalformedURLException e) {
out.println("加载路径错误");
} catch (ClassNotFoundException e) {
out.println("找不到指定的类");
}
} private static Class loadClassFrom(String path, String clzName)
throws ClassNotFoundException, MalformedURLException {
ClassLoader loader = new URLClassLoader(new URL[] {new URL(path)});
return loader.loadClass(clzName);
}
}

结果如图:

本周代码托管截图

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 4500行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 1/3 18/38
第三周 400/900 1/4 22/60
第四周 1000/1900 1/5 35/95
第五周 800/2700 1/6 30/125
第六周 700/3400 2/8 30/155
第七周 400/3800 2/10 30/185
第八周 294/4094 2/10 30/185
第九周 356/4450 2/12 30/215

参考资料

20145201《Java程序设计》第九周学习总结的更多相关文章

  1. 201521123027 <java程序设计>第九周学习总结

    1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2.书面作业 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什 ...

  2. 20145220java程序设计第九周学习总结

    20145220java程序设计第九周学习总结 教材学习内容总结 JBDC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商对接口直接操作,开发人员无须接触底层数据可驱动程序的差异 ...

  3. 201771010134杨其菊《面向对象程序设计java》第九周学习总结

                                                                      第九周学习总结 第一部分:理论知识 异常.断言和调试.日志 1.捕获 ...

  4. 201521044152<java程序设计>第一周学习总结

    本周学习总结 java开发时间虽然很短,但是发展迅速,已成为现在非常流行的一门语言,很开心能有幸学习java.第一周学习了java的平台,运行环境jdk以及jrt等等新名词,还了解了eclipse的基 ...

  5. 20145304 刘钦令 Java程序设计第二周学习总结

    20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...

  6. 20145304 刘钦令 Java程序设计第一周学习总结

    20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...

  7. 201621123007 Java程序设计第一周 学习总结

    第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...

  8. 马凯军201771010116《面向对象与程序设计Java》第九周学习总结

    一.理论知识部分 异常.日志.断言和调试 1.异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行. 2.Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置. 3 ...

  9. 201521123063 JAVA程序设计 第二周学习总结

    1.本周学习重点(2.27-3.5) java中的数组 以二维数组为例,数组名为scores,则 (1)先声明数组 int[][] scores;或int scores[][];或int[] scor ...

  10. 《Java》第九周学习总结

    下载mysql 选择mysql的管理软件 idea可以直接连接 然后用库运行程序,但是没有截图,,因为想在navicat上试试,可惜速度太慢了 打开idea又很慢,所以明天再更新

随机推荐

  1. boost实用工具:assign库了解学习

    许多时候,我们需要为容器初始化或者赋值,填入大量的数据; STL容器仅提供了容纳这些数据的方法,但是填充的步骤是相当地麻烦(insert.push_back); 于是,boost::assign出现了 ...

  2. Toxophily-数论以及二分三分

    G - Toxophily Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submi ...

  3. 第十篇:顺序容器vector,deque,list的选用规则

    前言 常见的顺序容器主要有三种 - vector,deque,list.它们实现的功能相差不大,那么实际开发中该如何进行选择呢?本文将为你解答这个问题. 分析 由于这三种容器实现的数据结构原型不同(v ...

  4. kafka 并发数配置过程中踩到的坑 InstanceAlreadyExistsException

    ] WARN org.apache.kafka.common.utils.AppInfoParser- Error registering AppInfo mbean javax.management ...

  5. Oracle Instant Client的安装和使用

    转自:https://www.cnblogs.com/chinalantian/archive/2011/09/09/2172145.html 根据自己需求到Oracle网站(http://www.o ...

  6. vue+node+mongoDB 火车票H5(四)---完成静态页面

    各项配置都好了,就可以开始写静态页面了,先别急着写,看一下页面又哪些公用的部分可以提取出来的,统一放到components组件文件夹中 header头部文件夹放一些头部常用组件,如首页的banner切 ...

  7. C++名人的网站 转

    正如我们可以通过计算机历史上的重要人物了解计算机史的发展,C++相关人物的网站也可以使我们得到最有价值的参考与借鉴. 正如我们可以通过计算机历史上的重要人物了解计算机史的发展,C++相关人物的网站也可 ...

  8. IntelliJ IDEA 工具技巧

    IntelliJ IDEA 工具技巧 以下都是自己积累的IntelliJ IDEA 使用技巧,比较零碎,观看不便之处还望海涵,如有错误之处还望指正 自己常用,不懂的可以加群询问:244930845 S ...

  9. mysqldump迁移说明

    使用mysqldump导出数据, 数据包含单行insert,带字段值 #使用mysqldump备份数据到文件, 主要在每个分片的主上面进行备份,确保数据是最新的. mysqldump -h192. - ...

  10. 巨蟒python全栈开发-第22天 内置常用模块1

    一.今日主要内容 1.简单了解模块 你写的每一个py文件都是一个模块 数据结构(队列,栈(重点)) 还有一些我们一直在使用的模块 buildins 内置模块.print,input random 主要 ...