麦粉社区
>
帖子详情

使用自定义JAVA数据源查询报Parameter not set异常

数据连接 发表于 2021-7-6 19:38
发表于 2021-7-6 19:38:30
4251260e43fc9b651e.png 7293560e43fea867e8.png
错误日志:
07-06 19:34:50  INFO faild(common.sql:101) - {"userName":"admin","userIp":"0:0:0:0:0:0:0:1","startTime":"2021-07-06 19:34:50:975","id":"7e288f24-c2ee-4710-84f3-91e7e4e0a7de","dataSource":"Inside HSQL","status":"faild","resId":"Iff808081017a7b527b52c178017a7b8b02e200d1","interval":8,"sql":"insert into datas(J0_name,J1_age) values(?,?)","faildMsg":"Parameter not set","stackMsg":"org.hsqldb.jdbc.JDBCUtil.sqlException(JDBCUtil.java:418)<br/>org.hsqldb.jdbc.JDBCUtil.sqlException(JDBCUtil.java:113)<br/>org.hsqldb.jdbc.JDBCUtil.sqlException(JDBCUtil.java:152)<br/>org.hsqldb.jdbc.JDBCPreparedStatement.checkParametersSet(JDBCPreparedStatement.java:4331)<br/>org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(JDBCPreparedStatement.java:4888)<br/>org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(JDBCPreparedStatement.java)<br/>smartbi.log.PreparedStatementWarp.executeUpdate(PreparedStatementWarp.java:178)<br/>smartbi.freequery.querydata.store.DBSQLResultStore.recalculateGridData(DBSQLResultStore.java:3178)<br/>smartbi.freequery.querydata.store.DBSQLResultStore.executeInJavaQuery(DBSQLResultStore.java:2597)<br/>smartbi.freequery.querydata.store.DBSQLResultStore.executeInDatabaseInner(DBSQLResultStore.java:1846)<br/>"}
07-06 19:34:51 ERROR exceptionToString(smartbi.framework.rmi.RMIServlet:344) - ClientReportService.getTotalRowsCountWithFuture error.
Java查询对象类错误
        at smartbi.freequery.querydata.store.DBSQLResultStore.executeInJavaQuery(DBSQLResultStore.java:2737)
        at ...(...)
        at smartbi.log.PreparedStatementWarp.executeUpdate(PreparedStatementWarp.java:178)
