一、ResultSet之滚动结果集 ,在Java5中引入了一种

2019-08-10 作者:编程   |   浏览(55)

java中Junit测试,javaJunit测试

数据库连接池,

  用池来管理Connection,这可以重复使用Connection。有了池,所有我们就不用自己来创建Connection,而是通过吃来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection"归还"给池。池就可以在利用这个Connection对象了。

1、池参数(所有池参数都有默认值):

  • 小鱼儿玄机30码,初始大小:10个;
  • 最小空闲连接数:3个;
  • 增量:一次创建的最小单位(5个);
  • 最大空闲连接数:12个;
  • 最大连接数:20个;
  • 最大的等待时间:1000毫秒。

2、四大连接参数

  连接池也是使用四大连接参数来完成创建连接对象。

3、实现的接口

连接池必须实现:javax.sql.DataSource接口。

连接池返回的Connection对象,它的close()方法与众不同,调用它的close()不是关闭,而是把连接归还给池。

4、DBCP连接池示例:

 1 package cn.itcast.jdbc;
 2 
 3 import org.apache.commons.dbcp2.BasicDataSource;
 4 import org.junit.Test;
 5 import java.sql.Connection;
 6 import java.sql.SQLException;
 7 
 8 /**
 9  * DBCP连接池
10  */
11 public class Demo1 {
12     @Test
13     public void fun1() throws SQLException{
14         /**
15          * 1、创建连接池
16          * 2、配置四大参数
17          * 3、配置池参数
18          * 4、得到连接对象
19          */
20         BasicDataSource dataSource = new BasicDataSource();
21         dataSource.setDriverClassName("com.mysql.jdbc.Driver");
22         dataSource.setUrl("jdbc:mysql://localhost:3306/mydb1");
23         dataSource.setUsername("root");
24         dataSource.setPassword("");
25 
26         dataSource.setMaxTotal(20);
27         dataSource.setMaxIdle(3);
28         dataSource.setMaxWaitMillis(1000);
29 
30         Connection con = dataSource.getConnection();
31         System.out.println(con.getClass().getName());//结果:org.apache.commons.dbcp2.PoolingDataSource$PoolGuardConnectionWrapper

32 /* 
33  * 连接池内部使用四大参数创建了连接对象,即mysql驱动提供的Connection 
34  * 连接池使用mysql的连接对象进行了装饰,只对close()方法进行了增强; 
35  * 装饰之后的Connection的close()方法,用来把当前连接归还给池; 
36  * */
37      con.close();//把连接归还给池; 
38     } 
39 }

 5、C3P0

①C3P0是开源免费的连接池。

②C3P0的使用

C3P0中池类是:CombopooledDataSource。

相关jar包下载链接:

导入c3p0-0.9.5.2.jar 和mchange-commons-java-0.2.11.jar包、mysql-connector-java-5.1.44-bin.jar(针对MySQL数据库)

③c3p0也可以指定配置文件,而配置文件可以是properties,也可以是xml的,当然xml高级一些,但是c3p0的配置文件名必须为“c3p0-config.xml”,并放在类的路径下(src下)。

④示例:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <c3p0-config>
 3     <!--默认配置信息-->
 4     <default-config>
 5         <!--连接四大参数配置-->
 6         <property name="droverClass">com.mysql.jdbc.Driver</property>
 7         <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb1</property>
 8         <property name="user">root</property>
 9         <property name="password"></property>
10         <!--池参数配置-->
11         <property name="acquireIncrement">3</property>
12         <property name="initialPoolSize">10</property>
13         <property name="minPoolSize">2</property>
14         <property name="maxPoolSize">10</property>
15     </default-config>
16     <!-- 专门为oracle提供的配置信息 -->
17     <named-config name="oracle-config">
18         <!--连接四大参数配置-->
19         <property name="droverClass">oracle.jdbc.driver.OracleDriver</property>
20         <property name="jdbcUrl">jdbc:oracle:thin:@地址:端口:ORCL</property>
21         <property name="user">root</property>
22         <property name="password"></property>
23         <!--池参数配置-->
24         <property name="acquireIncrement">3</property>
25         <property name="initialPoolSize">10</property>
26         <property name="minPoolSize">2</property>
27         <property name="maxPoolSize">10</property>
28     </named-config>
29 </c3p0-config>

 1 import com.mchange.v2.c3p0.ComboPooledDataSource;
 2 import org.junit.Test;
 3 import java.beans.PropertyVetoException;
 4 import java.sql.Connection;
 5 import java.sql.SQLException;
 6 
 7 /**
 8  * c3p0
 9  */
