首页 > 数据库 >java接口自动化系列(07):解析并执行初始化sql

java接口自动化系列(07):解析并执行初始化sql

时间:2024-01-03 14:00:57浏览次数:36  
标签:jdbc java String sql import logger public 07

 

添加pom依赖

连接操作数据库

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

 

解析初始化sql(json数组)

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
        </dependency>

  

添加配置文件

数据库连接配置jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.117.180:3309/gift?useUnicode=true&characterEncoding=utf-8&useSSL=true
jdbc.username=root
jdbc.password=test

 

添加实体类

sql

package com.qzcsbj.autotest.entity;

/**
 * @公众号 : 全栈测试笔记
 * @博客 : www.cnblogs.com/uncleyong
 * @微信 : ren168632201
 * @描述 : <>
 */
public class Sql {
    private String sqlNo;
    private String sql;

    public String getSqlNo() {
        return sqlNo;
    }

    public void setSqlNo(String sqlNo) {
        this.sqlNo = sqlNo;
    }

    public String getSql() {
        return sql;
    }

    public void setSql(String sql) {
        this.sql = sql;
    }

    @Override
    public String toString() {
        return "Sql{" +
                "sqlNo='" + sqlNo + '\'' +
                ", sql='" + sql + '\'' +
                '}';
    }
}

 

添加、修改工具类

修改工具类VariableUtil.java,添加替换变量的方法

// 替换变量
    public static String variableSubstitution(String parameters) {
        // 获取所有变量名
        Set<String> names = variableMap.keySet();
        for (String name : names) {
            if (parameters.contains(name)){
                parameters = parameters.replace(name,variableMap.get(name));
            }
        }
        return parameters;
    }

  

添加JDBCUtil.java

package com.qzcsbj.autotest.utils;

import org.apache.log4j.Logger;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.HashMap;
import java.util.Properties;

/**
 * @公众号 : 全栈测试笔记
 * @博客 : www.cnblogs.com/uncleyong
 * @微信 : ren168632201
 * @描述 : <>
 */
public class JDBCUtil {
    public static Logger logger = Logger.getLogger(JDBCUtil.class);

    public static Properties properties = new Properties();
    static {
        // 解析jdbc.properties获取数据库配置信息
        try {
            InputStream in = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
            properties.load(in);
        } catch (IOException e) {
            logger.info("解析发生异常。");
            e.printStackTrace();
        }
    }

