NC后台sql语句执行的方式
### NC后台SQL语句执行方式详解 在NC系统中,SQL语句的执行是系统管理和数据操作的关键环节之一。根据给定的文件信息,本文将详细介绍三种不同的SQL执行方式及其应用场景,帮助读者更好地理解NC后台如何高效地处理SQL查询。 #### 一、`Private`包下的SQL执行方式 在`Private`包下,可以使用`BaseDAO`类来执行SQL语句。这种方式主要适用于业务逻辑较为复杂的场景,需要从数据库中获取大量数据的情况。 **具体步骤:** 1. **创建BaseDAO实例:** ```java BaseDAO baseDAO = new BaseDAO(); ``` 2. **构造SQL语句:** ```java String sql = "SELECT * FROM pm_pa_billinfo WHERE vbillinfono='" + e.getValue() + "'"; ``` 3. **执行SQL语句并获取结果集:** ```java List list = (List) baseDAO.executeQuery(sql, new BeanListProcessor(PaBillinfoApplyVO.class)); Object[] billinfo = list.toArray(); ``` **注意点:** - `BeanListProcessor`用于处理查询结果,将其转换为`PaBillinfoApplyVO`对象列表。 - 此方法适合于返回多个结果的情况。 #### 二、`ClientUI`包下的SQL执行方式 对于`ClientUI`包下的代码,可以使用`NCLocator`和`IUAPQueryBS`接口来执行SQL查询。 **具体步骤:** 1. **获取IUAPQueryBS实例:** ```java IUAPQueryBS iBS = NCLocator.getInstance().lookup(IUAPQueryBS.class); ``` 2. **执行SQL语句并处理结果:** ```java Integer detailNumI = (Integer) iBS.executeQuery(sql.toString(), new ColumnProcessor()); int detailNum = detailNumI.intValue(); ``` 或者 ```java IUAPQueryBS queryBS = (IUAPQueryBS) NCLocator.getInstance().lookup(nc.itf.uap.IUAPQueryBS.class); List list_scy = (List) queryBS.executeQuery(sql, new ArrayListProcessor()); String value = ((Object[]) list_scy.get(m))[3].toString(); ``` **注意点:** - `NCLocator`用于获取系统中的服务实例。 - `ColumnProcessor`和`ArrayListProcessor`分别用于处理不同类型的查询结果。 - 第一种方式更适合处理单一结果,而第二种方式则更适用于返回列表数据。 #### 三、特定业务场景下的SQL执行方式 针对某些特定的业务需求,如处理付款申请单等复杂业务逻辑时,可以直接调用`getBusiDelegator()`方法来执行SQL查询。 **具体步骤:** 1. **获取当前VO对象:** ```java PayBillVO billVO = (PayBillVO) getBillCardPanelWrapper().getBillVOFromUI(); ``` 2. **构造条件语句并执行查询:** ```java String pk_payapply = (String) billVO.getChildrenVO()[0].getAttributeValue("vsourcebillpk"); String strWhere = "dr=0 and pk_payapply='" + pk_payapply + "'"; PaBillinfoApplyVO[] billinfoapp = (PaBillinfoApplyVO[]) getBusiDelegator().queryByCondition(PaBillinfoApplyVO.class, strWhere); ``` 3. **处理查询结果:** ```java String billinfono = billinfoapp[0].getVbillinfono(); // 票据号 billVO.setTableVO("pm_pa_billinfo", billinfo); // 设置表体数据 ``` 4. **进一步处理付款结算单或收款结算单:** ```java String whereSql = ""; if (receive >= 0.0) { // 对应收款结算单 whereSql = "isnull(dr, 0) = 0 and isourcebilltype = " + IComparisonCONST.SOURCE_TYPE_PS_REC + " and isourcebusi = " + IComparisonCONST.SOURCE_BIZ_TYPE_PS_GET; } else { // 对应付款结算单 whereSql = "isnull(dr, 0) = 0 and isourcebilltype = " + IComparisonCONST.SOURCE_TYPE_PS_REC + " and isourcebusi = " + IComparisonCONST.SOURCE_BIZ_TYPE_PS_PUT; } BdComparisonVO[] bdComparisonVos = null; try { bdComparisonVos = (BdComparisonVO[]) PSUIProxy.getIUifService().queryByCondition(BdComparisonVO.class, whereSql); } catch (Exception e) { Logger.error(e.getMessage()); } ``` **注意点:** - 该方式适用于业务逻辑较为复杂的场景,需要根据具体的业务需求构造条件语句。 - `queryByCondition`方法用于执行带有条件的查询。 ### 总结 NC后台提供了多种执行SQL语句的方法,包括通过`BaseDAO`执行、利用`NCLocator`和`IUAPQueryBS`接口执行以及特定业务场景下的执行方式。这些方法各有特点,适用于不同的场景。开发者可以根据实际需求选择合适的方法来实现数据的操作。同时,在处理复杂业务逻辑时,还需要结合系统的其他功能模块来实现更为高效的数据处理流程。
- wbsh5832019-01-15不是我想要的同样感谢
- AlonsosFaol2019-10-14首先,这不是sql代,是java代码 其次,简单的一页word只讲了票据获取的代码,注释也没啥用
- 粉丝: 5
- 资源: 24
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助