软件质量保证与测试第六周作业

作业内容:本周在进行项目开发的过程中,我接触到了JDBC(Java Data Base Connectivity,java数据库连接),它是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC可以为多种数据库提供统一的访问,简单来说JDBC就是用来连接java和数据库的桥梁,体现了Java“编写一次,处处运行”的高大上精神。连接到oracle数据库之后,我在同学的指导下进行了慕课网JDBC视频的学习 http://www.imooc.com/video/4387 并简单的完成了我们团队项目的一部分工作。

下面是我学习JDBC的第一步,所以我想来详细介绍一下用JDBC连接oracle数据库的过程。

JDBC连接数据库

创建一个以JDBC连接数据库的程序,包含以下7个步骤:

 1、加载JDBC驱动程序 

在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String  className)实现。

 1     try{   //加载MySql的驱动类
 2
 3     Class.forName("com.mysql.jdbc.Driver") ;
 4
 5     }catch(ClassNotFoundException e){
 6
 7     System.out.println("找不到驱动程序类 ,加载驱动失败!");
 8
 9     e.printStackTrace() ;
10
11     }   

成功加载后,会将Driver类的实例注册到DriverManager类中。

2、提供JDBC连接的URL

(1)连接URL定义了连接数据库时的协议、子协议、数据源标识。

(2)书写形式:协议:子协议:数据源标识

协议:在JDBC中总是以jdbc开始

子协议:是桥连接的驱动程序或是数据库管理系统名称。

数据源标识:标记找到数据库来源的地址与连接端口。

例如:(MySql的连接URL)jdbc:mysql:

//localhost:3306/test?useUnicode=true&characterEncoding=gbk ;

useUnicode=true:表示使用Unicode字符集。如果characterEncoding设置为gb2312或GBK,本参数必须设置为true 。characterEncoding=gbk:字符编码方式。

  3、创建数据库的连接

(1)要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。