Caused by: java.sql.SQLException: Parameter not set
        at org.hsqldb.jdbc.JDBCUtil.sqlException(JDBCUtil.java:418)
        at org.hsqldb.jdbc.JDBCUtil.sqlException(JDBCUtil.java:113)
        at org.hsqldb.jdbc.JDBCUtil.sqlException(JDBCUtil.java:152)
        at org.hsqldb.jdbc.JDBCPreparedStatement.checkParametersSet(JDBCPreparedStatement.java:4331)
        at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(JDBCPreparedStatement.java:4888)
        at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(JDBCPreparedStatement.java)
        at smartbi.log.PreparedStatementWarp.executeUpdate(PreparedStatementWarp.java:178)
        at smartbi.freequery.querydata.store.DBSQLResultStore.recalculateGridData(DBSQLResultStore.java:3178)
        at smartbi.freequery.querydata.store.DBSQLResultStore.executeInJavaQuery(DBSQLResultStore.java:2597)
        at smartbi.freequery.querydata.store.DBSQLResultStore.executeInDatabaseInner(DBSQLResultStore.java:1846)
        at smartbi.freequery.querydata.store.DBSQLResultStore.executeInDatabase(DBSQLResultStore.java:1837)
        at smartbi.freequery.querydata.store.DBSQLResultStore.ensureGridDataInMemDB(DBSQLResultStore.java:7181)
        at smartbi.freequery.querydata.store.DBSQLResultStore.getDataRows(DBSQLResultStore.java:931)
        at smartbi.freequery.report.SimpleReportBO.getTotalRows(SimpleReportBO.java:1342)
        at smartbi.freequery.client.simplereport.ClientReportService.getTotalRowsCount(ClientReportService.java:3284)
        at smartbi.freequery.client.simplereport.ClientReportService.getTotalRowsCountWithFuture(ClientReportService.java:3262)
        at sun.reflect.GeneratedMethodAccessor730.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at smartbi.framework.rmi.ClientService.execute(Smartbi:118)
        at smartbi.framework.rmi.RMIServlet.processExecute(RMIServlet.java:230)
        at smartbi.framework.rmi.RMIServlet.doPost(RMIServlet.java:168)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at smartbi.extension.ExtensionFilter$2.doFilter(ExtensionFilter.java:163)
        at smartbi.extension.ExtensionFilter$1.doFilter(ExtensionFilter.java:152)
        at smartbi.security.patch.PatchFilter.doFilter(PatchFilter.java:70)
        at smartbi.extension.ExtensionFilter$1.doFilter(ExtensionFilter.java:152)
        at smartbi.extension.ExtensionFilter.doFilterInternal(ExtensionFilter.java:175)
        at smartbi.extension.ExtensionFilter.doFilter(ExtensionFilter.java:64)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at smartbi.framework.rmi.TransactionFilter.doFilter(Smartbi:80)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at smartbi.freequery.filter.GZIPFilter.doFilter(GZIPFilter.java:263)
        at smartbi.freequery.filter.Filter.doFilter(Filter.java:36)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at smartbi.freequery.filter.CheckIsLoggedFilter.doFilter(CheckIsLoggedFilter.java:209)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at smartbi.freequery.filter.TraceFilter.doFilter(TraceFilter.java:127)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at smartbi.framework.RedisSessionFilter.doFilter(Smartbi:125)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:123)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: org.hsqldb.HsqlException: Parameter not set
        at org.hsqldb.error.Error.error(Error.java:137)
        at org.hsqldb.error.Error.error(Error.java:107)
        ... 63 more