    public static void query(String sql){
        HashMap<String, Object> stringObjectHashMap = null;
        try {
            // 1、调用方法,获取连接
            Connection connection = getConnection();
            // 2、获取PreparedStatement
            Statement statement = connection.createStatement();
            // 3、调用查询方法,执行查询,返回结果集(ResultSet)
            ResultSet resultSet = statement.executeQuery(sql);
            // 获取查询相关的信息
            ResultSetMetaData metaData = resultSet.getMetaData();
            // 获取sql中有多少个查询字段
            int columnCount = metaData.getColumnCount();
            // System.out.println("查询字段数为:" + columnCount);

            stringObjectHashMap = new HashMap<String, Object>();
            // 从结果集获取查询数据:循环取出每个查询字段
            while (resultSet.next()){
                for (int i = 1; i <= columnCount; i++) {
                    String columnLabel = metaData.getColumnLabel(i);
                    String columnValue = resultSet.getObject(columnLabel).toString();
                    stringObjectHashMap.put(columnLabel, columnValue);
                }
            }
            logger.info("查询结果:" + stringObjectHashMap);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void nonQuery(String sql){
        try {
            // 1、调用方法,获取连接
            Connection connection = getConnection();
            // 2、获取statement
            Statement statement = connection.createStatement();
            // 3、调用查询方法,执行查询,返回结果集(ResultSet)
            int n = statement.executeUpdate(sql);
            if (n>0){
                logger.info("操作成功数据条数:【" + n + "】");
            } else {
                logger.info("操作成功数据条数:【0】");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 获取数据库连接
    public static Connection getConnection() throws SQLException {
        String url = properties.getProperty("jdbc.url");
        String username = properties.getProperty("jdbc.username");
        String password = properties.getProperty("jdbc.password");
        Connection connection = DriverManager.getConnection(url, username, password);
        return connection;
    }
}

  

添加InitSqlUtil.java

package com.qzcsbj.autotest.utils;

import com.alibaba.fastjson.JSONObject;
import com.qzcsbj.autotest.entity.Sql;
import org.apache.log4j.Logger;
import java.util.List;

/**
 * @公众号 : 全栈测试笔记
 * @博客 : www.cnblogs.com/uncleyong
 * @微信 : ren168632201
 * @描述 : <>
 */
public class InitSqlUtil {
    public static Logger logger = Logger.getLogger(InitSqlUtil.class);

    public static void doInitSql(String initSql) {
        // 初始化sql解析为对象
        List<Sql> sqls = JSONObject.parseArray(initSql, Sql.class);
        // 遍历获取sql,并执行
        for (Sql sql_ : sqls) {
            String sqlNo = sql_.getSqlNo();
            String sql = sql_.getSql().trim();
            // logger.info("获取到的sql:sqlNo="+sqlNo+", sql=" + sql);
            String prefix = sql.split(" ")[0].trim().toLowerCase();
            if (prefix.startsWith("select")){
                logger.info("=====执行select语句:" + sql_);
                // 执行查询sql,获取执行结果
                JDBCUtil.query(sql);
            } else if (prefix.startsWith("delete")){
                logger.info("=====执行delete语句:" + sql_);
                JDBCUtil.nonQuery(sql);
            } else if (prefix.startsWith("update")){
                logger.info("=====执行update语句:" + sql_);
                JDBCUtil.nonQuery(sql);
            } else if (prefix.startsWith("insert")){
                logger.info("=====执行insert语句:" + sql_);
                JDBCUtil.nonQuery(sql);
            } else {
                logger.info("=====sql语句【"+ sql_ +"】不符合规范");
            }
        }
    }
}

 

测试方法中执行初始化sql

// 执行初始化sql
        if (initSql!=null && initSql.trim().length()>0){
            // 替换sql中的参数
            initSql = VariableUtil.variableSubstitution(initSql);

            // 调用方法
            InitSqlUtil.doInitSql(initSql);
        }

 

结果

运行testng.xml文件,可以看到操作数据库成功

java接口自动化系列(07):解析并执行初始化sql_bc

 

__EOF__

本文作者:持之以恒(韧)
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等



标签:jdbc,java,String,sql,import,logger,public,07
From: https://blog.51cto.com/qzcsbj/9084439

相关文章

  • java接口自动化系列(03):创建自动化框架项目
     创建maven项目 输入GroupId:com.qzcsbj输入ArtifactId:apiJavaAutoTest 输入Projectname:apiJavaAutoTest 配置maven修改Mavenhomedirectory和Usersettingsfile(settings.xml文件配置了阿里云镜像地址) 添加pom依赖testng<!--https://mvnrepository.com/artifact/org.testng......
  • 无涯教程-Java 正则 - X{n}+ 匹配函数
    PossesiveQuantifier[X{n}+]与存在的X个精确匹配n次。X{n}+-示例packagecom.learnfk;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassPossesiveQuantifierDemo{privatestaticfinalStringREGEX="T{2}+";privatestat......
  • postgresql socket读数据返回-1
    如下所示:{n=secure_raw_read(port,ptr,len);//pg的socket读是非阻塞读,所以返回-1不影响,后面等到socket可读之后继续读。见下文socket返回值解释waitfor=WL_SOCKET_READABLE;}/*Inblockingmode,waituntilthesocketisready*/i......
  • 无涯教程-Java 正则 - X++ 匹配函数
    PossesiveQuantifier[X++]与X匹配一次或多次。X++-示例packagecom.learnfk;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassPossesiveQuantifierDemo{privatestaticfinalStringREGEX="T++";privatestaticfinalS......
  • java调用rust 共享库的一些方法简单说明
    java与rust的调用,核心还是基于jni进行处理,rust社区实现了不少方便的工具可以提供rust到c的处理(比如生成头文件)以下是整理的一些资料,方便学习几个不错的包jni-rs 目前还在活跃更新中,同时github的start也比较多,同时不少开源软件在用,比如questdbrobusta 一个比较新的项目,使用......
  • 无涯教程-Java 正则 - X*+ 匹配函数
    PossesiveQuantifier[X*+]匹配X出现零次或多次。X*+-示例packagecom.learnfk;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassPossesiveQuantifierDemo{privatestaticfinalStringREGEX="T*+";privatestaticfinal......
  • javascript的Map和Set概念以及区别和使用场景
    Map和SetJavaScript的默认对象表示方式{}可以视为其他语言中的Map或Dictionary的数据结构,即一组键值对。但是JavaScript的对象有个小问题,就是键必须是字符串。但实际上Number或者其他数据类型作为键也是非常合理的。MapMap是一组键值对的结构,具有极快的查找速度。举个例子,假设要根......
  • 25个JavaScript One-Liner让你更专业
    今天我们分享一些单行代码技巧,了解这些技巧,可以提升我们的工作效率,现在,我们一起来看一下今天的这些单行代码技巧吧。数组1.检查变量是否是数组constisArray=Array.isArray(arr);constisArray=arrinstanceofArray;2.数字数组的和constsum=(arr)=>arr.reduce((a,b)......
  • 基于java的奶茶店管理系统的设计与实现
    一、 本课题的意义与概况是针对奶茶行业的经营特点及行业发展需求,专门为奶茶店经营管理量身定做的专业的奶茶店管理系统,为奶茶行业发展提供助力。系统集基础数据、原材料的入库、入库退货、今日领取原料数量、今日剩余退回原料数量、前台消费、购物订单、商品结账、财务管理等功......
  • 无涯教程-Java 正则 - X?+ 匹配函数
    PossesiveQuantifier匹配一次存在的X或根本不存在的X。X?+-示例以下示例显示了所有格修饰符的用法。packagecom.learnfk;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassPossesiveQuantifierDemo{privatestaticfinalStringRE......