(2) 使用DriverManager的getConnectin(String url , String username , String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。

 1 //连接MySql数据库,用户名和密码都是root
 2      String url = "jdbc:mysql://localhost:3306/test" ;
 3      String username = "root" ;
 4      String password = "root" ;
 5      try{
 6     Connection con =
 7              DriverManager.getConnection(url , username , password ) ;
 8      }catch(SQLException se){
 9     System.out.println("数据库连接失败!");
10     se.printStackTrace() ;
11      } 

4、创建一个Statement

要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3 种类型:
1、执行静态SQL语句。通常通过Statement实例实现。
2、执行动态SQL语句。通常通过PreparedStatement实例实现。
3、执行数据库存储过程。通常通过CallableStatement实例实现。
具体的实现方式:
    Statement stmt = con.createStatement() ;
    PreparedStatement pstmt = con.prepareStatement(sql) ;
    CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ;

5、执行SQL语句
Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate 和execute
1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句 ,返回一个结果集(ResultSet)对象。
2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或 DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
具体实现的代码:

ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
     int rows = stmt.executeUpdate("INSERT INTO ...") ;
     boolean flag = stmt.execute(String sql) ;

6、处理结果
两种情况:
1、执行更新返回的是本次操作影响到的记录数。
2、执行查询返回的结果是一个ResultSet对象。
ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些 行中数据的访问。
使用结果集(ResultSet)对象的访问方法获取数据:

1 while(rs.next()){
2 String name = rs.getString("name") ;
3 String pass = rs.getString(1) ; // 此方法比较高效
4 } 

(列是从左到右编号的,并且从列1开始)
7、关闭JDBC对象

操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:
1、关闭记录集 2、关闭声明 3、关闭连接对象

 1  1 if(rs != null){ // 关闭记录集
 2  2 try{
 3  3 rs.close() ;
 4  4 }catch(SQLException e){
 5  5 e.printStackTrace() ;
 6  6 }
 7  7 }
 8  8 if(stmt != null){ // 关闭声明
 9  9 try{
10 10 stmt.close() ;
11 11 }catch(SQLException e){
12 12 e.printStackTrace() ;
13 13 }
14 14 }
15 15 if(conn != null){ // 关闭连接对象
16 16 try{
17 17 conn.close() ;
18 18 }catch(SQLException e){
19 19 e.printStackTrace() ;
20 20 }
21 21 }

完整的代码如下:如果成功连接则会出现employee表中所有员工的名字

 1 import java.sql.*;
 2 public class Test {
 3     public static void main(String[] args) {
 4         ResultSet rs = null;
 5         Statement stmt = null;
 6         Connection conn = null;
 7         try {
 8             Class.forName("oracle.jdbc.driver.OracleDriver");
 9             // new oracle.jdbc.driver.OracleDriver();
10             conn = DriverManager.getConnection(
11                     "jdbc:oracle:thin:@localhost:1521:XE", "HR",
12                     "oracle");
13             stmt = conn.createStatement();
14             rs = stmt.executeQuery("select * from employees");
15             while (rs.next()) {
16                 System.out.println(rs.getString("first_name"));
17                 // System.out.println(rs.getInt("deptno"));
18             }
19         } catch (ClassNotFoundException e) {
20             e.printStackTrace();
21         } catch (SQLException e) {
22             e.printStackTrace();
23         } finally {
24             try {
25                 if (rs != null) {
26                     rs.close();
27                     rs = null;
28                 }
29                 if (stmt != null) {
30                     stmt.close();
31                     stmt = null;
32                 }
33                 if (conn != null) {
34                     conn.close();
35                     conn = null;
36                 }
37             } catch (SQLException e) {
38                 e.printStackTrace();
39             }
40         }
41     }
42 }

时间: 2024-10-21 10:34:57

软件质量保证与测试第六周作业的相关文章

软件质量保证与测试第五周作业

软件的质量保障工作 前言: 在本周我们团队开始进入程序编写阶段,我和张超组成的小组被分配到的任务模块式是开发游客模块中的浏览文章.发表评论部分. 在本周我初步完成博主界面以及首页的代码设计,并进行相应的单元测试(包括是否符合组内要求文档核查). 软件质量保障工作是指软件团队为了让软件达到事先定义好的质量标准而进行的活动,包括测试工作. 组内相关文档要求:(见页末附录部分) 界面设计核查表 核查人:陈丽霞 核查时间:2016/3/29 核查 序号 要求 截图示意 审查结果 组内相关文档对比核查(文

第六周作业。

第六周作业.额,暂时不知道写什么好.那就写写如何翻越GFW   (科学上网)的教程吧.基于Shadow socks的教程.可能不是第一个,也可能不是最后一个.但是这也算是科普吧.毕竟连翻越GWF(科学上网)能力都没有何必谈的上是一个好的Programer呢?. ========================================================== 顺便说一句:Fk GFW. ==============================================

山东大学软件质量保证与测试技术复习纲要

软件质量保证与测试技术复习提纲 1.3  1.5   2.1 2.3 2.5 2.6   3.3(3.3.1    扩展) 3.4 3.7.3  FSM   状态图 状态表   5.1 5.7.1 5.7.2   8.1.1 8.1.5   9.1 9.6 3.3.1    扩展 某研究所重新对其在大学以上学历的职工安排工作.其方针如下:"如果年龄不满18岁,文化程度是大学,若是男性,则一律要求考研究生.若是女性,则分配到研究所办公室任行政干部:如果年龄满18岁但不足50岁,文化程度是研究生,不

2017-2018-2 20179215《网络攻防实践》第六周作业

2017-2018-2 20179215<网络攻防实践> 第六周学习总结 课本学习笔记 一.TCP/IP网络协议攻击 1.网络安全的属性:机密性 .完整性 .可用性 .真实性 .不可抵赖性 . 2.网络攻击的基本模式分为:截获(嗅探 与 监听) .中断(拒绝服务) .篡改(数据包篡改) .伪造(欺骗) . 3.TCP/IP网络协议栈在设计时采用了分层模型,分为:网络接口层 .互联层 .传输层 .应用层.每一层当中都有针对破坏网络安全属性为目的的攻击技术.每一层所涉及的主要协议: 网络接口层:以

软件质量保证与测试(作业六)

第13章 软件测试 思考:软件测试的方法和软件性能测试 1.按测试设计的方法分类:(1)黑盒测试:只关心输入和输出的结果(2)白盒测试:去研究里面的源代码和程序结构 2.按是否运行程序分为:(1)静态测试:是指不实际运行被测软件,而只是静态地检查程序代码和可能存在的错误的过程.静态测试包括:对于代码测试,主要是测试代码是否符合相应的标准和规范.对于界面测试,主要测试软件的实际界面与需求中的说明是否相符.对于文档测试,主要测试用户手册和需求说明是否真正符合用户的实际需求.(2)动态测试,是指运行实

第六周作业-UML在详细设计阶段的使用心得&amp;&amp;UML建模与软件开发过程模型

这周又到了我们项目小组进行详细设计的阶段了.据了解呢,不大喜欢把详细设计做的太细,以便发挥下自己的创造力(初级设计能力).但是借鉴其他国家(如日本)的公司,详细设计不但详细到类级别,甚至每个方法都还有伪代码,这种感觉确实是太不能发挥自己的主观能动性了.不过仁者见仁,智者见智,因为一个初级的程序猿如果先是看别人的设计,然后再开始自己的设计,也许学习曲线就不会那么陡峭,日子也会过的舒服一点儿也未可知. 在这次的作业中我谈到的就是UML在项目实施中的使用心得(详细设计阶段),以及下面的一部分扩展知识:

软件项目管理第六周作业

1.单元测试工具 JUnit JUnit 是 Java 社区中知名度最高的单元测试工具.它诞生于 1997 年,由 Erich Gamma 和 Kent Beck 共同开发完成.其中 Erich Gamma 是经典著作<设计模式:可复用面向对象软件的基础>一书的作者之一,并在 Eclipse 中有很大的贡献:Kent Beck 则是一位极限编程(XP)方面的专家和先驱.JUnit 设计的非常小巧,但是功能却非常强大.JUnit ——是一个开发源代码的Java测试框架,用于编写和运行可重复的测试

软件质量保证与测试第四周作业

作业内容:简要分析计算机辅助教学系统(CAI)的需求和必要性以及本周结对项目工作的成果. 答:本周我们团队选择了计算机辅助教学系统这一项目作为我们本次的团队项目. 一.简要分析一下CAI的需求和必要性: (1)随着计算机技术的飞速发展,信息网络已成为社会发展的重要保证.如何以网络为纽带快速.高效.方便地实现知识传递,以现代化手段促进教学改革,是教育工作者要解决的问题. (2)传统的教学方式体现出教师和学生不能同步的问题,现在有一种教学方式就是基于网络的教学,它实现了在网络上学生和教师互动. (3

软件质量保证与测试(作业五)

部署图(本周项目所分配的任务) 一.部署图的简介 部署图用来描述系统运行时候的结构,展示了硬件如何配置及其软件如何部署到网络结构中.从部署图中,我们可以了解到软件和硬件组件之间的物理关系. 二.部署图的构成 1.结点 一个结点,通常描述成一个立体的盒子,由一个矩形旁边伸出两个小矩形组成.通常它表示一个计算设备. 2.结点实例 结点实例名称格式如下 Node Instance : node,它与结点的区别就是名称有下划线和结点类型前面有冒号. 3.组件 组件(Component)是对数据和方法的简