20145223《Java程序设计》第9周学习总结

教材学习内容总结

第十六章:整合数据库

JDBC入门

1、JDBC简介:

2.JDBC主要分成两个部分,JDBC应用程序开发者接口和JDBC驱动程序开发者接口

3.应用程序使用JDBC联机数据库的通用语法:

    Connection conn = DriverManager.getConnection(……);
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM T_USER");

取得Connection:

        try {
String url = "jdbc:mysql://localhost:3306/demo?" +"user=root&password=123";
Connection conn = DriverManager.getConnection(url);
...
}
catch(SQLException e) {
....
}
String url = "jdbc:mysql://localhost:3306/demo";
String user = "root";
String password = "123";
Connection conn = DriverManager.getConnection(url,user, password);

4.JDBC数据库驱动程序依实作方式可以分为四个类型

Type 1:JDBC-ODBC Bridge

Type 2:Native-API Bridge

Type 3:JDBC-middleware

Type 4:Pure Java Driver

5.取得Connection的方式,依所使用的环境及程序需求而有所不同

设计一个DBSource界面

    package onlyfun.caterpillar;
import java.sql.Connection;
import java.sql.SQLException;
public interface DBSource {
public Connection getConnection() throws SQLException;
public void closeConnection(Connection conn) throws SQLException;
}
public class SimpleDBSourceimplementsDBSource {

public SimpleDBSource(String configFile) throws IOException,
ClassNotFoundException {
props = new Properties();
props.load(new FileInputStream(configFile));
url = props.getProperty("onlyfun.caterpillar.url");
user = props.getProperty("onlyfun.caterpillar.user");
passwd = props.getProperty("onlyfun.caterpillar.password");
Class.forName(
props.getProperty("onlyfun.caterpillar.driver"));
}
public Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, passwd);
}
public void closeConnection(Connection conn) throws SQLException {
c onn.close();
}
}
onlyfun.caterpillar.driver=com.mysql.jdbc.Driver
onlyfun.caterpillar.url=jdbc:mysql://localhost:3306/demo
onlyfun.caterpillar.user=root
onlyfun.caterpillar.password=123456 DBSource dbsource = new SimpleDBSource();
Connection conn = dbsource.getConnection(); if(!conn.isClosed()) {
System.out.println("数据库连接已开启…");
} dbsource.closeConnection(conn); if(conn.isClosed()) {
System.out.println("数据库连接已关闭…");
}

6.Statement、ResultSet(1)

要执行SQL的话,必须取得java.sql.Statement物件,它是Java当中一个SQL叙述的具体代表对象

Statement stmt = conn.createStatement();

插入一笔数据,可以如下使用Statement的executeUpdate()方法

stmt.executeUpdate("INSERT INTO t_message VALUES(1, 'justin', " +
"'justin@mail.com', 'mesage...')");

7.Statement、ResultSet(2)

·executeUpdate()会传回int结果,表示资料变动的笔数

·executeQuery()方法则是用于SELECT等查询数据库的SQL

·executeQuery()会传回java.sql.ResultSet对象,代表查询的结果

·可以使用ResultSet的next()来移动至下一笔数据,它会传回true或false表示是否有下一笔资料

·使用getXXX()来取得资料

8.Statement、ResultSet(3)

·Statement的execute()可以用来执行SQL,并可以测试所执行的SQL是执行查询或是更新

·传回true的话表示SQL执行将传回ResultSet表示查询结果,此时可以使用getResultSet()取得ResultSet物件

·如果execute()传回false,表示SQL执行会传回更新笔数或没有结果,此时可以使用getUpdateCount()取得更新笔数

·如果事先无法得知是进行查询或是更新,就可以使用execute()

9.preparedStatement()

·preparedStatement()方法建立好一个预先编译(precompile)的SQL语句

·当中参数会变动的部份,先指定"?"这个占位字符

PreparedStatement stmt = conn.prepareStatement(
"INSERT INTO t_message VALUES(?, ?, ?, ?)");

需要真正指定参数执行时,再使用相对应的setInt()、setString()等方法,指定"?"处真正应该有的参数

        stmt.setInt(1, 2);
stmt.setString(2, "momor");
stmt.setString(3, "momor@mail.com");
stmt.setString(4, "message2...");

10.ResultSet还提供了对结果集进行滚动的方法:

        next():移动到下一行
Previous():移动到前一行
absolute(int row):移动到指定行
beforeFirst():移动resultSet的最前面。
afterLast() :移动到resultSet的最后面。

反射与类加载器

1.java.lang.Class的实例代表Java应用程序运行时加载的.class文档,类、接口、Enum等编译过后,都会生成.class文档。Class类没有公开构造函数,实例时候JVM自动产生,每个.class文档加载时,JVM会自动生成对应的Class对象。

2.取得Class对象的方式:

(1)通过Object的getClass方法

(2)通过.class常量取得每个对象对应的Class对象

(3)如果是基本类型,可以使用对应的打包类加上.TYPE取得Class对象

3.类信息是在编译时期存储在.class文档,这是java支持执行运行时类型识别的方式。编译时期若使用到相关类,编译程序会检查对应的.class文档中记载的信息,以确定是否可完成编译。执行时期使用某类是,会先检查是否有对应的Class对象,如果没有,会加载对应的.class文档并生成对应的Class实例。

4.默认使用getClass()或.class取得的Class实例会是同一个对象。

5.类连接:指的是把类的二进制数据合并到JRE中,这又分为3个阶段:

·校验:检查载入Class文件数据的正确性。

·准备:给类的静态变量分配存储空间,并进行默认初始化。

·解析:将类的二进制数据中的符号引用替换成直接引用。

6.JVM运行时会产生3个ClassLoader,分别为:BootstrapClassLoader(根类加载器)、ExtClassLoader(扩展类加载器)和AppClassLoader(系统类加载器)。

7.类加载器之间的父子关系和管辖范围:

第十八章 自定义泛型、枚举与注释

·泛型使得编译器能够在编译期间对集合中加入的对象进行检查,如果加入了不同类型的对象,就会报错,而不必等到运行期间再进行相关的类型转换。和原来没有使用泛型相比,它将原来需要在运行时期才能发现的异常提前到了编译期间,使得程序的安全性也大大提高,泛型一般用于集合类中。

·泛型也可以仅定义在方法上,可在方法返回类型前使用定义泛型,之后就可以使用T来定义返回类型、参数类型,或在方法内声明变量、转换类型等,在定义泛型时,使用extends限制指定T实际类型时,必须是某类的子类。

·枚举:枚举也是JDK1.5之后的版本以后Java新加入的特性。使用枚举可以表示一组常量数据。枚举的本质是一个类,可以使用enum关键字来声明一个枚举类型。

·使用枚举需要注意的是:

1、枚举类型可以定义在类的内部也可以定义在类的外部。如果定义在类的内部,那么其访问控制符可以是public,protected,private或者默认的控制符。如果定义在类的外部,其访·问控制符只能是public和默认控制符;

2、枚举类型中定义的value值都默认为public static final的。其值一经定义就不能在被修改了。多个value值之间需要用逗号隔开;

3、枚举类型中除了可以声明常量之外还可以声明方法。但是方法需要在常量之后,并且常量和方法之间要用分号区分;

4、枚举类型中的值可以通过枚举类型名直接对他们进行访问;

5、枚举类型不能声明为abstract或者final类型;

·枚举类型的常用方法


public final String name()//返回枚举常量的名称;
public final int ordinal()//返回枚举常量在枚举类型中的位置,第一个枚举值序号为0,依次类推;
public String toString()//返回枚举常量的名字,可以重写此方法;
public static valueOf(enumType,String name)//返回与name名字相对应的枚举常量;

·JDK8标注增强功能