谁能帮看看这是什么问题,自己个性化的Java查询,不知道少了哪一步,出现错误后多点击几次刷新后,就获取成功了
6164360e44088376f0.png
发表于 2021-7-6 19:41:21
麻烦帮看看Java查询类:


  1. import com.alibaba.fastjson.JSON;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.epoint.smartbi.gx.util.OkHttpUtil;
  5. import okhttp3.OkHttpClient;
  6. import smartbi.framework.IModule;
  7. import smartbi.freequery.metadata.IJavaQueryData;
  8. import smartbi.freequery.metadata.JavaQueryConfig;
  9. import smartbi.freequery.metadata.JavaQueryOutputField;
  10. import smartbi.freequery.metadata.JavaQueryParameter;
  11. import smartbi.freequery.querydata.CellData;
  12. import smartbi.freequery.querydata.GridData;
  13. import smartbi.util.StringUtil;
  14. import smartbi.util.ValueType;

  15. import java.util.*;

  16. /**
  17. * smartbi JAVA查询扩展 自定义JSON请求
  18. */
  19. public class JsonQuery implements IJavaQueryData,IModule, IJavaQueryData.ISimpleData {

  20.     private static JsonQuery instance;

  21.     /**
  22.      * 配置参数
  23.      */
  24.     private final Map<String, JavaQueryConfig> configs = new LinkedHashMap<>();
  25.     /**
  26.      * 结果集字段定义
  27.      */
  28.     private Map<String, JavaQueryOutputField> outputFields = new HashMap<>();
  29.     /**
  30.      * 请求参数字段定义
  31.      */
  32.     private Map<String, JavaQueryParameter> requestParams = new HashMap<>();
  33.     /**
  34.      * 数据总数
  35.      */
  36.     private Integer total;

  37.     public static JsonQuery getInstance() {
  38.         if (instance == null) {
  39.             instance = new JsonQuery();
  40.         }
  41.         return instance;
  42.     }

  43.     public JsonQuery() {
  44.         System.out.println("JsonQuery");
  45.      }

  46.     /**
  47.      * 获取Java查询需要的配置信息
  48.      */
  49.     @Override
  50.     public List<JavaQueryConfig> getConfigs() {
  51.         System.out.println("getConfigs");
  52.         if (configs.size() == 0) {
  53.             setConfig("RequestUrl", "请求URL", "请求输入请求URL", "http://", true);
  54.             setConfig("RequestMethod", "请求方法", "限定:POST或GET", "POST", true);
  55.             setConfig("RequestParams", "请求参数", "请输入请求参数,压缩JSON格式,例子:{'name':'张三','age':'30','areacode':'450100'}", "{"name":"张三","age":"30","areacode":"450100"}", false);
  56.         }
  57.         return new ArrayList<>(configs.values());
  58.     }

  59.     /**
  60.      * 添加一个配置项
  61.      *
  62.      * @param name         名称
  63.      * @param alias        别名
  64.      * @param desc         描述
  65.      * @param defaultValue 默认值
  66.      * @param isNotNull    是否允许为空
  67.      */
  68.     private void setConfig(String name, String alias, String desc, String defaultValue, boolean isNotNull) {
  69.         JavaQueryConfig p = new JavaQueryConfig();
  70.         p.setName(name);
  71.         p.setAlias(alias);
  72.         p.setDesc(desc);
  73.         p.setValue(defaultValue);
  74.         p.setNotNull(isNotNull);
  75.         configs.put(name, p);
  76.     }


  77.     private void setParam(String name, String alias, String desc, String defaultValue, boolean isNull) {
  78.         JavaQueryParameter p = new JavaQueryParameter();
  79.         p.setId(name);
  80.         p.setName(name);
  81.         p.setAlias(alias);
  82.         p.setDesc(desc);
  83.         p.setValue(defaultValue);
  84.         p.setDataType(ValueType.STRING);
  85.         p.setNullable(isNull);
  86.         requestParams.put(name, p);
  87.     }

  88.     private void addOutField(String name, String alias) {
  89.         JavaQueryOutputField f = new JavaQueryOutputField();
  90.         f.setId(name);
  91.         f.setName(name);
  92.         f.setAlias(alias);
  93.         f.setDataType(ValueType.STRING);
  94.         outputFields.put(name, f);
  95.     }


  96.     /**
  97.      * 从保存的字符串中恢复配置信息
  98.      *
  99.      * @param configStr 配置字符串
  100.      */
  101.     @Override
  102.     public void loadConfigs(String configStr) {
  103.         System.out.println("loadConfigs");
  104.         if (StringUtil.isNullOrEmpty(configStr)) {
  105.             return;
  106.         }
  107.         JSONObject obj = JSONObject.parseObject(configStr);
  108.         setConfig("RequestUrl", "RequestUrl", "", obj.getString("RequestUrl"), false);
  109.         setConfig("RequestMethod", "RequestMethod", "", obj.getString("RequestMethod"), false);
  110.         setConfig("RequestParams", "RequestParams", "", obj.getString("RequestParams"), false);
  111.     }

  112.     /**
  113.      * 保存配置信息
  114.      *
  115.      * @return 返回配置字符串
  116.      */
  117.     @Override
  118.     public String saveConfigs() {
  119.         System.out.println("saveConfigs");
  120.         JSONObject json = new JSONObject();
  121.         if (configs.containsKey("RequestMethod")) {
  122.             json.put("RequestMethod", configs.get("RequestMethod").getValue());
  123.         }
  124.         if (configs.containsKey("RequestUrl")) {
  125.             json.put("RequestUrl", configs.get("RequestUrl").getValue());
  126.         }
  127.         if (configs.containsKey("RequestParams")) {
  128.             json.put("RequestParams", configs.get("RequestParams").getValue());
  129.         }
  130.         return json.toJSONString();
  131.     }

  132.     /**
  133.      * 设置配置信息
  134.      *
  135.      * @param key   名称
  136.      * @param value 配置值
  137.      */
  138.     @Override
  139.     public void setConfigValue(String key, String value) {
  140.         System.out.println("setConfigValue");
  141.         if (configs.containsKey(key)) {
  142.             configs.get(key).setValue(value);
  143.         }
  144.         else {
  145.             setConfig(key, key, "", value, false);
  146.         }
  147.     }

  148.     /**
  149.      * 设置配置信息
  150.      */
  151.     @Override
  152.     public void setConfigValues(Map<String, String> configValues) {
  153.         System.out.println("setConfigValues");
  154.         for (Map.Entry<String, String> config : configValues.entrySet()) {
  155.             configs.get(config.getKey()).setValue(config.getValue());
  156.         }
  157.     }

  158.     /**
  159.      * 根据配置信息初始化Java查询对象
  160.      * 此方法初始化 字段
  161.      */
  162.     @Override
  163.     public void init() {
  164.         // 判断是否有初始化标识
  165.         if (configs.containsKey("initData")) {
  166.             // 查询数据、字段
  167.             loadDatas(1, 10);
  168.         }
  169.         System.out.println("init");
  170.     }

  171.     /**
  172.      * 关闭Java查询对象,关闭必要的资源
  173.      */
  174.     @Override
  175.     public void close() {
  176.         System.out.println("close");
  177.     }

  178.     /**
  179.      * 返回参数对象
  180.      */
  181.     @Override
  182.     public List<JavaQueryParameter> getParameters() {
  183.         System.out.println("getParameters");
  184.         if (requestParams.size() == 0) {
  185.             if (configs.containsKey("RequestParams")) {
  186.                 JSONObject object = JSON.parseObject(configs.get("RequestParams").getValue());
  187.                 for (String key : object.keySet()) {
  188.                     setParam(key, key, "", "", false);
  189.                 }
  190.             }
  191.         }

  192.         if (configs.containsKey("savedata")) {
  193.             requestParams.clear();
  194.             JSONObject jsonObject = JSON.parseObject(configs.get("RequestParams").getValue());
  195.             for (String key : jsonObject.keySet()) {
  196.                 setParam(key, key, "", "", false);
  197.             }
  198.         }
  199.         return new ArrayList<>(requestParams.values());
  200.     }

  201.     /**
  202.      * 设置参数值
  203.      */
  204.     @Override
  205.     public void setParameterValue(String id, String value, String displayValue) {
  206.         System.out.println("setParameterValue");
  207.         if (requestParams.containsKey(id)) {
  208.             requestParams.get(id).setValue(value);
  209.         }
  210.         else {
  211.             setParam(id, id, "", value, true);
  212.         }
  213.     }

  214.     /**
  215.      * 返回Java查询的输出字段
  216.      */
  217.     @Override
  218.     public List<JavaQueryOutputField> getOutputFields() {
  219.         System.out.println("getOutputFields");
  220.         // 判断是否结果保存操作
  221.         if (configs.containsKey("savedata")) {
  222.             outputFields.clear();
  223.             JSONArray jsonArray = JSON.parseArray(configs.get("jsonfields").getValue());
  224.             // 转成outputFields
  225.             if (!jsonArray.isEmpty()) {
  226.                 for (int i = 0; i < jsonArray.size(); i++) {
  227.                     addOutField(jsonArray.getJSONObject(i).getString("name"), jsonArray.getJSONObject(i).getString("name"));
  228.                 }
  229.             }
  230.         }
  231.         return new ArrayList<>(outputFields.values());
  232.     }

  233.     /**
  234.      * 测试连接并加载字段
  235.      *
  236.      * @return
  237.      */
  238.     public String testConnect(Map<String, String> config) {
  239.         try {
  240.             JSONObject result = new JSONObject();
  241.             OkHttpClient client = new OkHttpClient();
  242.             // 获取请求地址
  243.             String url = config.get("RequestUrl");
  244.             String params = config.get("RequestParams");
  245.             String method = config.get("RequestMethod");

  246.             JSONObject object = JSON.parseObject(params);
  247.             object.put("pageFrom", "1");
  248.             object.put("pageSize", "10");

  249.             // 判断请求方法
  250.             String res;
  251.             if ("post".equalsIgnoreCase(method)) {
  252.                 res = OkHttpUtil.getInstance().postJson(url, object);
  253.             }
  254.             else if ("get".equalsIgnoreCase(method)) {
  255.                 res = OkHttpUtil.getInstance().getData(url, object);
  256.             }
  257.             else {
  258.                 throw new RuntimeException("请求方法未定义,限定 POST GET");
  259.             }
  260.             if (!StringUtil.isNullOrEmpty(res)) {
  261.                 return res;
  262.             }
  263.         }
  264.         catch (Exception e) {
  265.             throw new RuntimeException(e);
  266.         }
  267.         return "";
  268.     }

  269.     /**
  270.      * 加载数据
  271.      *
  272.      * @param from
  273.      * @param count
  274.      * @return
  275.      */
  276.     public String loadDatas(int from, int count) {
  277.         requestParams = new HashMap<>();
  278.         outputFields = new HashMap<>();
  279.         try {
  280.             OkHttpClient client = new OkHttpClient();
  281.             // 获取请求地址
  282.             String url = configs.get("RequestUrl").getValue();
  283.             String params = configs.get("RequestParams").getValue();
  284.             String method = configs.get("RequestMethod").getValue();
  285.             JSONObject object = new JSONObject();
  286.             if (!StringUtil.isNullOrEmpty(params)) {
  287.                 object = JSON.parseObject(params);
  288.                 if (object != null) {
  289.                     for (String s : object.keySet()) {
  290.                         setParam(s, s, s, "", true);
  291.                     }
  292.                 }
  293.             }
  294.             object.put("pageFrom", from);
  295.             object.put("pageSize", count);
  296.             // 判断请求方法
  297.             String res;
  298.             if ("post".equalsIgnoreCase(method)) {
  299.                 res = OkHttpUtil.getInstance().postJson(url, object);
  300.             }
  301.             else if ("get".equalsIgnoreCase(method)) {
  302.                 res = OkHttpUtil.getInstance().getData(url, object);
  303.             }
  304.             else {
  305.                 throw new RuntimeException("请求方法未定义,限定 POST GET");
  306.             }
  307.             if (!StringUtil.isNullOrEmpty(res)) {
  308.                 // 解析结果,识别输出参数
  309.                 Object parse = JSON.parse(res);
  310.                 if (parse instanceof JSONObject) {
  311.                     JSONObject jsonObject = (JSONObject) parse;
  312.                     Integer total = jsonObject.getInteger("total");
  313.                     if (total != null) {
  314.                         this.total = total;
  315.                     }
  316.                     JSONArray list = jsonObject.getJSONArray("list");
  317.                     if (list != null && !list.isEmpty()) {
  318.                         Set<String> keys = new HashSet<>();
  319.                         // 循环每个数组,检查key
  320.                         for (int i = 0; i < list.size(); i++) {
  321.                             JSONObject row = list.getJSONObject(i);
  322.                             row.keySet().forEach(m -> keys.add(m));
  323.                         }
  324.                         if (keys.size() > 0) {
  325.                             for (String key : keys) {
  326.                                 addOutField(key, key);
  327.                             }
  328.                         }
  329.                     }
  330.                 }
  331.                 else if (parse instanceof JSONArray) {
  332.                     JSONArray list = (JSONArray) parse;
  333.                     if (list != null && !list.isEmpty()) {
  334.                         Set<String> keys = new HashSet<>();
  335.                         // 循环每个数组,检查key
  336.                         for (int i = 0; i < list.size(); i++) {
  337.                             JSONObject row = list.getJSONObject(i);
  338.                             row.keySet().forEach(m -> keys.add(m));
  339.                         }
  340.                         if (keys.size() > 0) {
  341.                             for (String key : keys) {
  342.                                 addOutField(key, key);
  343.                             }
  344.                         }
  345.                     }
  346.                 }
  347.                 return res;
  348.             }
  349.         }
  350.         catch (Exception e) {
  351.             throw new RuntimeException(e);
  352.         }
  353.         return "";
  354.     }

  355.     /**
  356.      * 获取指定行的数据
  357.      */
  358.     @Override
  359.     public GridData getGridData(int from, int count) {
  360.         System.out.println("getGridData");
  361.         try {
  362.             GridData d = new GridData();
  363.             List<List<CellData>> datas = new ArrayList<>();
  364.             // 数据字段
  365.             List<String> headers = new ArrayList<>();
  366.             for (JavaQueryOutputField f : outputFields.values()) {
  367.                 headers.add(f.getName());
  368.             }
  369.             // 请求数据
  370.             String responseData = loadDatas(from, count);
  371.             // 数据结果
  372.             if (!StringUtil.isNullOrEmpty(responseData)) {
  373.                 // 解析结果,识别输出参数
  374.                 Object parse = JSON.parse(responseData);
  375.                 if (parse instanceof JSONObject) {
  376.                     JSONObject jsonObject = (JSONObject) parse;
  377.                     Integer total = jsonObject.getInteger("total");
  378.                     if (total != null) {
  379.                         this.total = total;
  380.                     }
  381.                     JSONArray list = jsonObject.getJSONArray("list");
  382.                     if (list != null && !list.isEmpty()) {
  383.                         Set<String> keys = new HashSet<>();
  384.                         // 循环每个数组,检查key
  385.                         for (int i = 0; i < list.size(); i++) {
  386.                             LinkedHashMap<String, CellData> row = new LinkedHashMap<>();
  387.                             JSONObject object = list.getJSONObject(i);
  388.                             for (String header : headers) {
  389.                                 CellData cell = new CellData();
  390.                                 cell.setStringValue(object.getString(header));
  391.                                 cell.setValue(object.getString(header));
  392.                                 row.put(header, cell);
  393.                             }
  394.                             datas.add(new ArrayList<CellData>(row.values()) {
  395.                             });
  396.                         }
  397.                     }
  398.                 }
  399.                 else if (parse instanceof JSONArray) {
  400.                     JSONArray list = (JSONArray) parse;
  401.                     if (list != null && !list.isEmpty()) {
  402.                         this.total = list.size();
  403.                         Set<String> keys = new HashSet<>();
  404.                         // 循环每个数组,检查key
  405.                         for (int i = 0; i < list.size(); i++) {
  406.                             LinkedHashMap<String, CellData> row = new LinkedHashMap<>();
  407.                             JSONObject object = list.getJSONObject(i);
  408.                             for (String header : headers) {
  409.                                 CellData cell = new CellData();
  410.                                 cell.setStringValue(object.getString(header));
  411.                                 cell.setValue(object.getString(header));
  412.                                 row.put(header, cell);
  413.                             }
  414.                             datas.add(new ArrayList<CellData>(row.values()));
  415.                         }
  416.                     }
  417.                 }
  418.             }
  419.             d.setStringHeaders(headers);
  420.             d.setData(datas);
  421.             d.setTotalRowsCount(total);
  422.             return d;
  423.         }
  424.         catch (Exception e) {
  425.             throw new RuntimeException(e);
  426.         }
  427.     }

  428.     /**
  429.      * 返回总行数,返回Integer.MAX_VALUE表示未知总行数
  430.      */
  431.     @Override
  432.     public int getRowCount() {
  433.         System.out.println("getRowCount");
  434.         return total == null ? Integer.MAX_VALUE : total;
  435.     }

  436.     @Override
  437.     public void activate() {
  438.         System.out.println("activate");
  439.     }
  440. }
复制代码
回复

使用道具 举报

发表于 2021-7-11 14:15:36
本帖最后由 zhudanyan 于 2021-7-12 15:30 编辑

你的这个参数有没有绑定呀 3256760ebecf26a675.png
回复

使用道具 举报

发表于 2021-7-12 15:35:28
可以发回相关资源(扩展包和java类文件),这边测试一下吗?
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

3回帖数 0关注人数 3094浏览人数
最后回复于:2021-7-12 15:35
快速回复 返回顶部 返回列表