查询XXX数据库下的admin表的字段名,长度,类型,字段说明

本文将指导您如何查询特定数据库中的指定表(如admin表),获取其所有字段的名称、长度、数据类型及字段说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-- 查询XXX数据库下的admin表的字段名,长度,类型,字段说明  

 SELECT a.[name] as '字段名',a.length '长度',c.[name] '类型',e.value as '字段说明' FROM   syscolumns  a   
 left   join    systypes    b   on      a.xusertype=b.xusertype   
 left     join     systypes     c     on      a.xtype = c.xusertype   
 inner   join   sysobjects  d   on      a.id=d.id     and   d.xtype='U'   
 left join sys.extended_properties e on a.id = e.major_id and a.colid = e.minor_id and  e.name='MS_Description'  
 where d.name='admin'


<think>我们参考了用户提供的引用内容,特别是引用[1]和引用[2]中关于VO(Value Object)和元数据映射的规范。用户希望了解如何将用友数据库映射成VO。以下是详细的步骤和说明: ### 1. **创建VO实体类** 根据引用[2],每个VO实体类必须包含7个必须字段(pk_id, pk_group, pk_org, creator, creationtime, modifier, modifiedtime)。此外,每个字段对应数据库的一列。 **示例:** 假设有一张数据库`bd_demo`,包含以下字段: ```sql CREATE TABLE bd_demo ( pk_id VARCHAR(36) PRIMARY KEY, pk_group VARCHAR(36), pk_org VARCHAR(36), creator VARCHAR(36), creationtime TIMESTAMP, modifier VARCHAR(36), modifiedtime TIMESTAMP, code VARCHAR(50), name VARCHAR(100) ); ``` 对应的VO实体类`DemoVO`: ```java package nc.vo.bd.demo; import nc.vo.pub.SuperVO; import nc.vo.pub.lang.UFDateTime; public class DemoVO extends SuperVO { private String pk_id; private String pk_group; private String pk_org; private String creator; private UFDateTime creationtime; private String modifier; private UFDateTime modifiedtime; private String code; private String name; // 必须实现getter和setter方法 public String getPk_id() { return pk_id; } public void setPk_id(String pk_id) { this.pk_id = pk_id; } // ... 其他字段的getter和setter // 必须覆盖getTableName()方法 @Override public String getTableName() { return "bd_demo"; } // 必须覆盖getPrimaryKey()方法 @Override public String[] getPrimaryKeys() { return new String[]{"pk_id"}; } } ``` ### 2. **创建元数据类(VOMeta)** 根据引用[1],元数据类命名规范为`nc.vo.xxx.XXXVOMeta`,用于描述VO的字段映射关系。 **示例:** 创建`DemoVOMeta`类: ```java package nc.vo.bd.demo; import nc.vo.pub.SuperVOMeta; public class DemoVOMeta extends SuperVOMeta { public static final String PK_ID = "pk_id"; public static final String PK_GROUP = "pk_group"; public static final String PK_ORG = "pk_org"; public static final String CREATOR = "creator"; public static final String CREATIONTIME = "creationtime"; public static final String MODIFIER = "modifier"; public static final String MODIFIEDTIME = "modifiedtime"; public static final String CODE = "code"; public static final String NAME = "name"; public DemoVOMeta() { super(); // 注册字段到元数据 this.addAttribute(PK_ID, String.class, 36, true); this.addAttribute(PK_GROUP, String.class, 36, true); this.addAttribute(PK_ORG, String.class, 36, true); this.addAttribute(CREATOR, String.class, 36, true); this.addAttribute(CREATIONTIME, UFDateTime.class, 20, true); this.addAttribute(MODIFIER, String.class, 36, true); this.addAttribute(MODIFIEDTIME, UFDateTime.class, 20, true); this.addAttribute(CODE, String.class, 50, false); this.addAttribute(NAME, String.class, 100, false); } } ``` ### 3. **使用BaseDAO进行数据库操作** 引用[1]建议使用`nc.bs.dao.BaseDAO`进行数据库操作。它封装了常用的CRUD方法。 **示例:** 插入一条记录 ```java DemoVO vo = new DemoVO(); vo.setPk_id(UUID.randomUUID().toString()); vo.setPk_group("0001A4100000000000FF"); vo.setPk_org("0001A4100000000001FF"); vo.setCreator("admin"); vo.setCreationtime(new UFDateTime(System.currentTimeMillis())); vo.setCode("DEMO001"); vo.setName("测试VO"); BaseDAO dao = new BaseDAO(); dao.insertVO(vo); // 插入操作 ``` **查询示例:** ```java String whereClause = DemoVOMeta.CODE + " = ?"; DemoVO[] vos = (DemoVO[]) dao.retrieveByClause(DemoVO.class, whereClause, "DEMO001"); ``` ### 4. **主子映射(主子VO)** 如果数据库存在主子关系,需要创建主VO和子VO,并在主VO中聚合子VO数组。 **主VO示例:** ```java public class MasterVO extends SuperVO { private DemoVO[] children; // 子VO数组 // ... 主字段 // 必须覆盖getTableName()返回主名 @Override public String getTableName() { return "bd_master"; } // 必须覆盖getChildVOs()返回子VO数组 @Override public SuperVO[] getChildVOs() { return children; } } ``` ### 5. **注意事项** - **字段类型匹配**:VO中的字段类型必须与数据库类型兼容(如日期用`UFDateTime`) - **主键生成**:主键`pk_id`通常由系统生成(如UUID) - **事务控制**:涉及多操作时使用`BaseDAO`的事务方法: ```java dao.startTransaction(); try { dao.insertVO(master); for (DemoVO child : master.getChildren()) { dao.insertVO(child); } dao.commit(); } catch (Exception e) { dao.rollback(); } ``` > 提示:在NC65+版本中,推荐使用`IUAPQueryBS`服务进行复杂查询[^1]。 §§相关问题§§ 1. 如何定义VO的关联关系(如一对多)? 2. BaseDAO 的 `retrieveByPK` 方法如何使用? 3. 如何实现VO的级联删除? 4. 在UAP中如何注册VO到元数据引擎? 5. 如何通过VO生成数据库?</think>### 用友数据库映射为 VO(Value Object)的完整流程 根据引用内容,数据库映射为 VO 的核心步骤和规范如下: #### 一、创建 VO 实体类(核心映射) 1. **实体类规范**(引用[2]) ```java // 包路径规范:nc.vo.模块名 package nc.vo.yourmodule; // 必须继承 SuperVO 或 AggSuperVO(主子) public class YourTableVO extends SuperVO { // 7个系统必填字段(引用[2]) private String pk_id; // 主键 private String pk_group; // 集团 private String pk_org; // 组织 private String creator; // 创建人 private UFDateTime creationtime; // 创建时间 private String modifier; // 修改人 private UFDateTime modifiedtime; // 修改时间 // 业务字段(与数据库列一一对应) private String your_field1; private UFDouble amount_field; // 金额类型 // 必须实现方法 @Override public String getTableName() { return "your_db_table"; // 对应物理名 } @Override public String[] getAttributeNames() { return new String[] { "pk_id", "pk_group", "your_field1", "amount_field"... }; // 所有字段名 } // 生成getter/setter... } ``` #### 二、创建元数据类(VOMeta)(引用[1]) ```java // 命名规范:nc.vo.xxx.XXXVOMeta(引用[1]) package nc.vo.yourmodule; public class YourTableVOMeta extends SuperVOMeta { public static final String PK_ID = "pk_id"; public static final String AMOUNT_FIELD = "amount_field"; public YourTableVOMeta() { // 注册字段元数据 this.addAttribute(PK_ID, String.class, 36, true); this.addAttribute(AMOUNT_FIELD, UFDouble.class, 20, false); // ...其他字段 } } ``` #### 三、使用 BaseDAO 操作(引用[1]) ```java // 使用BaseDAO进行CRUD(引用[1]) BaseDAO dao = new BaseDAO(); // 1. 插入 YourTableVO newVO = new YourTableVO(); // ...设置字段值 Object pk = dao.insertVO(newVO); // 返回主键 // 2. 查询 String whereClause = YourTableVOMeta.AMOUNT_FIELD + " > ?"; YourTableVO[] results = (YourTableVO[]) dao.retrieveByClause( YourTableVO.class, whereClause, new UFDouble(1000) // 参数化查询 ); // 3. 更新 results[0].setAmount_field(new UFDouble("-500.00")); dao.updateVO(results[0]); // 4. 删除 dao.deleteVO(results[0]); ``` #### 四、主子映射(引用[2]) ```java // 主VO public class MasterVO extends AggSuperVO { private MasterBVO[] children; // 子数组 @Override public SuperVO[] getChildVOs() { return children; } } // 子VO public class MasterBVO extends SuperVO { // 必须包含主外键 private String pk_master; @Override public String getTableName() { return "bd_master_b"; } } ``` #### 五、关键注意事项 1. **字段映射规则**: - 数据库字段名 → VO属性名(驼峰命名转换) - 金额字段必须使用 `UFDouble` 类型 - 时间字段使用 `UFDateTime` 2. **物理要求**(引用[2]): - 必须包含7个系统字段 - 主键列名必须是 `pk_id` - 外键命名规范:`pk_主名` 3. **性能优化**: ```java // 只查询必要字段 dao.retrieveByClause(YourTableVO.class, "SELECT pk_id, your_field1 FROM your_db_table WHERE ..."); ``` > 提示:对于复杂场景,可通过 `nc.bs.dao.IBatchUpdater` 实现批量操作[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值