### nc65前后台数据库操作详解 #### 一、后台数据库操作方法(private端) 在nc65系统中,后台数据库操作主要通过`BaseDAO`类实现,这是一系列私有端(private端)的数据访问操作。下面详细介绍该类中的各种数据库操作方法。 ##### 1. 查询方法 在后台数据库操作中,`BaseDAO`提供了多种查询数据的方法,适用于不同的场景需求: - **基础查询**:创建`BaseDAO`实例,并构建SQL语句。 ```java BaseDAO dao = new BaseDAO(); // 只能在private端使用 String querySql = "SELECT * FROM demo_quotation WHERE dr = 0"; // 完整正确的SQL语句 ``` - **单行单列结果查询**:当只需要查询单行单列的结果时,可以使用`newColumnProcessor()`处理器来获取数据。 ```java Object result1 = dao.executeQuery("SELECT vbillcode FROM demo_quotation WHERE pk_salequotation = '某个主键'", new ColumnProcessor()); ``` - **多行多列结果查询**:如果需要获取多行多列的结果集,则可以使用`newArrayListProcessor()`。 ```java List<Object[]> result2 = (List<Object[]>) dao.executeQuery(querySql, new ArrayListProcessor()); // for (Object[] obj : result2) { obj[0] ... obj[n] } ``` - **单行多列结果查询**:使用`newMapProcessor()`处理单行多列的查询结果。 ```java Map<String, Object> result3 = (Map<String, Object>) dao.executeQuery("SELECT * FROM demo_quotation WHERE pk_salequotation = '某个主键'", new MapProcessor()); ``` - **多行多列结果查询(Map形式)**:使用`newMapListProcessor()`将结果集转换成`List<Map<String, String>>`形式。 ```java List<Map<String, String>> result4 = (List<Map<String, String>>) dao.executeQuery(querySql, new MapListProcessor()); // for (Map<String, String> map : result4) { map.get("字段名") } ``` - **单个实体对象查询**:通过指定实体类型,使用`newBeanProcessor()`处理单个实体对象的查询结果。 ```java QuotationHVO result5 = (QuotationHVO) dao.executeQuery("SELECT * FROM demo_quotation WHERE pk_salequotation = '某个主键'", new BeanProcessor(QuotationHVO.class)); ``` - **多个实体对象查询**:通过指定实体类型,使用`newBeanListProcessor()`处理多个实体对象的查询结果。 ```java List<QuotationHVO> result6 = (List<QuotationHVO>) dao.executeQuery(querySql, new BeanListProcessor(QuotationHVO.class)); ``` - **自定义结果集处理**:对于复杂的结果集处理,可以通过继承`BaseProcessor`并重写`processResultSet`方法来自定义处理逻辑。 ```java Set<String> result = (Set<String>) dao.executeQuery(sql, new BaseProcessor() { private static final long serialVersionUID = 1L; @Override public Object processResultSet(ResultSet rs) throws SQLException { Set<String> result = new HashSet<>(); String cproductid = null; while (rs.next()) { cproductid = rs.getString("cproductid"); result.add(cproductid); } return result; } }); ``` ##### 2. 新增、更新与删除方法 除了查询外,`BaseDAO`还支持新增、更新和删除操作,这些操作通常通过执行SQL语句来完成: ```java dao.executeUpdate("INSERT INTO table_name (column1, column2) VALUES ('value1', 'value2')"); dao.executeUpdate("UPDATE table_name SET column1 = 'new_value' WHERE id = 1"); dao.executeUpdate("DELETE FROM table_name WHERE id = 1"); ``` #### 二、前台数据库操作方法(client端) 在客户端(client端),可以使用`IUAPQueryBS`接口来进行数据库操作: ```java IUAPQueryBS bs = NCLocator.getInstance().lookup(IUAPQueryBS.class); bs.executeQuery(sql, processor); // processor跟第一点的basedao用法一致 ``` 其中,`processor`是用于处理查询结果的对象,其用法与后台的`BaseDAO`相似。 #### 三、通过主表主键查询aggvo 在实际业务中,有时需要根据主表的主键来查询聚合视图对象(aggvo)。nc65提供了多种方式来实现这一功能: - **后台查询**: ```java BillQuery<AggPromoPolicyVO> query = new BillQuery<>(AggPromoPolicyVO.class); query.query(keys); ``` - **前台查询**: ```java HYPubBO_Client.queryBillVOByPrimaryKey(class, hids); ``` - **通用查询**: ```java IBillQueryService billQuery = NCLocator.getInstance().lookup(IBillQueryService.class); ``` 此外,为了防止SQL注入攻击,nc65系统还提供了一种安全的方式来构建SQL语句: ```java StringBuilder sql = new StringBuilder(); sql.append("SELECT * FROM esoc_dispatchrecgoods") .append(" WHERE dispatch_id = ?"); // 使用SQLParameter参数来安全地设置查询条件 ``` nc65系统提供了丰富的数据库操作方法,无论是后台还是前台,都可以根据具体需求选择合适的方式进行数据的查询、新增、更新或删除等操作。同时,nc65也考虑到了安全性问题,提供了防止SQL注入的功能,确保系统的稳定性和安全性。
- EasyHome丶2019-08-02不建议下载 有点坑
- 粉丝: 5
- 资源: 24
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助