⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sqljdbcutil.java

📁 Sequoia ERP是一个真正的企业级开源ERP解决方案。它提供的模块包括:电子商务应用(e-commerce), POS系统(point of sales),知识管理,存货与仓库管理
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * $Id: SqlJdbcUtil.java 6095 2005-11-09 01:38:54Z jonesde $ * * Copyright (c) 2001-2005 The Open For Business Project - www.ofbiz.org * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. */package org.ofbiz.entity.jdbc;import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;import java.io.ObjectInputStream;import java.io.Reader;import java.math.BigDecimal;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Clob;import java.util.Collection;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import java.util.TreeSet;import javolution.util.FastMap;import org.ofbiz.base.util.Debug;import org.ofbiz.base.util.ObjectType;import org.ofbiz.base.util.UtilValidate;import org.ofbiz.entity.GenericDataSourceException;import org.ofbiz.entity.GenericEntity;import org.ofbiz.entity.GenericEntityException;import org.ofbiz.entity.GenericModelException;import org.ofbiz.entity.GenericNotImplementedException;import org.ofbiz.entity.GenericValue;import org.ofbiz.entity.condition.EntityConditionParam;import org.ofbiz.entity.condition.OrderByList;import org.ofbiz.entity.config.DatasourceInfo;import org.ofbiz.entity.datasource.GenericDAO;import org.ofbiz.entity.model.ModelEntity;import org.ofbiz.entity.model.ModelField;import org.ofbiz.entity.model.ModelFieldType;import org.ofbiz.entity.model.ModelFieldTypeReader;import org.ofbiz.entity.model.ModelKeyMap;import org.ofbiz.entity.model.ModelViewEntity;/** * GenericDAO Utility methods for general tasks * * @author     <a href="mailto:jonesde@ofbiz.org">David E. Jones</a> * @author     <a href="mailto:chris_maurer@altavista.com">Chris Maurer</a> * @author     <a href="mailto:jaz@ofbiz.org">Andy Zeneski</a> * @author     <a href="mailto:jdonnerstag@eds.de">Juergen Donnerstag</a> * @author     <a href="mailto:peterm@miraculum.com">Peter Moon</a> * @version    $Rev: 6095 $ * @since      2.0 */public class SqlJdbcUtil {    public static final String module = GenericDAO.class.getName();        public static final int CHAR_BUFFER_SIZE = 4096;    /** Makes the FROM clause and when necessary the JOIN clause(s) as well */    public static String makeFromClause(ModelEntity modelEntity, DatasourceInfo datasourceInfo) throws GenericEntityException {        StringBuffer sql = new StringBuffer(" FROM ");        if (modelEntity instanceof ModelViewEntity) {            ModelViewEntity modelViewEntity = (ModelViewEntity) modelEntity;            if ("ansi".equals(datasourceInfo.joinStyle) || "ansi-no-parenthesis".equals(datasourceInfo.joinStyle)) {                boolean useParenthesis = true;                if ("ansi-no-parenthesis".equals(datasourceInfo.joinStyle)) {                    useParenthesis = false;                }                // FROM clause: in this case will be a bunch of joins that correspond with the view-links                // BIG NOTE on the JOIN clauses: the order of joins is determined by the order of the                // view-links; for more flexible order we'll have to figure something else out and                // extend the DTD for the nested view-link elements or something                // At this point it is assumed that in each view-link the left hand alias will                // either be the first alias in the series or will already be in a previous                // view-link and already be in the big join; SO keep a set of all aliases                // in the join so far and if the left entity alias isn't there yet, and this                // isn't the first one, throw an exception                Set joinedAliasSet = new TreeSet();                // TODO: at view-link read time make sure they are ordered properly so that each                // left hand alias after the first view-link has already been linked before                StringBuffer openParens = null;                if (useParenthesis) openParens = new StringBuffer();                StringBuffer restOfStatement = new StringBuffer();                for (int i = 0; i < modelViewEntity.getViewLinksSize(); i++) {                    // don't put starting parenthesis                    if (i > 0 && useParenthesis) openParens.append('(');                    ModelViewEntity.ModelViewLink viewLink = modelViewEntity.getViewLink(i);                    ModelEntity linkEntity = modelViewEntity.getMemberModelEntity(viewLink.getEntityAlias());                    ModelEntity relLinkEntity = modelViewEntity.getMemberModelEntity(viewLink.getRelEntityAlias());                    // ModelViewEntity.ModelMemberEntity linkMemberEntity = modelViewEntity.getMemberModelMemberEntity(viewLink.getEntityAlias());                    // ModelViewEntity.ModelMemberEntity relLinkMemberEntity = modelViewEntity.getMemberModelMemberEntity(viewLink.getRelEntityAlias());                    if (i == 0) {                        // this is the first referenced member alias, so keep track of it for future use...                        restOfStatement.append(makeViewTable(linkEntity, datasourceInfo));                        //another possible one that some dbs might need, but not sure of any yet: restOfStatement.append(" AS ");                        restOfStatement.append(" ");                        restOfStatement.append(viewLink.getEntityAlias());                        joinedAliasSet.add(viewLink.getEntityAlias());                    } else {                        // make sure the left entity alias is already in the join...                        if (!joinedAliasSet.contains(viewLink.getEntityAlias())) {                            throw new GenericModelException("Tried to link the " + viewLink.getEntityAlias() + " alias to the " + viewLink.getRelEntityAlias() + " alias of the " + modelViewEntity.getEntityName() + " view-entity, but it is not the first view-link and has not been included in a previous view-link. In other words, the left/main alias isn't connected to the rest of the member-entities yet.");                        }                    }                    // now put the rel (right) entity alias into the set that is in the join                    joinedAliasSet.add(viewLink.getRelEntityAlias());                    if (viewLink.isRelOptional()) {                        restOfStatement.append(" LEFT OUTER JOIN ");                    } else {                        restOfStatement.append(" INNER JOIN ");                    }                    restOfStatement.append(makeViewTable(relLinkEntity, datasourceInfo));                    //another possible one that some dbs might need, but not sure of any yet: restOfStatement.append(" AS ");                    restOfStatement.append(" ");                    restOfStatement.append(viewLink.getRelEntityAlias());                    restOfStatement.append(" ON ");                    StringBuffer condBuffer = new StringBuffer();                    for (int j = 0; j < viewLink.getKeyMapsSize(); j++) {                        ModelKeyMap keyMap = viewLink.getKeyMap(j);                        ModelField linkField = linkEntity.getField(keyMap.getFieldName());                        if (linkField == null) {                            throw new GenericModelException("Invalid field name in view-link key-map for the " + viewLink.getEntityAlias() + " and the " + viewLink.getRelEntityAlias() + " member-entities of the " + modelViewEntity.getEntityName() + " view-entity; the field [" + keyMap.getFieldName() + "] does not exist on the [" + linkEntity.getEntityName() + "] entity.");                        }                        ModelField relLinkField = relLinkEntity.getField(keyMap.getRelFieldName());                        if (relLinkField == null) {                            throw new GenericModelException("Invalid related field name in view-link key-map for the " + viewLink.getEntityAlias() + " and the " + viewLink.getRelEntityAlias() + " member-entities of the " + modelViewEntity.getEntityName() + " view-entity; the field [" + keyMap.getRelFieldName() + "] does not exist on the [" + relLinkEntity.getEntityName() + "] entity.");                        }                        if (condBuffer.length() > 0) {                            condBuffer.append(" AND ");                        }                                                condBuffer.append(viewLink.getEntityAlias());                        condBuffer.append(".");                        condBuffer.append(filterColName(linkField.getColName()));                        condBuffer.append(" = ");                        condBuffer.append(viewLink.getRelEntityAlias());                        condBuffer.append(".");                        condBuffer.append(filterColName(relLinkField.getColName()));                    }                    if (condBuffer.length() == 0) {                        throw new GenericModelException("No view-link/join key-maps found for the " + viewLink.getEntityAlias() + " and the " + viewLink.getRelEntityAlias() + " member-entities of the " + modelViewEntity.getEntityName() + " view-entity.");                    }                    restOfStatement.append(condBuffer.toString());                    // don't put ending parenthesis                    if (i < (modelViewEntity.getViewLinksSize() - 1) && useParenthesis) restOfStatement.append(')');                }                if (useParenthesis) sql.append(openParens.toString());                sql.append(restOfStatement.toString());                // handle tables not included in view-link                Iterator meIter = modelViewEntity.getMemberModelMemberEntities().entrySet().iterator();                boolean fromEmpty = restOfStatement.length() == 0;                while (meIter.hasNext()) {                    Map.Entry entry = (Map.Entry) meIter.next();                    ModelEntity fromEntity = modelViewEntity.getMemberModelEntity((String) entry.getKey());                    if (!joinedAliasSet.contains((String) entry.getKey())) {                        if (!fromEmpty) sql.append(", ");                        fromEmpty = false;                        sql.append(makeViewTable(fromEntity, datasourceInfo));                        sql.append(" ");                        sql.append((String) entry.getKey());                    }                }            } else if ("theta-oracle".equals(datasourceInfo.joinStyle) || "theta-mssql".equals(datasourceInfo.joinStyle)) {                // FROM clause                Iterator meIter = modelViewEntity.getMemberModelMemberEntities().entrySet().iterator();                while (meIter.hasNext()) {                    Map.Entry entry = (Map.Entry) meIter.next();                    ModelEntity fromEntity = modelViewEntity.getMemberModelEntity((String) entry.getKey());                    sql.append(makeViewTable(fromEntity, datasourceInfo));                    sql.append(" ");                    sql.append((String) entry.getKey());                    if (meIter.hasNext()) sql.append(", ");                }                // JOIN clause(s): none needed, all the work done in the where clause for theta-oracle            } else {                throw new GenericModelException("The join-style " + datasourceInfo.joinStyle + " is not yet supported");            }        } else {            sql.append(modelEntity.getTableName(datasourceInfo));        }        return sql.toString();    }    /** Makes a WHERE clause String with "<col name>=?" if not null or "<col name> IS null" if null, all AND separated */    public static String makeWhereStringFromFields(List modelFields, Map fields, String operator) {        return makeWhereStringFromFields(modelFields, fields, operator, null);    }    /** Makes a WHERE clause String with "<col name>=?" if not null or "<col name> IS null" if null, all AND separated */    public static String makeWhereStringFromFields(List modelFields, Map fields, String operator, List entityConditionParams) {        if (modelFields.size() < 1) {            return "";        }        StringBuffer returnString = new StringBuffer("");        Iterator iter = modelFields.iterator();        while (iter.hasNext()) {            Object item = iter.next();            Object name = null;            ModelField modelField = null;            if (item instanceof ModelField) {                modelField = (ModelField) item;                returnString.append(modelField.getColName());                name = modelField.getName();            } else {                returnString.append(item);                name = item;            }            Object fieldValue = fields.get(name);            if (fieldValue != null && fieldValue != GenericEntity.NULL_FIELD) {                returnString.append('=');                addValue(returnString, modelField, fieldValue, entityConditionParams);            } else {                returnString.append(" IS NULL");            }            if (iter.hasNext()) {                returnString.append(' ');                returnString.append(operator);                returnString.append(' ');            }        }        return returnString.toString();    }    public static String makeWhereClause(ModelEntity modelEntity, List modelFields, Map fields, String operator, String joinStyle) throws GenericEntityException {        StringBuffer whereString = new StringBuffer("");        if (modelFields != null && modelFields.size() > 0) {            whereString.append(makeWhereStringFromFields(modelFields, fields, "AND"));        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -