Microsoft Word - Java Web开发实战 第3章.doc

Size: px
Start display at page:

Download "Microsoft Word - Java Web开发实战 第3章.doc"

Transcription

1 第 3 章 chapter 3... DBUtils 工具包 本章学习目标 了解 DBUtils 工具包的概念和常用 API 掌握 DBUtils 工具包的增删改查操作 掌握 DBUtils 工具包的事务处理 在使用 JDBC 访问数据库时, 必然要经过注册驱动 获取连接 访问数据库 处理结果集 释放资源等操作, 而这些操作中步骤烦琐 代码冗余, 不利于开发效率的提升 为此,Apache 组织提供了 DBUtils 工具包来解决这些问题 3.1 初识 DBUtils DBUtils 简述 DBUtils 是一个对 JDBC 进行封装的开源工具类库, 由 Apache 组织提供, 它能够简化 JDBC 应用程序的开发, 降低开发者的工作量 简单概括,DBUtils 工具包主要有三个作用, 具体如下 写操作, 对于数据表的增 删 改, 只需写 SQL 语句即可 读操作, 把结果集转换成 Java 常用集合类, 方便对结果集进行处理 优化性能, 可以使用数据源 JNDI 数据库连接池等技术来减少代码冗余 DBUtils 核心成员 由于 DBUtils 是对 JDBC 的封装, 所以它的类包是围绕实现 JDBC 的功能来设计的 JDBC 需要多行代码才能实现的功能,DBUtils 只需调用一个工具类即可实现 DBUtils 提供了一系列的 API, 具体如图 3.1 所示 从图 3.1 可以看出,DBUtils 工具包主要有三个核心 API 通过它们,DBUtils 工具包基本覆盖了 JDBC 的所有操作 1.DBUtils 类 该类主要为装载 JDBC 驱动 关闭资源等常规操作提供方法, 它的方法一般是静态

2 的, 直接以类名调用 DBUtils 类的常用方法如表 3.1 所示 图 3.1 DBUtils 核心类库 表 3.1 DBUtils 类的常用方法 方法名称 void close(connection conn) void close(statement stat) void close(resultset rs) void closequietly(connection conn) void closequietly(statement stat) void closequietly(resultset rs) void commitandclosequietly(connection conn) Boolean loaddriver(string driveclassname) 功能描述 当连接不为 NULL 时, 关闭连接 当声明不为 NULL 时, 关闭声明 当结果集不为 NULL 时, 关闭结果集 当连接不为 NULL 时, 关闭连接, 并隐藏一些在程序中抛出的 SQL 异常 当声明不为 NULL 时, 关闭声明, 并隐藏一些在程序中抛出的 SQL 异常 当结果集不为 NULL 时, 关闭结果集, 并隐藏一些在程序中抛出的 SQL 异常 提交连接后关闭连接, 并隐藏一些在程序中抛出的 SQL 异常 装载并注册 JDBC 驱动程序, 如果成功就返回 TRUE 2.QueryRunner 类 该类用于执行 SQL 语句, 和 JDBC 中 PreparedStatement 类的功能类似 它封装了执行 SQL 语句的代码, 在获取结果集时和接口 ResultSetHandler 配合使用 QueryRunner 类的常用方法如表 3.2 所示 表 3.2 QueryRunner 类的常用方法 方法名称 Object query(connection conn, String sql, ResultSetHandler rsh, Object[] params) Object query(string sql, ResultSetHandler rsh,object[] params) Object query(connection conn, String sql, ResultSetHandler rsh) int update(connection conn, String sql, Object[] params) int update(connection conn, String sql) int[] batch(connection conn, String sql, Object[][] params) int[] batch(string sql, Object[][] params) 功能描述 执行查询操作, 需传入 Connection 对象 执行查询操作 用来执行一个不需要置换参数的更新操作 用来执行一个更新 ( 插入 更新或删除 ) 操作 用来执行一个不需要置换参数的更新操作 批量添加 更改 删除 批量添加 更改 删除

3 第 章 DBUtils 工具包 3.ResultSetHandler 接口 该接口主要用于处理查询之后获取的结果 为了应对各种各样的查询场景,DBUtils 提供了十余种该接口的实现类, 每个实现类都有自己的独特之处, 开发者可根据实际情况调用 ResultSetHandler 接口的实现类如表 3.3 所示 类名称 ArrayHandler ArrayListHandler BeanHandler BeanListHandler ColumnListHandler 表 3.3 ResultSetHandler 接口的实现类功能描述 将查询结果的第一行数据保存到 Object 数组中 将查询结果的每一行先封装到 Object 数组中, 然后将数据存入到 List 集合中 将查询结果的第一行数据封装到类对象中 将查询结果的每一行封装到 JavaBean 对象中, 然后再存入到 List 集合中 将查询结果指定列的数据封装到 List 集合中 MapHandler 将查询结果的第一行数据封装到 map 集合中 (key 是列名,value 是列值 ) MapListHandler BeanMapHandler KeyedHandler ScalarHandler 将查询结果的每一行封装到 map 集合中 (key 是列名,value 是列值 ), 再将 map 集合存入 List 集合 将查询结果的每一行数据封装到 User 对象中, 再存入到 map 集合中 (key 是列名,value 是列值 ) 将查询结果的每一行数据封装到 map1 集合中 (key 是列名,value 是列值 ), 然后将 map1 集合 ( 有多个 ) 存入到 map2 集合中 ( 只有一个 ) 封装类似 count avg max min sum 等函数的执行结果 3.2 DBUtils 实现 DML 操作 创建 QueryRunner 对象 QueryRunner 类是 SQL 语句的执行者, 它有两种构造方法 使用不同的构造方法, 会对其成员方法的调用产生不同的影响 QueryRunner 类的构造方法如下 new QueryRunner(DataSource ds) new QueryRunner() 第一种是有参构造, 需要传入数据源对象作为参数 它的事务是自动控制的, 一个 SQL 命令即一个事务 使用此构造方法构建对象, 当调用其方法 ( 如 query update) 时, 无须考虑 Connection 对象 第二种是无参构造, 可以进行事务的手动管理 使用此构造方法构建对象, 当调用其方法 ( 如 query update) 时, 需要在参数中传入 Connection 对象 在不考虑事务管理时, 通常采用第一种方法 DBUtils 实现 DML 操作 DML 操作主要包括添加 删除 修改等, 由于不涉及结果集处理, 步骤相对简单

