import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.*;
import java.util.regex.Matcher; public class SQLProvider implements Iterator<Object[]> {
List<Map<String, String>> sqlList = new ArrayList();
int rowNum=0; //行数
int curRowNo=0; //当前行数
String sql = null;
String category = ""; /**
* 在TestNG中由@DataProvider(dataProvider = "name")修饰的方法
* 取SQL数据时,调用此类构造方法(此方法会得到列名并将当前行移到下以后)执行后,转发到
* TestNG自己的方法中去,然后由它们调用此类实现的hasNext()、next()方法
* 得到一行数据,然后返回给由@Test(dataProvider = "name")修饰的方法,如此
* 反复到数据读完为止
* @param tablename
*/
public SQLProvider(String tablename, String ... key) {
String ip = null;
String user = null;
String pw = null;
String db = null;
Properties prop = new Properties();
try {
File directory=new File(".");
String path=".src.test.resources.properties.";
String absolutePath=directory.getCanonicalPath()+path.replaceAll("\\.", Matcher.quoteReplacement("\\"))+"conf.properties";
absolutePath = absolutePath.replace("\\",File.separator).replace("/",File.separator);
InputStream in = new FileInputStream(absolutePath);
prop.load(in);
ip = prop.getProperty("SQLProviderIp").trim();
user = prop.getProperty("SQLProviderUser").trim();
pw = prop.getProperty("SQLProviderPw").trim();
db = prop.getProperty("SQLProviderDB").trim();
} catch (IOException e) {
e.printStackTrace();
}
if (key.length > 0){
for (int i = 0 ;i < key.length;i++){
category += "'"+key[i]+"',";
}
category = category.substring(0,category.length()-1);
sql = "select * from "+tablename+" where category in ("+category+")";
}else{
sql = "select * from " + tablename;
}
sqlList = getConnection(sql,ip,user,pw,db);
this.rowNum = sqlList.size();
} @Override
public boolean hasNext() {
// TODO Auto-generated method stub
if(rowNum==0||curRowNo>=rowNum){
return false;
}else{
return true;
}
}
/**
* 获取一组参数,即一行数据
*/
@Override
public Object[] next() {
// TODO Auto-generated method stub
Map<String,String> s=new TreeMap<String,String>();
s=sqlList.get(curRowNo);
Object[] d=new Object[1];
d[0]=s;
this.curRowNo++;
return d;
} @Override
public void remove() {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("remove unsupported");
} public static List<Map<String,String>> getConnection(String sql,String ip,String user,String pw,String db) {
Connection conn = null;
List<Map<String, String>> list = new ArrayList();
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://" + ip + "/"+db+"?user=" + user
+ "&password=" + pw
+ "&useUnicode=true&characterEncoding=UTF8";
conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
ResultSet result = stmt.executeQuery(sql);
while (result.next()) {
Map<String, String> m = new HashMap<String, String>();
for (int i = 2; i <= result.getMetaData().getColumnCount(); i++) {
String k = result.getMetaData().getColumnName(i);
String v = result.getString(i);
m.put(k,v);
}
list.add(m);
}
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
} return list; } /* public static void main (String []args) throws IOException {
ConnDB d = new ConnDB();
d.setDb("dataprovider");
d.setDbUrl("localhost");
d.setPwd("shen1986");
d.setUserName("root");
d.ConnDB();
System.out.println(getConnection("select * from zfk",d.getConn()));
}*/ }

数据库配置文件:

#DataProvider SQL Config
#----------------------------------------------------------------------------#
SQLProviderIp=10.253.43.98
SQLProviderUser=root
SQLProviderPw=qwER!@#$1234
SQLProviderDB=dataprovider

testng中使用:

  

@DataProvider(name="periodnum")
public Iterator<Object[]> periodnum() throws IOException {
return (Iterator<Object[]>)new SQLProvider("mmd","proidnum3","proidnum6","proidnum12");
}

  