10 public class Demo1 {
11     /*
12     * 手动配置
13     * */
14     @Test
15     public void fun1() throws PropertyVetoException,SQLException {
16         //创建连接池对象
17         ComboPooledDataSource dataSource = new ComboPooledDataSource();
18         //对池进行四大参数的配置
19         dataSource.setDriverClass("com.mysql.jdbc.Driver");
20         dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydb1");
21         dataSource.setUser("root");
22         dataSource.setPassword("");
23 
24         //池配置
25         dataSource.setAcquireIncrement(5);
26         dataSource.setInitialPoolSize(20);
27         dataSource.setMinPoolSize(2);
28         dataSource.setMaxPoolSize(50);
29 
30         Connection con = dataSource.getConnection();
31         System.out.println(con);
32         con.close();
33     }
34     /*
35     * 配置文件的默认配置
36     * */
37     @Test
38     public void fun2() throws SQLException{
39         /*
40         * 在创建连接池对象时,这个对象就会自动加载配置文件,不用我们来指定。
41         * */
42         ComboPooledDataSource dataSource = new ComboPooledDataSource();
43         Connection con = dataSource.getConnection();
44         System.out.println(con);
45         con.close();
46     }
47     /*
48     * 使用命名配置信息
49     * */
50     @Test
51     public void fun3() throws SQLException{
52         /*
53         * 构造器的参数指定命名配置元素的名称
54         * */
55         ComboPooledDataSource dataSource = new ComboPooledDataSource("oracle-config");
56         Connection con = dataSource.getConnection();
57         System.out.println(con);
58         con.close();
59     }
60 }

 

用池来管理Connection,这可以重复使用Connection。有了池,所有我们就不用自己来创建Connection,而是通过吃来获取Connection对象...

JDBC入门(2)--- ResultSet之滚动结果集,jdbcresultset

一、ResultSet之滚动结果集 

 ResultSet表示结果集,它是一个二维的表格。ResultSet内部维护一个行光标(游标),ResultSet提供了一系列的方法来移动游标:

  • void beforeFirst():把光标放到第一行的前面,这也是光标默认的位置;
  • void afterLast():把光标放到最后一行的后面;
  • boolean first(): 把光标放到第一行的位置上,返回值表示调控光标是否成功;
  • boolean last():把光标放到最后一行的位置上;
  • boolean isBeforeFirst():当前光标位置是否在第一行前面
  • boolean isAfterLast():当前光标位置是否在最后一行后面
  • boolean isFirst():当前光标位置是否在第一行上
  • boolean isLast():当前光标位置是否在最后一行上
  • boolean previous(): 把光标向上挪一行
  • boolean next(): 把光标向下挪一行
  • boolean relative(int row):相对位移,当row为正数时,表示向下移动row行,为负数时表示向上移动row行。
  • boolean absolute(int row):绝对位移,把光标移动到指定的行上;
  • int getRow():返回当前光标所有行。

     上面方法分为两类,一类用来判断游标位置的,另一类是用来移动游标的。如果结果集是不可滚动的,那么只能使用next()方法来移动游标,而beforeFirst()、afterLast()、first()、last()、previous()、relative()方法都不能使用。

获取结果集元数据:

  • 得到元数据:rs.getMetaData(),返回值为ResultSetMetaData;
  • 获取结果集列数:int getColumnCount();
  • 获取指定列的列名:String getColumnName(int collindex);

结果集特性:

  • 是否可滚动
  • 是否敏感
  • 是否可更新