4 下面将通过案例分别讲解 DBUtils 对数据的添加 删除 修改等操作 1. 搭建开发环境创建数据库 chapter03, 在数据库中创建数据表 students, 具体 SQL 语句如下 DROP DATABASE IF EXISTS chapter03; CREATE DATABASE chapter03; USE chapter03; CREATE TABLE students( s_id INT PRIMARY KEY AUTO_INCREMENT, #ID s_name VARCHAR(20), # 姓名 s_age INT# 年龄 ); 向表 students 中插入四条数据, 具体语句如下 INSERT INTO students(s_name, s_age) VALUES ('lilei',14); INSERT INTO students(s_name, s_age) VALUES ('hanmeimei',13); INSERT INTO students(s_name, s_age) VALUES ('tom',13); INSERT INTO students(s_name, s_age) VALUES ('lucy',12); 向 MySQL 数据库发送查询语句, 测试数据是否已经添加到数据库, 运行结果如下 mysql> SELECT * FROM STUDENTS; s_id s_name s_age 1 lilei 14 2 hanmeimei 13 3 tom 13 4 lucy 12 4 rows in set (0.00 sec) 打开 Eclipse, 新建 Java 工程 chapter03, 在工程 chapter03 下新建目录 lib, 分别将 MySQL 数据库的驱动 jar 包,C3P0 数据库连接池的 jar 包,DBUtils 工具包的 jar 包复制到 lib 目录下, 右击 lib 目录下的上述 jar 包, 在弹出的菜单中选择 Build Path Add to Build Path 命令, 完成 jar 包的导入 将工程 chapter02 中的 c3p0-config.xml 文件复制到工程 chapter03 中的 src 目录下, 将 c3p0-config.xml 文件中的数据库名改为 chapter03 2. 编写工具类新建一个工具类 C3P0Utils, 该类用于向 DBUtils 提供数据库连接池, 具体代码如例 3.1 所示 例 3.1 C3P0Utils.java

5 第 章 DBUtils 工具包 1 package com.qfedu.utils; 2 import java.sql.connection; 3 import java.sql.sqlexception; 4 import javax.sql.datasource; 5 import com.mchange.v2.c3p0.combopooleddatasource; 6 public class C3P0Utils { 7 // 通过读取 c3p0-config 文件获取连接池对象, 使用 name 值为 qfedu 的配置 8 private static ComboPooledDataSource datasource = 9 new ComboPooledDataSource("qfedu"); 10 // 提供一个 datasource 数据源 11 public static DataSource getdatasource(){ 12 return datasource; 13 } 14 } 3.DBUtils 对数据的添加操作新建一个测试类 TestDBUtils_Insert, 该类用于测试 DBUtils 对数据的添加操作, 具体代码如例 3.2 所示 例 3.2 TestDBUtils_Insert.java 3 import org.apache.commons.dbutils.queryrunner; 4 import com.qfedu.utils.c3p0utils; 5 public class TestDBUtils_Insert { 6 public static void main(string[] args) throws SQLException { 7 // 通过有参构造方法生成一个 QueryRunner 对象 8 QueryRunner queryrunner = new 9 QueryRunner(C3P0Utils.getDataSource()); 10 // 创建一个 SQL 语句, 向数据库插入数据 11 String sql = "insert into students(s_name,s_age) 12 values('david',15)"; 13 // 执行 SQL 语句 14 int count = queryrunner.update(sql); 15 if (count >0) { 16 System.out.println(" 数据添加成功 "); 17 } else { 18 System.out.println(" 数据添加失败 "); 19 } 20 } 21 } 运行结果如图 3.2 所示, 控制台显示数据添加成功

6 图 3.2 数据添加成功 向 MySQL 数据库发送查询语句, 数据已成功添加, 运行结果如下 mysql> SELECT * FROM STUDENTS; s_id s_name s_age 1 lilei 14 2 hanmeimei 13 3 tom 13 4 lucy 12 5 david 15 5 rows in set (0.00 sec) 4.DBUtils 对数据的修改操作编写一个测试类 TestDBUtils_Update, 该类用于测试 DBUtils 对数据的修改操作, 具体代码如例 3.3 所示 例 3.3 TestDBUtils_ Update.java 3 import org.apache.commons.dbutils.queryrunner; 4 import com.qfedu.utils.c3p0utils; 5 public class TestDBUtils_Update { 6 public static void main(string[] args) throws SQLException { 7 // 通过有参构造方法生成一个 QueryRunner 对象 8 QueryRunner queryrunner = new 9 QueryRunner(C3P0Utils.getDataSource()); 10 // 创建一个 SQL 语句, 向数据库插入数据 11 String sql = "update students set s_age= 13 where s_name='david'"; 12 // 执行 SQL 语句 13 int count = queryrunner.update(sql); 14 if (count >0) { 15 System.out.println(" 数据修改成功 "); 16 } else { 17 System.out.println(" 数据修改失败 "); 18 }

7 第 章 DBUtils 工具包 19 } 20 } 运行结果如图 3.3 所示, 控制台显示数据修改成功 图 3.3 数据修改成功 向 MySQL 数据库发送查询语句, 数据已成功修改, 运行结果如下 mysql> SELECT * FROM STUDENTS; s_id s_name s_age 1 lilei 14 2 hanmeimei 13 3 tom 13 4 lucy 12 5 david 13 5 rows in set (0.00 sec) 5.DBUtils 对数据的删除操作编写一个测试类 TestDBUtils_Delete, 该类用于测试 DBUtils 对数据的删除操作, 具体代码如例 3.4 所示 例 3.4 TestDBUtils_ Delete.java 3 import org.apache.commons.dbutils.queryrunner; 4 import com.qfedu.utils.c3p0utils; 5 public class TestDBUtils_Delete { 6 public static void main(string[] args) throws SQLException { 7 // 通过有参构造方法生成一个 QueryRunner 对象 8 QueryRunner queryrunner = new 9 QueryRunner(C3P0Utils.getDataSource()); 10 // 创建一个 SQL 语句, 向数据库插入数据 11 String sql = "delete from students where s_name='david'"; 12 // 执行 SQL 语句 13 int count = queryrunner.update(sql); 14 if (count >0) {

8 15 System.out.println(" 数据删除成功 "); 16 } else { 17 System.out.println(" 数据删除失败 "); 18 } 19 } 20 } 运行结果如图 3.4 所示, 控制台显示数据删除成功 图 3.4 数据删除成功 向 MySQL 数据库发送查询语句, 数据已成功删除, 运行结果如下 mysql> SELECT * FROM STUDENTS; s_id s_name s_age 1 lilei 14 2 hanmeimei 13 3 tom 13 4 lucy 12 4 rows in set (0.00 sec) 3.3 DBUtils 实现 DQL 操作 JavaBean JavaBean 是 Java 语言中一个可重复利用的组件 简单而言, 它本质上就是一个类, 一个要遵循 JavaBean 编码规范的特殊类 编写一个 JavaBean 要遵循的规范, 具体如图 3.5 所示 使用 JavaBean 一定要遵循它的编码规范, 避免程序出错 JavaBean 常用于封装数据, 在 Java 程序与数据库的交互中, 尤其是在处理从数据库获得的结果集时, 通常会采用 JavaBean 封装数据 为方便大家对 JavaBean 的理解, 接下来自定义一个 JavaBean 在工程 chapter03 的 src 目录下新建一个包 com.qfedu.bean, 新建类 Students, 具体代码如例 3.5 所示

9 第 章 DBUtils 工具包 图 3.5 JavaBean 的编码规范 例 3.5 Students.java 1 package com.qfedu.bean; 2 // 公有类 3 public class Students { 4 // 提供私有属性 5 private String s_name; 6 private Integer s_age; 7 // 提供无参构造方法 8 public Students() { 9 super(); 10 } 11 // 提供 getter/setter 方法 12 public String gets_name() { 13 return s_name; 14 } 15 public void sets_name(string s_name) { 16 this.s_name = s_name; 17 } 18 public Integer gets_age() { 19 return s_age; 20 } 21 public void sets_age(integer s_age) { 22 this.s_age = s_age; 23 } 24 } 该 Students 类是一个简单的 JavaBean, 它是公有类, 提供了无参构造方法, 及可供外界访问的 getter/setter 方法

10 3.3.2 ArrayHandler 与 ArrayListHandler 调用 QueryRunner 类的 query() 方法可以完成数据库的查询 DBUtils 提供了十余种处理方式, 来应对不同场景下的结果集处理 第一种处理方式是将结果集封装进数组, 可以由 ArrayHandler 或 ArrayListHandler 实现 ArrayHandler 与 ArrayListHandler 的对比情况如表 3.4 所示 前者是将结果集的第一行存储到数组中, 而后者是将结果集的每一行封装到一个数组中, 再把所有数组存储到 List 集合中 表 3.4 ArrayHandler 与 ArrayListHandler 对比类名称相同点不同点 ArrayHandler ArrayListHandler 都要首先将结果集封装进数组 封装单条数据, 把结果集的第一条数据的字段值放入一个数组中 封装多条数据, 把每条数据的字段值各放入一个数组, 再把所有数组都放入 List 集合中 下面通过实例来演示 ArrayHandler 的用法, 具体代码如例 3.6 所示 例 3.6 TestDBUtils_ArrayHandler.java 3 import org.apache.commons.dbutils.queryrunner; 4 import org.apache.commons.dbutils.handlers.arrayhandler; 5 import com.qfedu.utils.c3p0utils; 6 public class TestDBUtils_ArrayHandler { 7 public static void main(string[] args) throws SQLException { 8 // 通过有参构造方法生成一个 QueryRunner 对象 9 QueryRunner queryrunner = new 10 QueryRunner(C3P0Utils.getDataSource()); 11 // 创建一个 SQL 语句, 向数据库查询数据 12 String sql = "select * from students where s_id=? "; 13 // 执行 SQL 语句, 调用 QueryRunner 类的 query() 方法 14 // 第一个参数为 SQL 语句, 第二个参数为结果集对象, 第三个参数为 SQL 语句中的参数 15 Object[] arr = queryrunner.query(sql, new ArrayHandler(), new 16 Object[]{1}); 17 // 遍历结果集, 并打印到控制台 18 for (int i = 0; i < arr.length; i++) { 19 System.out.print(arr[i]+","); 20 } 21 } 22 }

11 第 章 DBUtils 工具包 执行 TestDBUtils_ArrayHandler 类, 运行结果如图 3.6 所示 图 3.6 执行 TestDBUtils_ArrayHandler 类的运行结果 从以上示例代码可以看出, 和 QueryRunner 类的 query() 方法配合,ArrayHandler 类可将查询到的结果集封装到数组之中, 并可将数组内的信息打印到控制台 下面通过一个实例来测试 ArrayListHandler 的用法, 具体代码如例 3.7 所示 例 3.7 TestDBUtils_ArrayListHandler.java 3 import java.util.list; 4 import org.apache.commons.dbutils.queryrunner; 5 import org.apache.commons.dbutils.handlers.arraylisthandler; 6 import com.qfedu.utils.c3p0utils; 7 public class TestDBUtils_ArrayListHandler { 8 public static void main(string[] args) throws SQLException { 9 // 通过有参构造方法生成一个 QueryRunner 对象 10 QueryRunner queryrunner = new 11 QueryRunner(C3P0Utils.getDataSource()); 12 // 创建一个 SQL 语句, 向数据库查询数据 13 String sql = "select * from students "; 14 // 执行 SQL 语句, 调用 QueryRunner 类的 query() 方法 15 // 第一个参数为 SQL 语句, 第二个参数为结果集对象 16 List<Object[]> list = queryrunner.query 17 (sql, new ArrayListHandler()); 18 // 遍历结果集, 并打印到控制台 19 for (Object[] arr : list) { 20 for (int i = 0; i < arr.length; i++) { 21 System.out.print(arr[i]+","); 22 } 23 System.out.println(); 24 } 25 } 26 } 执行 TestDBUtils_ArrayListHandler 类, 运行结果如图 3.7 所示

12 图 3.7 执行 TestDBUtils_ArrayListHandler 类的运行结果 从以上示例代码可以看出, 和 QueryRunner 类的 query() 方法配合,ArrayListHandler 类将查询到的结果封装到数组之中, 并将所有数组封装到一个 List 对象中, 控制台打印出了查询到的全部信息 BeanHandler 与 BeanListHandler 第二种处理方式是将结果集封装进 JavaBean, 可以由 BeanHandler 或 BeanListHandler 实现 在具体封装时, 表中数据的字段和 JavaBean 的属性是相互对应的, 一条数据表记录被封装进一个对应的 JavaBean 对象中 表 3.5 BeanHandler 与 BeanListHandler 对比类名称相同点不同点 BeanHandler BeanListHandler 都要首先将结果集封装进 JavaBean 封装单条数据, 把结果集的第一条数据的字段值放入一个 JavaBean 中 封装多条数据, 把每条数据的字段值各放入一个 JavaBean 中, 再把所有 JavaBean 都放入 List 集合中 BeanHandler 与 BeanListHandler 的对比情况如表 3.5 所示 前者是将结果集的第一行存储到 JavaBean 中, 而后者是将结果集的每一行各封装到一个 JavaBean 中, 再把所有 JavaBean 都存储到 List 集合中 下面通过实例来演示 BeanHandler 的用法, 具体代码如例 3.8 所示 例 3.8 TestDBUtils_BeanHandler.java 3 import org.apache.commons.dbutils.queryrunner; 4 import org.apache.commons.dbutils.handlers.arrayhandler; 5 import org.apache.commons.dbutils.handlers.beanhandler; 6 import com.qfedu.bean.students; 7 import com.qfedu.utils.c3p0utils; 8 public class TestDBUtils_BeanHandler { 9 public static void main(string[] args) throws SQLException { 10 // 通过有参构造方法生成一个 QueryRunner 对象 11 QueryRunner queryrunner = new 12 QueryRunner(C3P0Utils.getDataSource());

13 第 章 DBUtils 工具包 13 // 创建一个 SQL 语句, 向数据库查询数据 14 String sql = "select * from students where s_id=? "; 15 // 执行 SQL 语句, 调用 QueryRunner 类的 query() 方法 16 // 第一个参数为 SQL 语句, 第二个参数为结果集对象, 第三个参数为 SQL 语句中的参数 17 Students students = queryrunner.query(sql, new 18 BeanHandler(Students.class), new Object[]{1}); 19 // 遍历结果集, 并打印到控制台 20 System.out.println("name 值为 "+students.gets_name()+",age 值为 21 "+students.gets_age()); 22 } 23 } 执行 TestDBUtils_BeanHandler 类, 运行结果如图 3.8 所示 图 3.8 执行 TestDBUtils_BeanHandler 类的运行结果 从以上示例代码可以看出, 和 QueryRunner 类的 query() 方法配合,BeanHandler 类将查询到的结果集封装到 JavaBean 之中, 并可将 JavaBean 内的信息打印到控制台 下面通过一个实例来测试 BeanListHandler 的用法, 具体代码如例 3.9 所示 例 3.9 TestDBUtils_BeanListHandler.java 3 import java.util.arraylist; 4 import java.util.list; 5 import org.apache.commons.dbutils.queryrunner; 6 import org.apache.commons.dbutils.handlers.beanlisthandler; 7 import com.qfedu.bean.students; 8 import com.qfedu.utils.c3p0utils; 9 public class TestDBUtils_BeanListHandler { 10 public static void main(string[] args) throws SQLException { 11 // 通过有参构造方法生成一个 QueryRunner 对象 12 QueryRunner queryrunner = new 13 QueryRunner(C3P0Utils.getDataSource()); 14 // 创建一个 SQL 语句, 向数据库查询数据 15 String sql = "select * from students "; 16 // 执行 SQL 语句, 调用 QueryRunner 类的 query() 方法 17 // 第一个参数为 SQL 语句, 第二个参数为结果集对象 18 ArrayList<Students> list = queryrunner.query(sql, new 19 BeanListHandler(Students.class)); 20 // 遍历结果集, 并打印到控制台 21 for (Students stu : list) { 22 System.out.println("name 值为 "+stu.gets_name()+",age 值为 23 "+stu.gets_age());

14 24 } 25 System.out.println(); 26 } 27 } 执行 TestDBUtils_BeanListHandler 类, 运行结果如图 3.9 所示 图 3.9 执行 TestDBUtils_BeanListHandler 类的运行结果 从以上示例代码可以看出, 和 QueryRunner 类的 query() 方法配合,BeanListHandler 类将查询到的结果封装到 JavaBean 之中, 并将所有 JavaBean 封装到一个 List 对象中, 控制台打印出了查询到的全部信息 MapHandler MapListHandler 与 KeyedHandler 第三种处理方式是将结果集封装进 Map 集合中, 可以由 MapHandler MapListHandler 或 KeyedHandler 实现 在具体封装时, 数据表中数据的字段名和字段值以 Map 映射的方式存储 MapHandler MapListHandler KeyedHandler 的对比情况如表 3.6 所示 开发者应根据具体场景选择使用 表 3.6 MapHandler MapListHandler KeyedHandler 对比类名称相同点不同点 MapHandler MapListHandler KeyedHandler 都要首先将结果集存储为 Map 映射 封装单条数据, 把结果集的第一条数据的字段名和字段值存储为 Map 映射 封装多条数据, 把每条数据的字段名和字段值各存储为一个 Map 映射, 再把所有 Map 映射都放入 List 集合中 封装多条数据, 把每条数据的字段名和字段值各存储为一个 Map 映射, 再把所有 Map 映射根据指定 key 都放入一个新的 Map 映射中 下面通过实例来演示 MapHandler 的用法, 具体代码如例 3.10 所示 例 3.10 TestDBUtils_MapHandler.java 3 import java.util.map; 4 import org.apache.commons.dbutils.queryrunner; 5 import org.apache.commons.dbutils.handlers.maphandler; 6 import com.qfedu.utils.c3p0utils;

15 第 章 DBUtils 工具包 7 public class TestDBUtils_MapHandler { 8 public static void main(string[] args) throws SQLException { 9 // 通过有参构造方法生成一个 QueryRunner 对象 10 QueryRunner queryrunner = new 11 QueryRunner(C3P0Utils.getDataSource()); 12 // 创建一个 SQL 语句, 向数据库查询数据 13 String sql = "select * from students where s_id=? "; 14 // 执行 SQL 语句, 调用 QueryRunner 类的 query() 方法 15 // 第一个参数为 SQL 语句, 第二个参数为结果集对象, 第三个参数为 SQL 语句中的参数 16 Map<String, Object> map = queryrunner.query(sql, new MapHandler(), 17 new Object[]{1}); 18 // 打印到控制台 19 System.out.println(map); 20 } 21 执行 TestDBUtils_MapHandler 类, 运行结果如图 3.10 所示 图 3.10 执行 TestDBUtils_MapHandler 类的运行结果 从以上示例代码可以看出, 和 QueryRunner 类的 query() 方法配合,MapHandler 类将查询到的结果集封装到 Map 之中, 并可将 Map 内的信息打印到控制台 下面通过一个实例来测试 MapListHandler 的用法, 具体代码如例 3.11 所示 例 3.11 TestDBUtils_MapListHandler.java 3 import java.util.list; 4 import java.util.map; 5 import org.apache.commons.dbutils.queryrunner; 6 import org.apache.commons.dbutils.handlers.maplisthandler; 7 import com.qfedu.utils.c3p0utils; 8 public class TestDBUtils_MapListHandler { 9 public static void main(string[] args) throws SQLException { 10 // 通过有参构造方法生成一个 QueryRunner 对象 11 QueryRunner queryrunner = new 12 QueryRunner(C3P0Utils.getDataSource()); 13 // 创建一个 SQL 语句, 向数据库查询数据 14 String sql = "select * from students "; 15 // 执行 SQL 语句, 调用 QueryRunner 类的 query() 方法 16 // 第一个参数为 SQL 语句, 第二个参数为结果集对象

16 17 List<Map<String,Object>> list = queryrunner.query(sql, new 18 MapListHandler()); 19 // 遍历结果集, 并打印到控制台 20 for (Map<String,Object> map : list) { 21 System.out.print(map); 22 System.out.println(); 23 } 24 } 25 } 执行 TestDBUtils_MapListHandler 类, 运行结果如图 3.11 所示 图 3.11 执行 TestDBUtils_MapListHandler 类的运行结果 从以上示例代码可以看出, 与 QueryRunner 类的 query() 方法配合,MapListHandler 类将查询到的结果封装到 Map 之中, 并将所有 Map 都封装到一个 List 对象中, 控制台打印出了查询到的全部信息 下面通过一个实例来测试 KeyedHandler 的用法, 具体代码如例 3.12 所示 例 3.12 TestDBUtils_KeyedHandler.java 3 import java.util.map; 4 import org.apache.commons.dbutils.queryrunner; 5 import org.apache.commons.dbutils.handlers.keyedhandler; 6 import com.qfedu.utils.c3p0utils; 7 public class TestDBUtils_KeyedHandler { 8 public static void main(string[] args) throws SQLException { 9 // 通过有参构造方法生成一个 QueryRunner 对象 10 QueryRunner queryrunner = new 11 QueryRunner(C3P0Utils.getDataSource()); 12 // 创建一个 SQL 语句, 向数据库查询数据 13 String sql = "select * from students "; 14 // 执行 SQL 语句, 调用 QueryRunner 类的 query() 方法 15 // 第一个参数为 SQL 语句, 第二个参数为结果集对象, 需传入封装大 Map 时所需的键值 16 Map<Object,Map<String,Object>> map = queryrunner.query(sql, new 17 KeyedHandler<Object>("s_id")); 18 // 获取第一条数据 19 Map<String, Object> m = map.get(new Integer(1));

17 第 章 DBUtils 工具包 20 // 根据字段名获取字段值 21 String sname = (String) m.get("s_name"); 22 Integer sage = (Integer) m.get("s_age"); 23 System.out.println("name 值为 "+sname+",age 值为 "+sage); 24 } 25 } 执行 TestDBUtils_ KeyedHandler 类, 运行结果如图 3.12 所示 图 3.12 执行 TestDBUtils_ KeyedHandler 类的运行结果从以上示例代码可以看出, 与 QueryRunner 类的 query() 方法配合,KeyedHandler 类将查询到的结果封装到 Map 之中, 并将所有 Map 都封装到一个大 Map 中, 控制台打印出了查询到的信息 ColumnListHandler 与 ScalarHandler 第四种处理方式是对指定的列数据进行封装, 可以由 ColumnListHandler 或 ScalarHandler 来实现 在具体封装时, 查询指定列获得的数据被封装到容器中 ColumnListHandler 与 ScalarHandler 的对比情况如表 3.7 所示 前者可以对指定列的所有数据进行封装, 后者主要针对单行单列的数据封装 表 3.7 ColumnListHandler 与 ScalarHandler 对比类名称相同点不同点 ColumnListHandler ScalarHandler 封装指定列的所有数据, 将它们放入一个 List 都是对指定列的查询结果集集合中进行封装封装单条单列数据, 也可以封装类似 count avg max min sum 等聚合函数的执行结果 下面通过实例来演示 ColumnListHandler 的用法, 具体代码如例 3.13 所示 例 3.13 TestDBUtils_ColumnListHandler.java 3 import java.util.list; 4 import org.apache.commons.dbutils.queryrunner; 5 import org.apache.commons.dbutils.handlers.columnlisthandler; 6 import com.qfedu.utils.c3p0utils; 7 public class TestDBUtils_ColumnListHandler { 8 public static void main(string[] args) throws SQLException {

18 9 // 通过有参构造方法生成一个 QueryRunner 对象 10 QueryRunner queryrunner = new 11 QueryRunner(C3P0Utils.getDataSource()); 12 // 创建一个 SQL 语句, 向数据库查询数据 13 String sql = "select * from students "; 14 // 执行 SQL 语句, 调用 QueryRunner 类的 query() 方法 15 // 第一个参数为 SQL 语句, 第二个参数为结果集对象, 需要传入要查的字段名 16 List<Object> list = queryrunner.query(sql, new 17 ColumnListHandler("s_name")); 18 // 将 List 集合中的信息打印到控制台 19 System.out.println(list); 20 } 21 } 执行 TestDBUtils_ ColumnListHandler 类, 运行结果如图 3.13 所示 图 3.13 执行 TestDBUtils_ ColumnListHandler 类的运行结果 从以上示例代码可以看出, 与 QueryRunner 类的 query() 方法配合,ColumnListHandler 类可以将查询指定列的结果集封装到 List 集合之中 下面通过一个实例来测试 ScalarHandler 的用法, 具体代码如例 3.14 所示 例 3.14 TestDBUtils_ScalarHandler.java 3 import org.apache.commons.dbutils.queryrunner; 4 import org.apache.commons.dbutils.handlers.scalarhandler; 5 import com.qfedu.utils.c3p0utils; 6 public class TestDBUtils_ScalarHandler { 7 public static void main(string[] args) throws SQLException { 8 // 通过有参构造方法生成一个 QueryRunner 对象 9 QueryRunner queryrunner = new 10 QueryRunner(C3P0Utils.getDataSource()); 11 // 创建一个 SQL 语句, 向数据库查询数据 12 String sql = "select s_name from students where s_id=?"; 13 // 执行 SQL 语句, 调用 QueryRunner 类的 query() 方法, 第一个参数为 SQL 语句 14 // 第二个参数为结果集对象, 需要传入要查的字段名, 第三个参数为 SQL 语句中的参数 15 String s_name =(String) queryrunner.query(sql, new 16 ScalarHandler("s_name"),new Object[]{1}); 17 // 将查询信息打印到控制台 18 System.out.println(s_name);

19 第 章 DBUtils 工具包 19 } 20 } 执行 TestDBUtils_ScalarHandler 类, 运行结果如图 3.14 所示 图 3.14 执行 TestDBUtils_ScalarHandler 类的运行结果 从以上示例代码可以看出, 和 QueryRunner 类的 query() 方法配合,ScalarHandler 类将查询到的结果封装, 控制台打印出了查询到的信息 3.4 DBUtils 的高级操作 DBUtils 批处理 QueryRunner 类提供的 batch() 方法用于对 SQL 语句进行批量操作, 但是只能执行相同的 SQL 语句, 其中参数可以不同 下面通过具体实例来讲解 QueryRunner 类的批处理功能 如果要向数据表 Students 中插入三条数据, 具体代码如例 3.15 所示 例 3.15 TestDBUtils_Batch.java 3 import org.apache.commons.dbutils.queryrunner; 4 import com.qfedu.utils.c3p0utils; 5 public class TestDBUtils_Batch { 6 public static void main(string[] args) throws SQLException { 7 // 通过有参构造方法生成一个 QueryRunner 对象 8 QueryRunner queryrunner = new 9 QueryRunner(C3P0Utils.getDataSource()); 10 // 创建一个 SQL 语句, 向数据库插入数据 11 String sql = "insert into students(s_name,s_age) values(?,?) "; 12 // 设置类型为二维数组的参数, 里层的一维数组为每条 SQL 语句的参数 13 Object[][] param= new Object[3][]; 14 for(int i=0; i<3; i++){ 15 param[i]= new Object[]{"name"+i,10+i}; 16 } 17 // 执行 SQL 语句, 调用 QueryRunner 类的 query() 方法 18 queryrunner.batch(sql, param); 19 } 20 }

20 运行 TestDBUtils_Batch 类, 通过命令行窗口向数据库发送 select 语句, 结果显示三 条数据已被批量添加至数据库, 运行结果如下 mysql> SELECT * FROM STUDENTS; s_id s_name s_age 1 lilei 14 2 hanmeimei 13 3 tom 13 4 lucy 12 6 name name name rows in set (0.00 sec) DBUtils 事务管理 在前面的讲解中, 创建 QueryRunner 对象时, 调用了有参构造方法, 此时 QueryRunner 对象能自动建立和释放数据库连接, 没有考虑事务管理的问题 在实际的开发过程中, 如果涉及事务管理, 开发者要调用无参构造方法创建 QueryRunner 对象, 将 Connection 对象分离出来, 进行手动管理 在讲解事务的概念时, 本书介绍过李磊到商店购物时扫码支付的场景, 接下来通过 DBUtils 重新实现这个案例, 步骤如下 1. 创建数据库和表在数据库 chapter03 中创建名为 account 的表, 向表中插入若干条数据, 具体的 SQL 语句如下 CREATE TABLE account( id INT PRIMARY KEY AUTO_INCREMENT, #ID aname VARCHAR(20), # 姓名 money DOUBLE # 余额 ); INSERT INTO account(aname,money) VALUES('lilei',3000); INSERT INTO account(aname,money) VALUES('shop',20000); 上述 SQL 语句运行完毕后, 在命令行窗口检查数据库环境是否搭建成功, 发送 select 语句, 运行结果如下 mysql> SELECT * FROM account;

21 第 章 DBUtils 工具包 id aname money lilei shop rows in set (0.00 sec) 2. 编写代码 改写本章 3.2 节中提到的 C3P0Utils 类, 加入处理事务的方法 为了保证从连接池中 拿到的连接是同一个, 代码中使用了 ThreadLocal 类, 将 Connection 对象与线程绑定, 具体代码如例 3.16 所示 例 3.16 C3P0Utils.java 1 package com.qfedu.utils; 2 import java.sql.connection; 3 import java.sql.sqlexception; 4 import javax.sql.datasource; 5 import com.mchange.v2.c3p0.combopooleddatasource; 6 public class C3P0Utils { 7 // 通过读取 c3p0-config 文件获取连接池对象, 使用 name 值为 qfedu 的配置 8 private static ComboPooledDataSource datasource = new 9 ComboPooledDataSource("qfedu"); 10 // 提供一个 datasource 数据源 11 public static DataSource getdatasource(){ 12 return datasource; 13 } 14 // 创建一个 ThreadLocal 对象 15 private static ThreadLocal<Connection> threadlocal = new 16 ThreadLocal<Connection>(); 17 // 提供当前线程中的 Connection 18 public static Connection getconnection() throws SQLException{ 19 Connection conn = threadlocal.get(); 20 if (null==conn) { 21 conn = datasource.getconnection(); 22 threadlocal.set(conn); 23 } 24 return conn; 25 } 26 // 开启事务 27 public static void starttransaction(){ 28 // 首先获取当前线程的连接 29 try { 30 Connection conn = getconnection();

22 31 // 关闭事务自动提交 32 conn.setautocommit(false); 33 } catch (SQLException e) { 34 e.printstacktrace(); 35 } 36 } 37 // 提交事务 38 public static void commit(){ 39 // 首先获取当前线程的连接 40 Connection conn = threadlocal.get();; 41 if(null!= conn){ 42 // 提交事务 43 try { 44 conn.commit(); 45 } catch (SQLException e) { 46 e.printstacktrace(); 47 } 48 } 49 } 50 // 回滚事务 51 public static void rollback(){ 52 // 首先获取当前线程的连接 53 Connection conn = threadlocal.get();; 54 if(null!= conn){ 55 // 回滚事务 56 try { 57 conn.rollback(); 58 } catch (SQLException e) { 59 e.printstacktrace(); 60 } 61 } 62 } 63 // 关闭连接 64 public static void close(){ 65 Connection conn = threadlocal.get(); 66 if(null!= conn){ 67 try { 68 conn.close(); 69 } catch (SQLException e) { 70 e.printstacktrace(); 71 }finally{ 72 // 从当前线程移除连接, 避免造成内存泄露 threadlocal.remove(); 73 }

23 第 章 DBUtils 工具包 74 } 75 } 76 } 调用工具类, 测试 DBUtils 的事务管理, 在创建 QueryRunner 对象时, 调用无参构 造方法, 对 Connection 对象进行单独管理, 具体代码如例 3.17 所示 例 3.17 TestPayment.java 2 import java.sql.connection; 3 import java.sql.sqlexception; 4 import org.apache.commons.dbutils.queryrunner; 5 import com.qfedu.utils.c3p0utils; 6 public class TestPayment { 7 public static void main(string[] args) { 8 Connection conn = null; 9 try { 10 // 开启事务 11 C3P0Utils.startTransaction(); 12 conn = C3P0Utils.getConnection(); 13 QueryRunner queryrunner = new QueryRunner(); 14 //lilei 的账户减去 100 元 15 String sql_1 = "update account set money = money-? where aname=?"; 16 queryrunner.update(conn, sql_1, new Object[]{100,"lilei"}); 17 //shop 的账户增加 100 元 18 String sql_2 = "update account set money = money+? where aname=?"; 19 queryrunner.update(conn, sql_2, new Object[]{100,"shop"}); 20 // 提交事务 21 conn.commit(); 22 System.out.println(" 支付完毕 "); 23 } catch (Exception e) { 24 // 如果有异常, 回滚事务 25 try { 26 conn.rollback(); 27 System.out.println(" 支付失败 "); 28 } catch (SQLException e1) { 29 e1.printstacktrace(); 30 } 31 } finally{ 32 // 释放资源 33 C3P0Utils.close(); 34 } 35 }

24 36 } 代码执行完毕, 再次发送 select 语句,DBUtils 已将本次事务提交到数据库, 运行结果如下 mysql> SELECT * FROM account; id aname money lilei shop rows in set (0.18 sec) 3.5 DBUtils 实现 Dao 封装 在实际的项目开发中, 经常会把操作数据库的代码封装为 Dao 层, 以降低各模块之间的耦合 在大家掌握了 DBUtils 的基本操作之后, 本书将继续讲解使用 DBUtils 完成 Dao 封装的方法 首先, 在工程 chapter03 的 src 目录下新建 com.qfedu.dao 类包, 然后在该包下新建一个 Dao 类 StudentsDao, 具体代码如例 3.18 所示 例 3.18 StudentsDao.java 1 package com.qfedu.dao; 3 import java.util.list; 4 import org.apache.commons.dbutils.queryrunner; 5 import org.apache.commons.dbutils.handlers.beanhandler; 6 import org.apache.commons.dbutils.handlers.beanlisthandler; 7 import com.qfedu.bean.students; 8 import com.qfedu.utils.c3p0utils; 9 public class StudentsDao { 10 // 添加 11 public int insert(students stu) throws SQLException{ 12 QueryRunner queryrunner = new 13 QueryRunner(C3P0Utils.getDataSource()); 14 String sql ="insert into students(s_name,s_age) values(?,?)"; 15 Object[] params = new Object[]{stu.getS_name(),stu.getS_age()}; 16 int count = queryrunner.update(sql,params); 17 return count; 18 } 19 // 修改

25 第 章 DBUtils 工具包 20 public int update(students stu) throws SQLException{ 21 QueryRunner queryrunner = new 22 QueryRunner(C3P0Utils.getDataSource()); 23 String sql ="update students set s_age=? where s_name=?"; 24 Object[] params = new Object[]{stu.getS_age(),stu.getS_name()}; 25 int count = queryrunner.update(sql,params); 26 return count; 27 } 28 // 删除 29 public int delete(students stu) throws SQLException{ 30 QueryRunner queryrunner = new 31 QueryRunner(C3P0Utils.getDataSource()); 32 String sql ="delete from students where s_name=?"; 33 Object[] params = new Object[]{stu.getS_name()}; 34 int count = queryrunner.update(sql,params); 35 return count; 36 } 37 // 根据 id 查询单个数据 38 public Students selectone(integer id) throws SQLException{ 39 QueryRunner queryrunner = new 40 QueryRunner(C3P0Utils.getDataSource()); 41 String sql ="select * from students where s_id=?"; 42 Object[] params = new Object[]{id}; 43 Students newstu = queryrunner.query(sql, new 44 BeanHandler(Students.class),params); 45 return newstu; 46 } 47 // 查询所有数据 48 public List<Students> selectall() throws SQLException{ 49 QueryRunner queryrunner = new 50 QueryRunner(C3P0Utils.getDataSource()); 51 String sql ="select * from students"; 52 List<Students> list = queryrunner.query(sql, new 53 BeanListHandler(Students.class)); 54 return list; 55 } 56 } 利用 StudentsDao 类实现插入功能, 具体代码如例 3.19 所示 例 3.19 TestStuDao_insert.java 3 import com.qfedu.bean.students; 4 import com.qfedu.dao.studentsdao;

26 5 public class TestStuDao_insert { 6 public static void main(string[] args) throws SQLException { 7 StudentsDao dao =new StudentsDao(); 8 Students students = new Students(); 9 students.sets_name("david"); 10 students.sets_age(15); 11 int count = dao.insert(students); 12 if (count >0) { 13 System.out.println(" 数据添加成功 "); 14 } else { 15 System.out.println(" 数据添加失败 "); 16 } 17 } 18 } 执行 TestStuDao_insert 类, 运行结果如图 3.15 所示 图 3.15 执行 TestStuDao_insert 类的运行结果 向数据库发送查询语句, 一条记录已被成功添加, 查询结果如下 mysql> SELECT * FROM STUDENTS; s_id s_name s_age 1 lilei 14 2 hanmeimei 13 3 tom 13 4 lucy 12 6 name name name david 15 9 rows in set (0.00 sec) 利用 StudentsDao 类实现修改功能, 具体代码如例 3.20 所示 例 3.20 TestStuDao_update.java 3 import com.qfedu.bean.students;

27 第 章 DBUtils 工具包 4 import com.qfedu.dao.studentsdao; 5 public class TestStuDao_update { 6 public static void main(string[] args) throws SQLException { 7 StudentsDao dao =new StudentsDao(); 8 Students students = new Students(); 9 students.sets_name("david"); 10 students.sets_age(13); 11 int count = dao.update(students); 12 if (count >0) { 13 System.out.println(" 数据修改成功 "); 14 } else { 15 System.out.println(" 数据修改失败 "); 16 } 17 } 18 } 执行 TestStuDao_ update 类, 运行结果如图 3.16 所示 图 3.16 执行 TestStuDao_ update 类的运行结果 向数据库发送查询语句, 指定记录已被成功修改, 查询结果如下 mysql> SELECT * FROM STUDENTS; s_id s_name s_age 1 lilei 14 2 hanmeimei 13 3 tom 13 4 lucy 12 6 name name name david 13 9 rows in set (0.00 sec) 利用 StudentsDao 类实现删除功能, 具体代码如例 3.21 所示 例 3.21 TestStuDao_delete.java

28 3 import com.qfedu.bean.students; 4 import com.qfedu.dao.studentsdao; 5 public class TestStuDao_delete { 6 public static void main(string[] args) throws SQLException { 7 StudentsDao dao =new StudentsDao(); 8 Students students = new Students(); 9 students.sets_name("david"); 10 int count = dao.delete(students); 11 if (count >0) { 12 System.out.println(" 数据删除成功 "); 13 } else { 14 System.out.println(" 数据删除失败 "); 15 } 16 } 17 } 执行 TestStuDao_ delete 类, 运行结果如图 3.17 所示 图 3.17 执行 TestStuDao_ delete 类的运行结果 向数据库发送查询语句, 指定记录已被成功删除, 查询结果如下 mysql> SELECT * FROM STUDENTS; s_id s_name s_age 1 lilei 14 2 hanmeimei 13 3 tom 13 4 lucy 12 6 name name name rows in set (0.00 sec) 利用 StudentsDao 类实现单个对象的查询, 具体代码如例 3.22 所示 例 3.22 TestStuDao_selectOne.java 3 import com.qfedu.bean.students;

29 第 章 DBUtils 工具包 4 import com.qfedu.dao.studentsdao; 5 public class TestStuDao_selectOne { 6 public static void main(string[] args) throws SQLException { 7 StudentsDao dao =new StudentsDao(); 8 Students stu = dao.selectone(1); 9 System.out.println("name 值为 "+stu.gets_name()+",age 值为 10 "+stu.gets_age()); 11 } 12 } 执行 TestStuDao_ selectone 类, 运行结果如图 3.18 所示 图 3.18 执行 TestStuDao_ selectone 类的运行结果 利用 StudentsDao 类实现所有数据的查询, 具体代码如例 3.23 所示 例 3.23 TestStuDao_selectAll.java 3 import java.util.list; 4 import com.qfedu.bean.students; 5 import com.qfedu.dao.studentsdao; 6 public class TestStuDao_selectAll { 7 public static void main(string[] args) throws SQLException { 8 StudentsDao dao =new StudentsDao(); 9 List<Students> list = dao.selectall(); 10 for (Students stu : list) { 11 System.out.println("name 值为 "+stu.gets_name()+",age 值为 12 "+stu.gets_age()); 13 } 14 } 15 } 执行 TestStuDao_ selectall 类, 运行结果如图 3.19 所示 图 3.19 执行 TestStuDao_ selectall 类的运行结果

30 3.6 本章小结 本章主要介绍 DBUtils 工具包的相关操作, 包括增 删 查 改以及事务处理等 学习完本章的内容后, 大家应该掌握利用 DBUtils 工具包操作数据库的方法 3.7 习题 1. 填空题 (1) 在 DBUtils 工具包提供的 API 中, 用于关闭资源的类是 (2) 当执行查询操作时, 需要调用 QueryRunner 类的 方法 (3) 当执行插入操作时, 需要调用 QueryRunner 类的 方法 (4) 当执行批量操作时, 需要调用 QueryRunner 类的 方法 (5) 将查询结果的第一行数据封装到数组的 API 是 2. 选择题 (1) 在 DBUtils 工具包提供的 API 中, 用于执行 SQL 语句的是 ( ) A.PreparedStatement B.DBUtils C.QueryRunner D.ResultSetHandler (2) 在 DBUtils 工具包提供的 API 中, 用于封装结果集的是 ( ) A.PreparedStatement B.DBUtils C.QueryRunner D.ResultSetHandler (3) 在 DBUtils 工具包提供的 API 中, 用于封装结果集中的一列数据的是 ( ) A.ColumnListHandler B.MapHandler C.ArrayHandler D.BeanHandler (4) 使用 DBUtils 工具包完成如下操作 :select count(*) from 表, 可以封装该查询结 果的是 ( ) A.BeanHandler B.ScalarHandler C.ArrayHandler D.MapHandler (5) 关于 JavaBean 的设计规范, 下列说法错误的是 ( ) A. 作为 JavaBean 的类, 必须要提供无参的构造方法 B. 作为 JavaBean 的类, 要提供 get 和 set 方法访问其属性 C. 作为 JavaBean 的类, 其所有的属性最好定义为私有的 D. 作为 JavaBean 的类, 必须要提供有参的构造方法

31 第 章 DBUtils 工具包 3. 思考题简述 BeanHanlder 和 BeanListHanlder 的异同 4. 编程题已有数据库 chapter03 中的 stundents 表, 请完成以下操作 (1) 查询 stundents 表中 s_id 为 1 的数据, 并将结果打印至控制台 (2) 查询 stundents 表中的所有数据, 并将结果打印至控制台 (3) 查询 stundents 表中学生的个数

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

新・解きながら学ぶJava

新・解きながら学ぶJava 481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --

More information

WebSphere 的基本配置

WebSphere 的基本配置 WebSphere 的基本配置 WAS 是 WebSphere Application Server 的简称 WSAD 是 WebSphere Studio Application Develop 一 用 WSAD 中生成 war 文件 新建一 WSAD 工程目录 新建企业应用程序项目 输入项目名称为 :TestProject > 下一步 新建模块 > 新建 web 模块 :> 完成 此时界面如下

More information

Flume-ng与Mysql整合开发

Flume-ng与Mysql整合开发 Flume-ng 与 Mysql 整合开发 我们知道,Flume 可以和许多的系统进行整合, 包括了 Hadoop Spark Kafka Hbase 等等 ; 当然, 强悍的 Flume 也是可以和 Mysql 进行整合, 将分析好的日志存储到 Mysql( 当然, 你也可以存放到 pg oracle 等等关系型数据库 ) 不过我这里想多说一些 :Flume 是分布式收集日志的系统 ; 既然都分布式了,

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

untitled

untitled 1 Access 料 (1) 立 料 [] [] [ 料 ] 立 料 Access 料 (2) 料 [ 立 料 ] Access 料 (3) 料 料 料 料 料 料 欄 ADO.NET ADO.NET.NET Framework 類 來 料 料 料 料 料 Ex MSSQL Access Excel XML ADO.NET 連 .NET 料.NET 料 料來 類.NET Data Provider

More information

untitled

untitled 1 Access 料 (1) 立 料 [] [] [ 料 ] 立 料 Access 料 (2) 料 [ 立 料 ] Access 料 (3) 料 料 料 料 料 料 欄 ADO.NET ADO.NET.NET Framework 類 來 料 料 料 料 料 Ex MSSQL Access Excel XML ADO.NET 連 .NET 料.NET 料 料來 類.NET Data Provider

More information

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6 www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7

More information

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

More information

untitled

untitled -JAVA 1. Java IDC 20 20% 5 2005 42.5 JAVA IDC JAVA 60% 70% JAVA 3 5 10 JAVA JAVA JAVA J2EE J2SE J2ME 70% JAVA JAVA 20 1 51 2. JAVA SUN JAVA J2EE J2EE 3. 1. CSTP CSTP 2 51 2. 3. CSTP IT CSTP IT IT CSTP

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit Tomcat Web JUnit Cactus JUnit Java Cactus JUnit 26.1 JUnit Java JUnit JUnit Java JSP Servlet JUnit Java Erich Gamma Kent Beck xunit JUnit boolean JUnit Java JUnit Java JUnit Java 26.1.1 JUnit JUnit How

More information

untitled

untitled 1 .NET 料.NET 料 料來 類.NET Data Provider SQL.NET Data Provider System.Data.SqlClient 料 MS-SQL OLE DB.NET Data Provider System.Data.OleDb 料 Dbase FoxPro Excel Access Oracle Access ODBC.NET Data Provider 料

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-065Big5 Title : Sun Certified Programmer for the Java 2 Platform, SE 6.0 Version : Demo 1 / 14 1. 35. String #name = "Jane Doe"; 36. int

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

Hive:用Java代码通过JDBC连接Hiveserver

Hive:用Java代码通过JDBC连接Hiveserver Hive: 用 Java 代码通过 JDBC 连接 Hiveserver 我们可以通过 CLI Client Web UI 等 Hive 提供的用户接口来和 Hive 通信, 但这三种方式最常用的是 CLI;Client 是 Hive 的客户端, 用户连接至 Hive Server 在启动 Client 模式的时候, 需要指出 Hive Server 所在节点, 并且在该节点启动 Hive Server

More information

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6: Chapter 15. Suppressed Exception CH14 Finally Block Java SE 7 try-with-resources JVM cleanup try-with-resources JVM cleanup cleanup Java SE 7 Throwable getsuppressed Throwable[] getsuppressed() Suppressed

More information

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM CHAPTER 6 SQL SQL SQL 6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM 3. 1986 10 ANSI SQL ANSI X3. 135-1986

More information

FileMaker 15 ODBC 和 JDBC 指南

FileMaker 15 ODBC 和 JDBC 指南 FileMaker 15 ODBC JDBC 2004-2016 FileMaker, Inc. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker FileMaker Go FileMaker, Inc. / FileMaker WebDirect FileMaker, Inc. FileMaker

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc Java C++ Pascal C# C# if if if for while do while foreach while do while C# 3.1.1 ; 3-1 ischeck Test() While ischeck while static bool ischeck = true; public static void Test() while (ischeck) ; ischeck

More information

untitled

untitled Database System Principle Database System Principle 1 SQL 3.1 SQL 3.2-3.3 3.4 3.5 3.6 Database System Principle 2 3.1 SQL SQL Structured Query Language SQL Database System Principle 3 SQL 3.1.1 SQL 3.1.2

More information

untitled

untitled How to using M-Power Report API M-Power Report API 力 了 M-Power Report -- Java (Library) M-Power Report API 行 Java M-Power Report M-Power Report API ( 30 ) PDF/HTML/CSV/XLS JPEG/PNG/SVG 料 料 OutputStream

More information

基于ECO的UML模型驱动的数据库应用开发1.doc

基于ECO的UML模型驱动的数据库应用开发1.doc ECO UML () Object RDBMS Mapping.Net Framework Java C# RAD DataSetOleDbConnection DataGrod RAD Client/Server RAD RAD DataReader["Spell"].ToString() AObj.XXX bug sql UML OR Mapping RAD Lazy load round trip

More information

FileMaker 16 ODBC 和 JDBC 指南

FileMaker 16 ODBC 和 JDBC 指南 FileMaker 16 ODBC JDBC 2004-2017 FileMaker, Inc. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker FileMaker Go FileMaker, Inc. FileMaker WebDirect FileMaker Cloud FileMaker,

More information

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 复习 创建对象 构造函数 函数重载 : 函数 = 函数名 + 参数列表 public class MyType { int i; double d; char c; void set(double x)

More information

chp6.ppt

chp6.ppt Java 软 件 设 计 基 础 6. 异 常 处 理 编 程 时 会 遇 到 如 下 三 种 错 误 : 语 法 错 误 (syntax error) 没 有 遵 循 语 言 的 规 则, 出 现 语 法 格 式 上 的 错 误, 可 被 编 译 器 发 现 并 易 于 纠 正 ; 逻 辑 错 误 (logic error) 即 我 们 常 说 的 bug, 意 指 编 写 的 代 码 在 执 行

More information

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取将导致上次获取的 access_token 失效 接入方可以使用 AppID 和 AppSecret

More information

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 JAVA 程 序 设 计 ( 肆 ) 徐 东 / 数 学 系 使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 使 用 Java class 代 表 保 险 箱 public class SaveBox 类 名 类 类 体 实 现 封 装 性 使 用 class SaveBox 代 表 保

More information

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, http://debut.cis.nctu.edu.tw/~chi Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, : POSITIVE_INFINITY NEGATIVE_INFINITY

More information

untitled

untitled JavaEE+Android - 6 1.5-2 JavaEE web MIS OA ERP BOSS Android Android Google Map office HTML CSS,java Android + SQL Sever JavaWeb JavaScript/AJAX jquery Java Oracle SSH SSH EJB+JBOSS Android + 1. 2. IDE

More information

回滚段探究

回滚段探究 oracle oracle internal DBA oracle document oracle concepts oracle document oracle DBWR update t set object_id = '0' where object_id = '12344'; 1 row updated. commit; Commit complete. 0 12344 12344 0 10%

More information

JavaIO.PDF

JavaIO.PDF O u t p u t S t ream j a v a. i o. O u t p u t S t r e a m w r i t e () f l u s h () c l o s e () public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class

More information

untitled

untitled 1 Outline 類别 欄 (1) 類 類 狀 更 易 類 理 若 類 利 來 利 using 來 namespace 類 ; (2) namespace IBM class Notebook namespace Compaq class Notebook 類别 類 來 類 列 欄 (field) (property) (method) (event) 類 例 立 來 車 類 類 立 車 欄 料

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

More information

停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址 access_token=access_token (http

停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址   access_token=access_token (http 停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址 https://webapi.zego.im/cgi/stop-mix? access_token=access_token (https://webapi.zego.im/cgi/stop-mix? access_token=access_token)

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

untitled

untitled 1 MSDN Library MSDN Library 量 例 參 列 [ 說 ] [] [ 索 ] [] 來 MSDN Library 了 類 類 利 F1 http://msdn.microsoft.com/library/ http://msdn.microsoft.com/library/cht/ Object object 參 類 都 object 參 object Boxing 參 boxing

More information

《大话设计模式》第一章

《大话设计模式》第一章 第 1 章 代 码 无 错 就 是 优? 简 单 工 厂 模 式 1.1 面 试 受 挫 小 菜 今 年 计 算 机 专 业 大 四 了, 学 了 不 少 软 件 开 发 方 面 的 东 西, 也 学 着 编 了 些 小 程 序, 踌 躇 满 志, 一 心 要 找 一 个 好 单 位 当 投 递 了 无 数 份 简 历 后, 终 于 收 到 了 一 个 单 位 的 面 试 通 知, 小 菜 欣 喜

More information

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074> 程 序 设 计 实 习 INFO130048 3-2.C++ 面 向 对 象 程 序 设 计 重 载 继 承 多 态 和 聚 合 复 旦 大 学 计 算 机 科 学 与 工 程 系 彭 鑫 pengxin@fudan.edu.cn 内 容 摘 要 方 法 重 载 类 的 继 承 对 象 引 用 和 拷 贝 构 造 函 数 虚 函 数 和 多 态 性 类 的 聚 集 复 旦 大 学 计 算 机 科 学

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc 1.1 组合 Hibernate 与 Spring 1. 在 Eclipse 中, 新建一个 Web project 2. 给该项目增加 Hibernate 开发能力, 增加 Hibernate 相关类库到当前项目的 Build Path, 同时也提供了 hibernate.cfg.xml 这个配置文件 3. 给该项目增加 Spring 开发能力, 增加 spring 相关类库到当前项目的 Build

More information

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 -> 目录 1 大概思路... 1 2 创建 WebAPI... 1 3 创建 CrossMainController 并编写... 1 4 Nuget 安装 microsoft.aspnet.webapi.cors... 4 5 跨域设置路由... 4 6 编写 Jquery EasyUI 界面... 5 7 运行效果... 7 8 总结... 7 1 1 大概思路 创建 WebAPI 创建 CrossMainController

More information

1-1 database columnrow record field 不 DBMS Access Paradox SQL Server Linux MySQL Oracle IBM Informix IBM DB2 Sybase 1-2

1-1 database columnrow record field 不 DBMS Access Paradox SQL Server Linux MySQL Oracle IBM Informix IBM DB2 Sybase 1-2 CHAPTER 1 Understanding Core Database Concepts 1-1 database columnrow record field 不 DBMS Access Paradox SQL Server Linux MySQL Oracle IBM Informix IBM DB2 Sybase 1-2 1 Understanding Core Database Concepts

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

目錄 C ontents Chapter MTA Chapter Chapter

目錄 C ontents Chapter MTA Chapter Chapter 目錄 C ontents Chapter 01 1-1 MTA...1-2 1-2...1-3 1-3...1-5 1-4...1-10 Chapter 02 2-1...2-2 2-2...2-3 2-3...2-7 2-4...2-11...2-16 Chapter 03 3-1...3-2 3-2...3-8 3-3 views...3-16 3-4...3-24...3-33 Chapter

More information

目錄

目錄 資 訊 素 養 線 上 教 材 單 元 五 資 料 庫 概 論 及 Access 5.1 資 料 庫 概 論 5.1.1 為 什 麼 需 要 資 料 庫? 日 常 生 活 裡 我 們 常 常 需 要 記 錄 一 些 事 物, 以 便 有 朝 一 日 所 記 錄 的 事 物 能 夠 派 得 上 用 場 我 們 能 藉 由 記 錄 每 天 的 生 活 開 銷, 就 可 以 在 每 個 月 的 月 底 知

More information

输入 project name 选择完成

输入 project name 选择完成 JAVA 程序访问 HighGo DB 的环境准备 山东瀚高科技有限公司版权所有仅允许不作任何修改的转载和转发 Hibernate 的配置 MyEclipse 中创建新项目 : 选择菜单栏 file---new---project 选择 web project 进行下一步 输入 project name 选择完成 4. 单击 " 添加 JAR/ 文件夹 ", 会如下图出现 JDBC 下载 Hibernate

More information

单元四数据的查询 数据库原理与应用 课内例题 任务 5 多表查询 课内例题 例创建数据表 orders, 并向表中添加记录 首先创建表 orders,sql 语句如下 : CREATE TABLE orders( o_num int NOT NULL AUTO_INCREMENT, o_date d

单元四数据的查询 数据库原理与应用 课内例题 任务 5 多表查询 课内例题 例创建数据表 orders, 并向表中添加记录 首先创建表 orders,sql 语句如下 : CREATE TABLE orders( o_num int NOT NULL AUTO_INCREMENT, o_date d 任务 5 多表查询 课内例题 例创建数据表 orders, 并向表中添加记录 首先创建表 orders,sql 语句如下 : CREATE TABLE orders( o_num int NOT NULL AUTO_INCREMENT, o_date datetime NOT NULL, c_id int NOT NULL, PRIMARY KEY (o_num) ) ; 插入需要演示的数据,SQL

More information

untitled

untitled 1 Outline ArrayList 類 列類 串類 類 類 例 理 MSDN Library MSDN Library 量 例 參 列 [ 說 ] [] [ 索 ] [] 來 MSDN Library 了 類 類 利 F1 http://msdn.microsoft.com/library/ http://msdn.microsoft.com/library/cht/ Object object

More information

<4D6963726F736F667420576F7264202D2031313939204A617661B7C3CECA53514C536572766572BEDDBFE2B5C4C9E8BCC6D3EBCAB5CFD62E646F63>

<4D6963726F736F667420576F7264202D2031313939204A617661B7C3CECA53514C536572766572BEDDBFE2B5C4C9E8BCC6D3EBCAB5CFD62E646F63> Java 访 问 SQL Server 数 据 库 的 设 计 与 实 现 Zhuojun Zhao 数 据 库 连 接 是 软 件 项 目 开 发 中 很 重 要 的 一 个 环 节, 但 是 很 多 Java 初 学 者 在 学 习 连 接 数 据 库 的 过 程 中 感 到 非 常 头 疼, 总 是 出 现 一 系 列 的 问 题, 不 是 连 接 错 误 报 异 常, 就 是 无 法 显 示

More information

RUN_PC連載_12_.doc

RUN_PC連載_12_.doc PowerBuilder 8 (12) PowerBuilder 8.0 PowerBuilder PowerBuilder 8 PowerBuilder 8 / IDE PowerBuilder PowerBuilder 8.0 PowerBuilder PowerBuilder PowerBuilder PowerBuilder 8.0 PowerBuilder 6 PowerBuilder 7

More information

untitled

untitled http://idc.hust.edu.cn/~rxli/ 1.1 1.2 1.3 1.4 1.5 1.6 2 1.1 1.1.1 1.1.2 1.1.3 3 1.1.1 Data (0005794, 601,, 1, 1948.03.26, 01) (,,,,,) 4 1.1.1 Database DB 5 1.1.1 (DBMS) DDL ( Create, Drop, Alter) DML(

More information

EJB-Programming-3.PDF

EJB-Programming-3.PDF :, JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Value Object Design Pattern J2EE Design Patterns Value Object Value Object Factory J2EE EJB Test Client

More information

untitled

untitled 4.1AOP AOP Aspect-oriented programming AOP 來說 AOP 令 理 Cross-cutting concerns Aspect Weave 理 Spring AOP 來 AOP 念 4.1.1 理 AOP AOP 見 例 來 例 錄 Logging 錄 便 來 例 行 留 錄 import java.util.logging.*; public class HelloSpeaker

More information

云数据库 RDS SDK

云数据库 RDS SDK 云数据库 RDS SDK SDK SDK 下载 SDK 下载 最新版本 java_sdk.zip python_sdk.zip php_sdk.zip c#_sdk.zip 历史版本 2015-11-3 java_sdk.zip python_sdk.zip php_sdk.zip c#_sdk.zip JAVA 教程 JAVA 创建 Access Key 登陆阿里云账号 打开 我的 Access

More information

Microsoft Word - 新1-12.doc

Microsoft Word - 新1-12.doc 实训 5 面向对象编程练习 实训 5 面向对象编程练习 5.1 实训目的 通过编程和上机实验理解 Java 语言是如何体现面向对象编程基本思想 以及如何创建类 和对象 了解成员变量和成员方法的特性 5.2 实训要求 编写一个体现面向对象思想的程序 编写一个创建对象和使用对象的方法的程序 5.3 实训内容 5.3.1 创建对象并使用对象 1 定义一个 Person 类 可以在应用程序中使用该类 成员属性

More information

单元四数据的查询 数据库原理与应用 教学设计 数据库原理与应用 教学设计 课题名称 综合案例 数据的查询一 授课班级 移动通信 课时 2 学时 授课地点 实训室 知识目标能力目标素质目标 1. 掌握查询所有数据的方 1. 能够熟练地查询表中的 1. 培养学生的吃苦耐劳 法 ; 所有数据 ; 克服困难

单元四数据的查询 数据库原理与应用 教学设计 数据库原理与应用 教学设计 课题名称 综合案例 数据的查询一 授课班级 移动通信 课时 2 学时 授课地点 实训室 知识目标能力目标素质目标 1. 掌握查询所有数据的方 1. 能够熟练地查询表中的 1. 培养学生的吃苦耐劳 法 ; 所有数据 ; 克服困难 课题名称 综合案例 数据的查询一 授课班级 移动通信 课时 2 学时 授课地点 实训室 知识目标能力目标素质目标 1. 掌握查询所有数据的方 1. 能够熟练地查询表中的 1. 培养学生的吃苦耐劳 法 ; 所有数据 ; 克服困难的精神 ; 2. 掌握按条件查询的方法 ; 2. 能够灵活使用各种关系 2. 培养学生的团队分工与 3. 掌握对查询结果排序的方法 ; 运算符 AND 和 OR 对表中的数据进行条件查询

More information

學 科 100% ( 為 單 複 選 題, 每 題 2.5 分, 共 100 分 ) 1. 請 參 閱 附 圖 作 答 : (A) 選 項 A (B) 選 項 B (C) 選 項 C (D) 選 項 D Ans:D 2. 下 列 對 於 資 料 庫 正 規 化 (Normalization) 的 敘

學 科 100% ( 為 單 複 選 題, 每 題 2.5 分, 共 100 分 ) 1. 請 參 閱 附 圖 作 答 : (A) 選 項 A (B) 選 項 B (C) 選 項 C (D) 選 項 D Ans:D 2. 下 列 對 於 資 料 庫 正 規 化 (Normalization) 的 敘 ITE 資 訊 專 業 人 員 鑑 定 資 料 庫 系 統 開 發 與 設 計 實 務 試 卷 編 號 :IDS101 注 意 事 項 一 本 測 驗 為 單 面 印 刷 試 題, 共 計 十 三 頁 第 二 至 十 三 頁 為 四 十 道 學 科 試 題, 測 驗 時 間 90 分 鐘 : 每 題 2.5 分, 總 測 驗 時 間 為 90 分 鐘 二 執 行 CSF 測 驗 系 統 -Client

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-055Big5 Title : Sun Certified Programmer for the Java 2 Platform.SE 5.0 Version : Demo 1 / 22 1. 11. public static void parse(string str)

More information

untitled

untitled 1 Outline 料 類 說 Tang, Shih-Hsuan 2006/07/26 ~ 2006/09/02 六 PM 7:00 ~ 9:30 聯 ives.net@gmail.com www.csie.ntu.edu.tw/~r93057/aspnet134 度 C# 力 度 C# Web SQL 料 DataGrid DataList 參 ASP.NET 1.0 C# 例 ASP.NET 立

More information

RxJava

RxJava RxJava By 侦跃 & @hi 头 hi RxJava 扩展的观察者模式 处 观察者模式 Observable 发出事件 Subscriber 订阅事件 bus.post(new AnswerEvent(42)); @Subscribe public void onanswer(answerevent event) {! }! Observable observable = Observable.create(new

More information

使用MapReduce读取XML文件

使用MapReduce读取XML文件 使用 MapReduce 读取 XML 文件 XML( 可扩展标记语言, 英语 :extensible Markup Language, 简称 : XML) 是一种标记语言, 也是行业标准数据交换交换格式, 它很适合在系统之间进行数据存储和交换 ( 话说 Hadoop H ive 等的配置文件就是 XML 格式的 ) 本文将介绍如何使用 MapReduce 来读取 XML 文件 但是 Had oop

More information

untitled

untitled OO 1 SQL Server 2000 2 SQL Server 2000 3 SQL Server 2000 DDL 1 2 3 DML 1 INSERT 2 DELETE 3 UPDATE SELECT DCL 1 SQL Server 2 3 GRANT REVOKE 1 2 1 2 3 4 5 6 1 SQL Server 2000 SQL Server SQL / Microsoft SQL

More information

Mac Java import com.apple.mrj.*;... public class MyFirstApp extends JFrame implements ActionListener, MRJAboutHandler, MRJQuitHandler {... public MyFirstApp() {... MRJApplicationUtils.registerAboutHandler(this);

More information

R D B M S O R D B M S R D B M S / O R D B M S R D B M S O R D B M S 4 O R D B M S R D B M 3. ORACLE Server O R A C L E U N I X Windows NT w w

R D B M S O R D B M S R D B M S / O R D B M S R D B M S O R D B M S 4 O R D B M S R D B M 3. ORACLE Server O R A C L E U N I X Windows NT w w 1 1.1 D B M S To w e r C D 1. 1 968 I B M I M S 2 0 70 Cullinet Software I D M S I M S C O D A S Y L 1971 I D M S containing hierarchy I M S I D M S I M S I B M I M S I D M S 2 2. 18 R D B M S O R D B

More information

通过Hive将数据写入到ElasticSearch

通过Hive将数据写入到ElasticSearch 我在 使用 Hive 读取 ElasticSearch 中的数据 文章中介绍了如何使用 Hive 读取 ElasticSearch 中的数据, 本文将接着上文继续介绍如何使用 Hive 将数据写入到 ElasticSearch 中 在使用前同样需要加入 elasticsearch-hadoop-2.3.4.jar 依赖, 具体请参见前文介绍 我们先在 Hive 里面建个名为 iteblog 的表,

More information

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information

基于CDIO一体化理念的课程教学大纲设计

基于CDIO一体化理念的课程教学大纲设计 Java 语 言 程 序 设 计 课 程 教 学 大 纲 Java 语 言 程 序 设 计 课 程 教 学 大 纲 一 课 程 基 本 信 息 1. 课 程 代 码 :52001CC022 2. 课 程 名 称 :Java 语 言 程 序 设 计 3. 课 程 英 文 名 称 :Java Programming 4. 课 程 类 别 : 理 论 课 ( 含 实 验 上 机 或 实 践 ) 5. 授

More information

ASP.NET实现下拉框二级联动组件

ASP.NET实现下拉框二级联动组件 ASP.NET 实现下拉框二级联动组件 namespace WebApplicationDlh using System.Drawing; using System.Web; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using Db; / / Area 的摘要说明 /

More information

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌 语 言 程 序 设 计 郑 莉 胡 家 威 编 著 清 华 大 学 逸 夫 图 书 馆 北 京 内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌 握 语

More information

《计算概论》课程 第十九讲 C 程序设计语言应用

《计算概论》课程 第十九讲  C 程序设计语言应用 Java 高级技术 课程 Java 语言的高级特性 李戈 北京大学信息科学技术学院软件研究所 2009 年 4 月 18 日 两层客户机 / 服务器体系结构 三层客户机 / 应用服务器 / 服务器体系结构 JDBC JDBC (Java Database Connection) 实现 Java 应用程序与数据库之间的接口功能 JDBC 建立在 SQL 的基础上, 应用程序可嵌入 SQL 访问和操作数据库

More information

软件工程文档编制

软件工程文档编制 实训抽象类 一 实训目标 掌握抽象类的定义 使用 掌握运行时多态 二 知识点 抽象类的语法格式如下 : public abstract class ClassName abstract void 方法名称 ( 参数 ); // 非抽象方法的实现代码 在使用抽象类时需要注意如下几点 : 1 抽象类不能被实例化, 实例化的工作应该交由它的子类来完成 2 抽象方法必须由子类来进行重写 3 只要包含一个抽象方法的抽象类,

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 70-536Chinese(C++) Title : TS:MS.NET Framework 2.0-Application Develop Foundation Version : DEMO 1 / 10 1. Exception A. Data B. Message C.

More information

javaexample-02.pdf

javaexample-02.pdf n e w. s t a t i c s t a t i c 3 1 3 2 p u b l i c p r i v a t e p r o t e c t e d j a v a. l a n g. O b j e c t O b j e c t Rect R e c t x 1 y 1 x 2 y 2 R e c t t o S t r i n g ( ) j a v a. l a n g. O

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Fortran Algol Pascal Modula-2 BCPL C Simula SmallTalk C++ Ada Java C# C Fortran 5.1 message A B 5.2 1 class Vehicle subclass Car object mycar public class Vehicle extends Object{ public int WheelNum

More information

Oracle高级复制冲突解决机制的研究

Oracle高级复制冲突解决机制的研究 Oracle dbms_rectifier_diff Oracle : eygle (eygle.com@gmail.com dbms_rectifier_diff Oracle dbms_rectifier_diff : http://www.eygle.com/archives/2005/01/eoadbms_rectifi.html DIFFERENCES Oracle dbms_rectifier_diff.differences

More information

// 获取并集 // set1.addall(set2); // 获取交集 set1.retainall(set2); // 打印操作结果 set1.foreach(o -> System.out.println(o)); 运行结果如图 6-1 所示 图 6-1 运行结果 三 案例总结 1 Coll

// 获取并集 // set1.addall(set2); // 获取交集 set1.retainall(set2); // 打印操作结果 set1.foreach(o -> System.out.println(o)); 运行结果如图 6-1 所示 图 6-1 运行结果 三 案例总结 1 Coll 第 6 章集合 案例 6-1 Collection 单列集合的操作 一 案例描述 1 考核知识点编号 :063006002~063006008 063006018 名称 :Collection 单列集合 Arrays 工具类 2 练习目标 掌握 Collection 单列集合方法的使用 3 需求分析 Collection 是所有单列集合的根接口, 在 Collection 中定义了单列集合 (List

More information

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题 2009 年 3 月 全 国 计 算 机 等 级 考 试 笔 试 试 卷 二 级 Java 语 言 程 序 设 计 ( 考 试 时 间 90 分 钟, 满 分 100 分 ) 一 选 择 题 ( 每 题 2 分, 共 70 分 ) 下 列 各 题 A) B) C) D) 四 个 选 项 中, 只 有 一 个 选 项 是 正 确 的 请 将 正 确 选 项 填 涂 在 答 题 卡 相 应 位 置 上,

More information

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 本章学习目标 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 配置视图解析器 @RequestMapping 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 和 Struts2 都属于表现层的框架, 它是 Spring 框架的一部分, 我们可 以从 Spring 的整体结构中看得出来 :

More information

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F 1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET 2.0 2.0.NET Framework.NET Framework 2.0 ( 3).NET Framework 2.0.NET Framework ( System ) o o o o o o Boxing UnBoxing() o

More information

建模与图形思考

建模与图形思考 F06_c 观摩 :ContentProvider 基於軟硬整合觀點 架构與 DB 引擎移植方法 ( c) By 高煥堂 4 通用性基类 ContentProvider 基於軟硬整合觀點 的使用范例 刚才的范例里, 我们直接使用 DataPersist 类的接口来与 SQLite 沟通 本节将替 DataPersist 配上 ContentProvider 基类, 让 Client 能透过 ContentProvider

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class - Table.class

More information

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat 本章学习目标 小风 Java 实战系列教程 AOP 思想概述 AOP 底层技术实现 AOP 术语介绍 SpringAOP 的 XML 方式 HelloWorld SpringAOP 的 XML 方式配置细节 SpringAOP 的注解方式 SpringAOP 的零配置方式 1. AOP 思想概述 1.1. AOP 思想简介 1.2. AOP 的作用 2. AOP 底层技术实现 小风 Java 实战系列教程

More information

<4D6963726F736F667420576F7264202D20BBF9D3DA416E64726F6964C6BDCCA8B5C4B5E7D7D3C5C4C2F4CFB5CDB32E646F63>

<4D6963726F736F667420576F7264202D20BBF9D3DA416E64726F6964C6BDCCA8B5C4B5E7D7D3C5C4C2F4CFB5CDB32E646F63> 基 于 Android 平 台 的 电 子 拍 卖 系 统 摘 要 本 电 子 拍 卖 系 统 其 实 就 是 一 个 电 子 商 务 平 台, 只 要 将 该 系 统 部 署 到 互 联 网 上, 客 户 都 可 以 在 该 系 统 上 发 布 想 出 售 的 商 品, 也 可 以 对 拍 卖 中 的 商 品 参 与 竞 价 整 个 过 程 无 须 人 工 干 预, 由 系 统 自 动 完 成 本

More information

北 风 网 讲 师 原 创 作 品 ---- 仅 供 学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见

北 风 网 讲 师 原 创 作 品 ---- 仅 供  学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见 北 风 网 讲 师 原 创 作 品 ---- 仅 供 www.ibeifeng.com 学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见 者 远 ; 顺 风 而 呼, 声 非 加 疾 也, 而 闻 者 彰 假 舆 马 者, 非 利 足 也,

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

幻灯片 1

幻灯片 1 JDBC 简介 数据库系统与应用 2017 年 3 月 21 日 白有辉 简介 JDBC 是应用程序与数据库沟通的桥梁, 即 Java 语言通过 JDBC 技术访问数据库 JDBC 是一种 开放 的方案, 它为数据库应用开发人员 数据库前台工具开发人员提供了一种标准的应用程序设计接口, 使开发人员可以用纯 Java 语言编写完整的数据库应用程序 JDBC 提供两种 API, 分别是面向开发人员的 API

More information

在 ongodb 中实现强事务

在 ongodb 中实现强事务 在 ongodb 中实现强事务 600+ employees 2,000+ customers 13 offices worldwide 15,000,000+ Downloads RANK DBMS MODEL SCORE GROWTH (20 MO) 1. Oracle Rela+onal DBMS 1,442-5% 2. MySQL Rela+onal DBMS 1,294 2% 3.

More information

123

123 資 訊 管 理 系 資 料 庫 教 學 帄 台 MTA 資 料 庫 國 際 證 照 題 庫 分 析 指 導 教 授 : 馮 曼 琳 教 授 組 員 名 單 : 陳 雅 紋 學 號 998C030 蔡 宥 為 學 號 998C114 陳 韋 婷 學 號 998C168 中 華 民 國 一 零 三 年 五 月 I 誌 謝 本 專 題 報 告 得 以 順 利 完 成, 首 先 要 感 謝 恩 師 馮 曼

More information

JBuilder Weblogic

JBuilder Weblogic JUnit ( bliu76@yeah.net) < >6 JUnit Java Erich Gamma Kent Beck JUnit JUnit 1 JUnit 1.1 JUnit JUnit java XUnit JUnit 1.2 JUnit JUnit Erich Gamma Kent Beck Erich Gamma Kent Beck XP Extreme Programming CRC

More information

Hadoop&Spark解决二次排序问题(Hadoop篇)

Hadoop&Spark解决二次排序问题(Hadoop篇) Hadoop&Spark 解决二次排序问题 (Spark 篇 ) 问题描述 二次排序就是 key 之间有序, 而且每个 Key 对应的 value 也是有序的 ; 也就是对 MapReduce 的输出 (KEY, Value(v 1,v 2,v 3,...,v n )) 中的 Value(v 1,v 2,v 3,...,v n ) 值进行排序 ( 升序或者降序 ), 使得 Value(s 1,s 2,s

More information

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO CHAPTER 使用 Hadoop 打造自己的雲 8 8.3 測試 Hadoop 雲端系統 4 Nodes Hadoop Map Reduce Hadoop WordCount 4 Nodes Hadoop Map/Reduce $HADOOP_HOME /home/ hadoop/hadoop-0.20.2 wordcount echo $ mkdir wordcount $ cd wordcount

More information

CHAPTER VC#

CHAPTER VC# 1. 2. 3. 4. CHAPTER 2-1 2-2 2-3 2-4 VC# 2-5 2-6 2-7 2-8 Visual C# 2008 2-1 Visual C# 0~100 (-32768~+32767) 2 4 VC# (Overflow) 2-1 2-2 2-1 2-1.1 2-1 1 10 10!(1 10) 2-3 Visual C# 2008 10! 32767 short( )

More information

一步一步教你搞网站同步镜像!|动易Cms

一步一步教你搞网站同步镜像!|动易Cms 一 步 一 步 教 你 搞 网 站 同 步 镜 像! 动 易 Cms 前 几 天 看 见 论 坛 里 有 位 朋 友 问 一 个 关 于 镜 像 的 问 题, 今 天 刚 好 搞 到 了 一 个, 于 是 拿 出 来 和 大 家 一 起 分 享 了! 1. 介 绍 现 在 的 网 站 随 着 访 问 量 的 增 加, 单 一 服 务 器 无 法 承 担 巨 大 的 访 问 量, 有 没 有 什 么

More information