mysql提供dataprovider的更多相关文章

  1. 利用Mysql提供的字符串方法查找字符串中某字符出现的次数

    有这么一个需求,查出分类中没有子分类的一级分类,脑海中首次出现的解决思路和这样的 先使用PHP查出所有的一级分类 递归查询一级分类是否有子分类 将没有子分类的一级分类汇总 但觉的这样处理太麻烦了,然后 ...

  2. mysql 去除重复 Select中DISTINCT关键字的用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,

      在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记 ...

  3. 基于MySQL提供的Yum repository安装MySQL5.6

    基于MySQL提供的Yum repository安装MySQL5.6 1:下载YUM包 1.1切换到root用户: 1)su - root 2)wget http://dev.mysql.com/ge ...

  4. MySQL提供了以下三种方法用于获取数据库对象的元数据

    MySQL提供了以下三种方法用于获取数据库对象的元数据: 1)show语句 2)从INFORMATION_SCHEMA数据库里查询相关表 3)命令行程序,如mysqlshow, mysqldump 用 ...

  5. MySQL权限系统(二). MySQL提供的特权 Privileges Provided by MySQL

    MySQL provides privileges that apply in different contexts and at different levels of operation: Adm ...

  6. Centos7借助docker部署mysql,提供远程链接服务

    Centos7 借助docker部署mysql,并提供远程连接服务 安装docker 运行docker 注意安装docker和运行docker的步骤很简单,可以参考我学习docker的笔记 docke ...

  7. MySQL提供的几种检索行数据的优化方式

    ICP(Index Condition Pushdown): 在MySQL5.6之前,存储引擎会通过遍历索引定位基表中 的行,然后返回给Server层,再去为这些数据进行WHERE后的条件过滤.MyS ...

  8. MySQL提供的错误日志中的错误级别一共有3个分别为:

    ERROR_LEVEL-->错误级别 WARNING_LEVEL-->警告级别 INFORMATION_LEVEL-->信息级别

  9. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

随机推荐

  1. 2016福州大学软件工程第五、六次团队作业-Alpha阶段成绩汇总

    1.本次作业成绩统计结果: 本次Alpha阶段团队作业公布如下: 表格说明: PE:贡献百分比 YS:演示评分(满分15分) BK:博客评分(满分15分) SH:事后诸葛亮环节(满分5分) P:个人分 ...

  2. iOS - 滑屏方案

    参考自:iOS开发- 通过ChildViewCotroller ViewController容器 产品增加新的版面,类似于网易新闻,百度新闻,腾讯新闻等新闻客户端首页多屏幕滑屏切换,找了一些开源代码研 ...

  3. layer弹出框小结

    1.layer.open() // 1.打开弹出层 layer.open({ type:1, //基本层类型 icon:, //图标 content:'请核对信息!', //内容 shade:0.3, ...

  4. PHP常用函数总结

    数学函数 abs() 求绝对值 传一个数字 会返回该值的绝对值 例如:abs(-1);//输出1 ceil() 进一法取整数 返回不小于 value 的下一个整数,value 如果有小数部分则进一位. ...

  5. Java 抓取网页中的内容【持续更新】

    背景:前几天复习Java的时候看到URL类,当时就想写个小程序试试,迫于考试没有动手,今天写了下,感觉还不错 内容1. 抓取网页中的URL 知识点:Java URL+ 正则表达式 import jav ...

  6. 同步(Synchronous)和异步(Asynchronous)

    目录 概念性 图示例 举个例子 回到顶部 概念性 同步和异步通常用来形容一次方法调用. 同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为. 异步方法调用更像一个消息传递,一旦开始 ...

  7. Apache Torque的使用

    这篇文章学习如何使用Torque,作为一个ORM(a tool that maps relational databases to java classes) 用Torque访问数据库,需要如下步骤 ...

  8. http://875880923.iteye.com/blog/1963400

    已经接触了一段时间的ACM(详见百度百科)了,每回刷杭电oj的题累了的时候,就喜欢去看Ranklist里面的排名,看看前面的牛人的格言,让自己有一点憧憬.有一天突然好奇杭电上的人做的总题数的数量与人数 ...

  9. JQuery动画队列问题

    在上网的时候经常会发现一些网站上发现一些bug,如导航菜单的动画队列问题(在同一个元素上执行多个动画,那么对于这个动画来说,后面的动画 会被放到动画队列中,等前面的动画执行完成了才会执行) 要解决问题 ...

  10. iOS音频解码表格