接口测试自动化|JDBC数据库操作

一、什么是数据库

数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。

二、JDBC

Java数据库连接(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端如何来访问数

据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。

三、DBUtils

commons-dbutils(简称DBUtils)是Apache组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,

简化了JDBC操作。

核心功能如下:

1、QueryRunner类中提供对sql语句操作的API

QueryRunner核心API:
执行update:包括insert update delete 插入、修改、删除操作
update(Connection conn, String sql, Object... params);
执行 select操作 查询操作 需要有返回结果参数
query(Connection conn, String sql, ResultSetHandler rsh, Object... params);

2、ResultSetHandler接口,用于定义select操作后,怎样封装结果集.

ResultSetHandler没有办法实例化,ResultSetHandler接口核心实现类,3大子类:

1)MapHandler 将结果集中第一条记录封装到Map中,即查询数据的第一条;

key就是字段名称,value就是字段值,即表的列名就是key,对应的值是value

2)MapListHandler 将结果集中每一条记录封装到Map中,key就是字段名称,value就是

字段值,再将这些Map封装到List集合中

3)ScalarHandler 用于单个数据,比如聚合函数的结果/具体字段
  • select count(*) from ...;

  • select reg_name from ...操作

3、使用步骤

1.导入依赖坐标
 
mysql 
mysql-connector-java 
5.1.38


 
commons-dbutils 
commons-dbutils 
1.6
 
2.定义JDBC工具类
public class JDBCUtils {
     //连接的工具方法
public static Connection getConnection() {
//1、定义数据库连接
     //Oracle:jdbc:oracle:thin:@localhost:1521:DBName
     //SqlServer:jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=DBName
     //MySql:jdbc:mysql://localhost:3306/DBName
      
     //api.lemonban.com/nmb—————数据库地址/数据库名字
     String url="jdbc:mysql://localhost:3306/DBName?useUnicode=true&characterEncoding=utf-8";
     String user="XXX";
     String password="123456";
​
//2、‼️‼️定义数据库连接对象‼️‼️
      //定义null,为了防止get不到值,返回提示未定义
      Connection conn = null;
      try {
        conn = DriverManager.getConnection(url, user,password);
        }catch (Exception e) {
        e.printStackTrace();
        }
        return conn; 
      } 
} 
3.使用示例
3.1 新增 update
QueryRunner qr = new QueryRunner();
​
String sql = "insert into tb_lemon_emp values(?,?,?)";
​
qr.update(conn,sql);
3.2 修改update
QueryRunner qr = new QueryRunner();
​
String sql = "update tb_lemon_emp set name=? where id = ?";
​
qr.update(conn,sql);
3.3 删除update
QueryRunner qr = new QueryRunner();
​
String sql = "delete from tb_lemon_emp where id = ?";
​
qr.update(conn,sql);
3.4 查询query: ScalarHandler、MapHandler、MapListHandler
1、MapHandler---->保存结果集中的第一条数据 map
QueryRunner qr = new QueryRunner();
String sql = "select * from member where id = 10";
Map map = qr.query(connection, sql, new MapHandler());
System.out.println(map);
//{id=10, reg_name=mengmeng, pwd=7BB4880520192D282D68659D9FF084DC, mobile_phone=15815541764}
2、MapListHandler---->保存结果集里的所有数据 集合
QueryRunner qr = new QueryRunner();
String sql = "select * from member where id < 10";
List> listMap = qr.query(connection, sql, new MapListHandler());
System.out.println(listMap);
//[{id=1, reg_name=, pwd=7BB4880520192D282D68659D9FF084DC, mobile_phone=15859383570}, 
// {id=2, reg_name=??, pwd=7BB4880520192D282D68659D9FF084DC, mobile_phone=15829383570}]
3、查询特定/某个字段/函数结果
QueryRunner qr = new QueryRunner();
//查询聚合函数
String sql = "select count(*) from member where id < 10";
Long data = qr.query(connection, sql, new ScalarHandler());
​
//查询某个字段,为了通用可以用Object接收
String sql = "select reg_name from member where id = 3455667";
Object data = qr.query(connection, sql, new ScalarHandler());
System.out.println(data);

四、数据库断言

数据库断言要考虑成本,比如注册用例,注册完要查询数据库中的每个字段对比么?——考虑到成本等等,直接看数据库有生成这条注册数据即可,即count为1

设计成json格式,因为要转成对象

{
 "select count(*) from member where mobile_phone='13329334510'; " : 1,
 "select count(*) from member where mobile_phone='{{mobile_phone3}}'; ":1
......
}

  • JDBC读取不同数据对应的返回类型:

    数据库数据源字段是:

  • 字符串类型———>实际JDBC读取的返回类型:字符串

  • 小数类型————>实际JDBC读取的返回类型:BigDecimal

  • 整数类型————>实际JDBC读取的返回类型:Long

你可能感兴趣的:(自动化,数据库)