一、java.util.IllegalFormatConversionException: d != java.lang.String
定位到报错代码:
trade_order传入的不是int类型,而是string类型,将%d换成%s就可以解决。
二、 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
这是越界异常,但不是数组越界异常,数组越界异常报错:java.lang.ArrayIndexOutOfBoundsException
查阅相关资料是List集合没有做非空校验,重新看代码,是SQL查询的结果为空,因为当时传入的order_id不正确,后期传入正确的order_id使得查询出结果,就不报错了。
这是写自动化case,如果查询结果为空就代表异常了,case执行失败,但QA在代码CR时应该看RD的代码中是否有查询的非空判断,防止异常情况出现。
final String SELECT_PAY_TRANSACTION_PAYMENT_TRADE_ORDERS ="SELECT * from `pay_transaction_payment_trade_orders` where `order_id` = '%s'";
> JSONObject paycoreOrders =
> selectDbData(SELECT_PAY_TRANSACTION_PAYMENT_TRADE_ORDERS, order_id);
三、Unknown column ‘XXX’ in ‘where clause’
从表面理解是列不存在,但经排查并不是列不存在,而是由于拼凑sql语句时对字符类型数据没有用引号引起来造成的。
原sql:select * from pay_accounting_payment_trade_order
where pay_no
= %s;
由于pay_no传入的是String类型,所以将s%用引号引起来问题就解决了。
select * from pay_accounting_payment_trade_order
where pay_no
= ‘%s’;
四、如何从调用接口获取返回值中的指定字段
1、首先需要知道调用接口的返回值时什么类型的,然后定义一个变量去接收该接口的返回值。
2、然后用变量. 的指定get方法,获取指定的返回值字段,定义一个变量接收返回的字段;
3、最后return 第2步的变量;
4、最后调用图中提现接口时,就会返回想要的pay_no了。
五、如何获取返回值date中的指定字段
此代码想要获取返回值中date里面的pay_no;返回值:
首先先获取到返回值,然后再用get方法从返回值里取date,再从date里用get方法获取到指定的pay_no。
{
“status”: 0,
“msg”: “”,
“data”: {
“pay_no”: “NW20200707140639242494envqae2116”,
“trade_order”: “12343344332332”
} }
private String transferWithdrawUrl( String order_id, Integer amt) throws Exception {
JSONObject withdrawParamJSON = JSONObject.parseObject(requestStrOrder);
withdrawParamJSON.getJSONObject("data").fluentPut("amt", amt).fluentPut("order_id", order_id);
JSONObject ob= sendRequest(withdrawParamJSON, URL_OPAYMENT_TransferWithdrawUrl + getDate() + "&logid=" +
RandomUtil.getRandom(24, false), null);
JSONObject data = ob.getJSONObject("data");
String payNo = data.getString("pay_no");
return payNo;
}
六、java.util.MissingFormatArgumentException: Format specifier ‘%d’
SQL期望输入一个值,实际并没有传值,看下问题代码:
final String UPDATE_WALLET1 ="UPDATE `ymtpay`.`wallet` set balance = %d WHERE (`account_id` = (SELECT id FROM `ymtpay`.`pay_accounts` WHERE `customer_id` = '655758969785182' ) and detailed_account_code='2203003')";
只要使用SQL时传递一个值,就可以解决问题。