Statement createStatement();//默认不滚动、不敏感、不可更新。

  结果集是否支持滚动,要从Conntection类的createStatement()方法说起。也就是说创建的Statement决定了使用Statement创建的ResultSet是否支持滚动。

  Statement createStatement(int resultSetType,int resultSetConcurrency)
  • 第一个参数的可选值:
    • ResultSet.TYPE_FORWARD_ONLY: 不滚动结果集;(默认值)
    • ResultSet.TYPE_SCROLL INSENSITIVE: 滚动结果集,但结果集数据不会再跟随数据库而变化;
    • ResultSet.TYPE_SCROLL_SENSITIVE: 滚动结果集,但结果集数据不会再跟随数据库而变化;(无数据驱动支持)
  • 第二个参数的可选值:
    • CONCUR_READ_ONLY:结果集是只读的,不能通过修改结果集而反向影响数据库;
    • CONCUR_UPDATABLE:结果集是可更新的,对结果集的更新可以反向影响数据库。

二、ResultSet之获取列数据

  可以通过next()方法使ResultSet的游标向下移动,当游标移动到你需要的行时,就需要获取该行的数据,ResultSet提供了一系列获取列数据的方法:

  • String getString (int columnIndex):获取指定列的String类型数据
  • int getInt (int columnIndex):获取指定列的int类型数据
  • double getDouble (int columnIndex):获取指定列的double类型数据
  • boolean getBoolean (int columnIndex):获取指定列的boolean类型数据
  • Object getObject (int columnIndex):获取指定列的Object类型的数据
  • String getString (int columnName):获取名为columnName的列的String类型数据
  • int getInt (int columnName):获取名为columnName的列的int类型数据
  • double getDouble (int columnName):获取名为columnName的列的double类型数据
  • boolean getBoolean (int columnName):获取名为columnName的列的boolean类型数据
  • Object getObject (int columnName):获取名为columnName的列的Object类型的数据

 

ResultSet之滚动结果集,jdbcresultset 一、ResultSet之滚动结果集 ResultSet表示结果集,它是一个二维的表格。ResultSet内部维护一个...

Java 循环结构,java循环结构

java中Junit测试

Java 循环结构 - for, while 及 do...while

顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,,就需要使用循环结构。

Java中有三种主要的循环结构:

  • while 循环
  • do…while 循环
  • for 循环

在Java5中引入了一种主要用于数组的增强型for循环。


问题一:JUnit中什么时候使用assertTrue,assertFalse语句

assertTrue(boolean condition);

condition:如果condition结果为true,则通过测试.

assertFalse(boolean condition);

condition:如果condition结果为false,则通过测试.

 

while 循环

while是最基本的循环,它的结构为:

