ofbiz实体引擎(八) 创建表
来源:互联网 发布:单片机控制蓝牙模块 编辑:程序博客网 时间:2024/05/16 15:43
/** * @author 郑小康 * * 1.检验实体是否为空 * * 2.检验视图实体是否为空 * * 3.获取数据库连接 * * 4.根据对应的ModelEntity来创建表 其中modelEntities是关系表的集合 * * */ public String createTable(ModelEntity entity, Map<String, ModelEntity> modelEntities, boolean addFks) { if (entity == null) { return "ModelEntity was null and is required to create a table ModelEntity是空,不能创建表"; } if (entity instanceof ModelViewEntity) { return "ERROR: Cannot create table for a view entity 不能为视图实体创建表"; } Connection connection = null; Statement stmt = null; try { connection = getConnection(); } catch (SQLException e) { String errMsg = "在建表过程中Unable to establish a connection with the database for helperName [" + this.helperInfo.getHelperFullName() + "]... Error was: " + e.toString(); Debug.logError(e, errMsg, module); return errMsg; } catch (GenericEntityException e) { String errMsg = "在建表过程中 Unable to establish a connection with the database for helperName [" + this.helperInfo.getHelperFullName() + "]... Error was: " + e.toString(); Debug.logError(e, errMsg, module); return errMsg; } StringBuilder sqlBuf = new StringBuilder("CREATE TABLE "); sqlBuf.append(entity.getTableName(this.datasourceInfo)); sqlBuf.append(" ("); Iterator<ModelField> fieldIter = entity.getFieldsIterator(); while (fieldIter.hasNext()) { ModelField field = fieldIter.next(); ModelFieldType type = modelFieldTypeReader.getModelFieldType(field.getType()); if (type == null) { return "Field type [" + type + "] not found for field [" + field.getName() + "] of entity [" + entity.getEntityName() + "], not creating table."; } sqlBuf.append(field.getColName()); sqlBuf.append(" "); sqlBuf.append(type.getSqlType()); if ("String".equals(type.getJavaType()) || "java.lang.String".equals(type.getJavaType())) { // if there is a characterSet, add the CHARACTER SET arg here if (UtilValidate.isNotEmpty(this.datasourceInfo.getCharacterSet())) { sqlBuf.append(" CHARACTER SET "); sqlBuf.append(this.datasourceInfo.getCharacterSet()); } // if there is a collate, add the COLLATE arg here if (UtilValidate.isNotEmpty(this.datasourceInfo.getCollate())) { sqlBuf.append(" COLLATE "); sqlBuf.append(this.datasourceInfo.getCollate()); } } if (field.getIsNotNull() || field.getIsPk()) { if (this.datasourceInfo.getAlwaysUseConstraintKeyword()) { sqlBuf.append(" CONSTRAINT NOT NULL, "); } else { sqlBuf.append(" NOT NULL, "); } } else { sqlBuf.append(", "); } } String pkName = makePkConstraintName(entity, this.datasourceInfo.getConstraintNameClipLength()); if (this.datasourceInfo.getUsePkConstraintNames()) { sqlBuf.append("CONSTRAINT "); sqlBuf.append(pkName); } sqlBuf.append(" PRIMARY KEY ("); entity.colNameString(entity.getPkFieldsUnmodifiable(), sqlBuf, ""); sqlBuf.append(")"); if (addFks) { // NOTE: This is kind of a bad idea anyway since ordering table creations is crazy, if not impossible // go through the relationships to see if any foreign keys need to be added Iterator<ModelRelation> relationsIter = entity.getRelationsIterator(); while (relationsIter.hasNext()) { ModelRelation modelRelation = relationsIter.next(); if ("one".equals(modelRelation.getType())) { ModelEntity relModelEntity = modelEntities.get(modelRelation.getRelEntityName()); if (relModelEntity == null) { Debug.logError("Error adding foreign key: ModelEntity was null for related entity name " + modelRelation.getRelEntityName(), module); continue; } if (relModelEntity instanceof ModelViewEntity) { Debug.logError("Error adding foreign key: related entity is a view entity for related entity name " + modelRelation.getRelEntityName(), module); continue; } String fkConstraintClause = makeFkConstraintClause(entity, modelRelation, relModelEntity, this.datasourceInfo.getConstraintNameClipLength(), this.datasourceInfo.getFkStyle(), this.datasourceInfo.getUseFkInitiallyDeferred()); if (UtilValidate.isNotEmpty(fkConstraintClause)) { sqlBuf.append(", "); sqlBuf.append(fkConstraintClause); } else { continue; } } } } sqlBuf.append(")"); // if there is a tableType, add the TYPE arg here if (UtilValidate.isNotEmpty(this.datasourceInfo.getTableType())) { // jaz:20101229 - This appears to be only used by mysql and now mysql has // deprecated (and in 5.5.x removed) the use of the TYPE keyword. This is // changed to ENGINE which is supported starting at 4.1 sqlBuf.append(" ENGINE "); //sqlBuf.append(" TYPE "); sqlBuf.append(this.datasourceInfo.getTableType()); } // if there is a characterSet, add the CHARACTER SET arg here if (UtilValidate.isNotEmpty(this.datasourceInfo.getCharacterSet())) { sqlBuf.append(" CHARACTER SET "); sqlBuf.append(this.datasourceInfo.getCharacterSet()); } // if there is a collate, add the COLLATE arg here if (UtilValidate.isNotEmpty(this.datasourceInfo.getCollate())) { sqlBuf.append(" COLLATE "); sqlBuf.append(this.datasourceInfo.getCollate()); } if (Debug.verboseOn()) Debug.logVerbose("[createTable] sql=" + sqlBuf.toString(), module); try { stmt = connection.createStatement(); stmt.executeUpdate(sqlBuf.toString()); } catch (SQLException e) { return "SQL Exception while executing the following:\n" + sqlBuf.toString() + "\nError was: " + e.toString(); } finally { try { if (stmt != null) stmt.close(); } catch (SQLException e) { Debug.logError(e, module); } try { if (connection != null) { connection.close(); } } catch (SQLException e) { Debug.logError(e, module); } } return null; }
阅读全文
0 0
- ofbiz实体引擎(八) 创建表
- ofbiz的实体引擎
- OFbiz实体引擎指南
- OFbiz实体引擎
- Ofbiz引擎之实体引擎
- ofbiz实体引擎(六) GenericHelper的初始化创建
- ofbiz实体引擎(五) ModelGroupReader
- Eclipse中OFBiz实体引擎剥离机制
- OFBiz实体引擎开发烹调书
- ofbiz实体引擎常用查询API实例
- Apache OFBiz 学习笔记 之 实体引擎
- ofbiz实体引擎(一) 获取Delegator
- ofbiz实体引擎(四) ModelReader的作用
- ofbiz实体引擎(七) 检查数据源
- ofbiz实体引擎(九) 多租户
- ofbiz的实体引擎orm的性能优化分析
- ofbiz实体引擎(二) delegator实例化具体方式
- ofbiz实体引擎(三) GenericDelegator实例化的具体过程
- C语言 指针应用-swap()
- OpenCV学习之显示图像
- 4、volley 官方教程-中标准请求的使用
- windows注册表结构
- JVM GC(垃圾回收)
- ofbiz实体引擎(八) 创建表
- uva1291 Dance Dance Revolution(dp)
- JavaScript整理
- CloudStack相关技术-Pod,Cluster,Host
- C++学习(61)
- Linux运维学习笔记之三:组合命令及命令分类、符号、管道 、工具集
- CSS3落叶动画
- 图的深度遍历----dfs
- opencl基础概念之并行