1.ElementType的枚举成员是用来限定哪个声明位置可以进行标注。在JDK8中,增加了两个枚举成员TYPE _PARAMETER、TYPE _USE。
2.ElementType.TYPE _ USE可用于标注在各式类型,一个标注如果被设定为ElementType.TYPE_USE,只要是类型名称,都可以进行标注。
3.@Repeatable 可以让你在同一个位置重复相同标注
4.@Filters 作为收集重复标注信息的容器,而每个@Filters储存各自指定的字符串值。

·

学习总结

不知不觉java的学习已经到了第九周,书上的内容基本上已经自学完了,但是我觉得后期的学期与实际操作并没有很好结合在一起。在接下来的学习中,希望可以在老师布置的项目课程里好好地利用这些知识并且能够更加熟练地运用java这一门技能。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 4000行 20篇 400小时
第一周 200/200 1/1 15/12
第二周 180/380 1/1 18/12
第三周 600/980 1/1 17/16
第四周 400/380 1/1 16/15
第五周 300/680 1/1 14/14
第六周 200/200 2/2 10/10
第七周 100/100 2/2 10/10
第八周 50/50 1/2 5/5
第九周 70/70 1/1 8/8

代码托管截图

参考资料

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

  1. 201521145048《Java程序设计管理》第一周学习总结

    1. 本周学习总结 学习并了解Java的发展与历史 在网上视频中学习Java 了解并区分JVM JRE JDK 将java与已学语言做比较,发现相同处 2. 书面作业 Q1.为什么java程序可以跨平 ...

  2. 20145223《Java程序程序设计》课程总结

    20145223<Java程序程序设计>课程总结 每周读书笔记链接汇总 第一周学习总结 第二周学习总结 第三周学习总结 第四周学习总结 第五周学习总结 第六周学习总结 第七周学习总结 第八 ...

  3. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  4. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  5. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  6. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  7. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  8. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  9. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

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

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

随机推荐

  1. 【python升级录】--列表,元组

    本节内容 字符串格式化输出 数据运算 for循环 while循环 列表 元组 [字符串格式化输出] 占位符 %s—string,%d—digital,%f —float # __author:&quo ...

  2. 如何获取Iframe的页面控件的值

    有时候我们在页面需要使用iframe的方法来引用另一个页面,虽然个人建议不要使用iframe哈,但是有些时候是没得法了才使用的咯,那么在使用的过程中也会遇到某一些问题,我将自己遇到的问题记录下来方便以 ...

  3. maven编译时如何忽略单元测试

    共有两种解决办法 1.通过在命令行设置:-Dmaven.test.skip=true 如:mvn clean install tomcat:run -Dmaven.test.skip=true 2.通 ...

  4. 第二章 C#基本数据类型

    第一节 1-关键字和标识符关键字:会不同颜色显示标示符:由字母.中文.数字.下划线组成,不能以数字开头,不能是关键字,不能含有特殊符号,如:@,$思考:下列哪些是合法的标识符?a1.1a.a_b._1 ...

  5. Git命令之从GitHub上下载开源项目

    1,先在本地创建一个目录,作为本地仓库,如: 2,使用Git init 初始化仓库,git初始化完成后,会生成一个隐藏的git文件如: 3,clone Git项目,如: 4,这个项目就是合Github ...

  6. rabbitmq_config

    https://github.com/rabbitmq/rabbitmq-server/blob/stable/docs/rabbitmq.config.example   %% ---------- ...

  7. ios 弹出键盘 视图向上平移

    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardwillAppear:) name:U ...

  8. poj1308(简单并查集)

    题目链接:http://poj.org/problem?id=1308 题意:x, y 表示x 与 y连接,给出一波这样的数据,问这组数据能否构成树,即不能形成回路,不能有多个根节点:要注意可以是空树 ...

  9. NYOJ题目893十字架

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsYAAAQRCAIAAACl4dlPAAAgAElEQVR4nO3dO1Ljyv834P8myFkIsR

  10. NYOJ之ASCII码排序

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsAAAAIFCAIAAABTaNy/AAAgAElEQVR4nO3dO1LjzMIG4H8T5CyEdF