while( 布尔表达式 ) { //循环内容 }

只要布尔表达式为 true,循环体会一直执行下去。

问题二:java使用Junit测试实例

参考:

java如何使用JUnit进行单元测试 - Fench - 博客园

 

实例

 

Test.java 文件代码:

单元测试是什么?

      百度百科的解释是这样的:单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。例如,你可能把一个很大的值放入一个有序list 中去,然后确认该值出现在list 的尾部。或者,你可能会从字符串中删除匹配某种模式的字符,然后确认字符串确实不再包含这些字符了。

     简单的说,单元测试就是对你程序中最小的功能模块进行测试,在c语言里可能是一个函数,java中可能是一个方法或者类。

目的就是为了提高代码的质量。

public class Test { public static void main(String args[]) { int x = 10; while( x < 20 ) { System.out.print("value of x : " x ); x ; System.out.print("n"); } } }

以上实例编译运行结果如下:

value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19

junit是什么?

     JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。

也就是说junit就是别人写好的单元测试框架,使用此框架你可以大大缩短你的测试时间和准确度(笔者现在还记得大一刚来的的时候,c语言写的小程序,每次都是重启测试,那种编译-输入--停止-编译的苦日子,很痛苦,今天用junit这个单元测试框架好多了)。

* *

注:eclipse已经自带JUnit, JUnit的当前常用版本分为3.X(需要手动添加),4.X(支持注解)

我的这个版本的eclipse自带JUnit3.X的,本文以JUnit3.x为例进行测试。

 

 

下面以 “求最大子数组之和”的例子,简单的介绍一下单元测试是什么,junit如何入门。

 

 1 package edu.sau.maximun;
 2 
 3 public class SubArray {
 4   //求两个数中的最大
 5   public int max(int x, int y){
 6       if(x>y)
 7           return x;
 8       else
 9           return y;
10   }
11   
12   //最大子数组之和
13   public int  maxSubArr(int[] arr){
14       int sum = arr[0];  //最大值子数组和
15       int sub_sum = arr[0];//中间值
16       
17       for(int i = 1; i<arr.length; i  ){
18           sub_sum = max(arr[i],sub_sum arr[i] );
19           sum = max(sub_sum,sum);
20       }
21       return sum;
22   }
23 }

以上代码实现了“最大子数组之和”的算法,共有max和maxSubArr两个方法,下面开始测试(重新创建一个新包,取名 test,所有测试都是再这个新包完成)

 

 1 package edu.sau.maximun.test;
 2 
 3 import edu.sau.maximun.SubArray;
 4 import junit.framework.TestCase;
 5 
 6 public class TestMaximun extends TestCase {
 7     
 8     //对方法max进行测试
 9     public void testMax(){
10         int x = 1;  //测试数据
11         int y = 2;
12         int z = -1;
13         SubArray  sub = new SubArray();
14         int result1 = sub.max(x, y);
15         int result2 = sub.max(y,x);
16         int result3 = sub.max(z, x);
17         assertTrue(result1 == y);
18         assertTrue(result2 == y);
19         assertTrue(result3 == 1);
20     }
21     
22     //对方法maxSubArr测试
23     public void testMaxSubArr(){
24         
25         int arr1[] ={1,2,3,-1}; //测试用例
26         int arr2[] = {1,2,-4,8,4,-4,6,-2,1};
27         int  arr3[] ={-4,-2,-1,-3};
28         int arr4[] = {-4,2,-4,2,-1};
29         SubArray sub = new SubArray();
30         
31         
32         assertTrue(sub.maxSubArr(arr1) == 6);
33         assertTrue(sub.maxSubArr(arr2) == 14);
34         assertTrue(sub.maxSubArr(arr3) == -1);
35         assertTrue(sub.maxSubArr(arr4) == 2);
36     }
37 }

 

整个文件的结构目录如下:

 小鱼儿玄机30码 1

 

程序单元测试的方法:-右击 测试类->Run as ->JUnit test  

运行结果:(Errors:0,Failure:0 说明测试通过,如果出错,Failure是单元测试所期望的错误,说明你的代码结果不满足你的要求,Errors需要你查看系统的配置,检查代码。是不是手动输入快好多?)

 

 小鱼儿玄机30码 2

 

说明:

小鱼儿玄机30码 3

 

总结:测试类需要继承junit.framework.TestCase类,测试方法命名需要按照public void TestXXXX格式,通过断言来判断结果的正确行。

 

测试范围一定要满足你的所有需求

   以测试testMaxSubArr为例,具体的测试样例及目的如下:  

用例编号

用例描述

       输入数据 预期输出数据 通过/不通过 评价
   1 检测能否实现最大数组求和的基本功能(一般情况) 1,2,3,-1 6 通过 程序实现基本功能
2 最大子数组处于数组中间(一般情况) 1,2,-4,8,4,-4,6,-2,1 14 通过 程序实现基本功能
3 数组元素均为负数,且第一个元素为最小(特殊情况) -4,-2,-1,-3 -1 通过 程序实现特殊情况的求和
4 数组中存在最大值相同的多个(>=2)子数组(特殊情况) -4,2,-4,2,-1 2 通过 程序能对多个相同子数组进行保留

现在大家已经会基本的单元测试,当然这只是非常简单的使用junit,后期我会写一些关于junit的更具体的介绍。

代码下载地址:     

                                                                                                                                                                 

 

 

 

 

 

 

 

 

do…while 循环

对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。

do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。

do {
       //代码语句
}while(布尔表达式);

注意:布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。 如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false。

本文由小鱼儿玄机30码发布于编程,转载请注明出处:一、ResultSet之滚动结果集 ,在Java5中引入了一种

关键词: 小鱼儿玄机30码