Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   *  Copyright 2009-2014 Pavel Ponec
   *
   *  Licensed under the Apache License, Version 2.0 (the "License");
   *  you may not use this file except in compliance with the License.
   *  You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
  *  Unless required by applicable law or agreed to in writing, software
  *  distributed under the License is distributed on an "AS IS" BASIS,
  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
 
 package org.ujorm.orm;
 
 import java.util.List;
 import org.ujorm.Key;
 import org.ujorm.Ujo;
JdbcStatement

Author(s):
Pavel Ponec
 
 public class JdbcStatement {

    
Logger
 
     private static final UjoLogger LOGGER = UjoLoggerFactory.getLogger(JdbcStatement.class);

    
Prepared Statement
 
     private final PreparedStatement ps;
     private final ITypeService typeService;
     private final int logValueLengthLimit;

    
Parameter pointer
 
     private int parameterPointer = 0;
 
     private StringBuilder values;
 
     private boolean logValues;
 
     public JdbcStatement(final Connection connfinal CharSequence sqlfinal OrmHandler handlerthrows SQLException {
         this(conn.prepareStatement(sql.toString()), handler);
     }
 
     public JdbcStatement(final PreparedStatement psfinal OrmHandler handler) {
         this. = ps;
         this. = handler.getParameters().getConverter(null);
          = .isLoggable(.);
          = Math.max(10, ..of(handler.getParameters()));
         if () {
              = new StringBuilder();
         }
     }

    
Return values in format: [1, "ABC", 2.55]
 
     public String getAssignedValues() {
         if (!=null
         &&  .length()>0) {
             return .toString() + "]";
         } else {
             return "NONE";
         }
     }

    
Close the session
 
     public void close() throws SQLException {
         .close();
     }

    
Call the procedure.
 
     public void execute() throws SQLException {
         .execute();
     }

    
Run INSERT, UPDATE or DELETE.

Returns:
The row count for SQL Data Manipulation Language (DML) statements
 
     public int executeUpdate() throws SQLException {
         return .executeUpdate();
     }
 
     public ResultSet executeQuery() throws SQLException {
        return .executeQuery();
    }

    
Assign values into the prepared statement
    @SuppressWarnings("unchecked")
    public void assignValues(OrmUjo bothrows SQLException {
        final MetaTable dbTable = bo.readSession().getHandler().findTableModel((Classbo.getClass());
        final List<MetaColumncolumns = ..getList(dbTable);
        assignValues(bocolumns);
    }

    
Assign values into the prepared statement
    @SuppressWarnings("unchecked")
    public void assignValues(List<? extends OrmUjobosint idxFromint idxTothrows SQLException {
        final OrmUjo bo = bos.get(idxFrom);
        final MetaTable dbTable = bo.readSession().getHandler().findTableModel((Classbo.getClass());
        final List<MetaColumncolumns = ..getList(dbTable);
        for (int i = idxFromi < idxToi++) {
            assignValues(bos.get(i), columns);
        }
    }

    
Assign values into the prepared statement
    @SuppressWarnings("unchecked")
    public void assignValues(OrmUjo tableList<MetaColumncolumnsthrows SQLException {
        for (MetaColumn column : columns) {
            if (column.isForeignKey()) {
                Key key = column.getKey();
                Object value = table!=null ? key.of(table) : null ;
                assignValues((OrmUjovaluecolumn.getForeignColumns());
            } else if (column.isColumn()) {
                assignValue(tablecolumn);
            }
        }
    }

    
Assign values into the prepared statement
    final public void assignValues(Query querythrows SQLException {
        if (query.getSqlParameters()!=null) {
            assignExtendedValues(query);
        }
        assignValues(query.getDecoder());
    }

    
Assign extended values into the prepared statement
    public void assignExtendedValues(Query querythrows SQLException {
        SqlParameters params = query.getSqlParameters();
        if (params==null) {
            return;
        }
        for (int i=0, max=params.getCount(); i<maxi++) {
            final Object value = params.getParameter(i);
            final Class type = value!=null ? value.getClass() : Void.class;
            final Property key = Property.of("[sqlParameter]"type);
            final MetaColumn column = new MetaColumn();
            ..setValue(columnquery.getTableModel());
            ..setValue(columnkey);
            query.getTableModel().getDatabase().changeDbType(column);
            query.getTableModel().getDatabase().changeDbLength(column);
            column.initTypeCode();
            if () {
                String textValue = UjoManager.getInstance().encodeValue(valuefalse);
                logValue(textValuekey);
            }
            try {
                ++;
                column.getConverter().setValue(columnvalue);
            } catch (Throwable e) {
                String textValue = UjoManager.getInstance().encodeValue(valuefalse);
                String msg = String.format("table: %s, column %s, columnOffset: %d, value: %s"key.getType().getSimpleName(), columntextValue);
                throw new IllegalStateException(msge);
            }
        }
    }

    
Assign values into the prepared statement
    public void assignValues(CriterionDecoder decoderthrows SQLException {
        int columnCount = decoder.getColumnCount();
        for (int i=0; i<columnCount; ++i) {
            final MetaColumn column = decoder.getColumn(i);
            final Object value = decoder.getValueExtended(i);
            if (column.isForeignKey()) {
                List<MetaColumnfc = column.getForeignColumns();
                if (value instanceof Object[]) {
                    final Object[] ujoValues = (Object[]) value;
                    final Object[] rValues = new Object[ujoValues.length];
                    final MetaColumn rColumn = fc.get(0); // only one PK is supported
                    final boolean isUjo = ujoValues.length > 0
                                       && ujoValues[0] instanceof OrmUjo;
                    for (int j=0; j<ujoValues.lengthj++) {
                        final Object ujoValue = ujoValues[j];
                        if (isUjo) {
                            // if instance is OrmUjo, then assign value of key
                            final OrmUjo bo = (OrmUjoujoValue;
                            final Object rValue = rColumn.getValue(bo);
                            rValues[j] = rValue;
                        } else {
                            // if instance is not OrmUjo, then assign directly value (it's key)
                            rValues[j] = ujoValue;
                        }
                    }
                    assignValue(rColumnrValuesnull);
                } else {
                    OrmUjo bo = (OrmUjovalue;
                    for (MetaColumn rColumn : fc) {
                        Object rValue = rColumn.getValue(bo);
                        assignValue(rColumnrValuebo);
                    }
                }
            } else {
                assignValue(columnvaluenull);
            }
        }
    }


    
Add a next value to a SQL prepared statement.
    @SuppressWarnings("unchecked")
    public void assignValue(final OrmUjo tablefinal MetaColumn columnthrows SQLException {
        final Key key = column.getKey();
        final Object value = table!=null ? key.of(table) : null ;
        assignValue(columnvaluetable);
    }


    
Add a next value to a SQL prepared statement.
    @SuppressWarnings("unchecked")
    public void assignValue
        ( final MetaColumn column
        , final Object value
        , final OrmUjo bo
        ) throws SQLException {
        final Key key = column.getKey();
        if () {
            if (bo != null) {
                logValue(bokey);
            } else {
                String textValue = value instanceof Object[]
                        ? arrayToString( (Object[]) value)
                        : UjoManager.getInstance().encodeValue(valuefalse) ;
                logValue(textValuekey);
            }
        }
        try {
            if (value instanceof Object[]) for (Object v : (Object[]) value) {
                ++;
                column.getConverter().setValue(columnv);
            } else {
                ++;
                column.getConverter().setValue(columnvalue);
            }
        } catch (Throwable e) {
            String textValue = bo!=null
                ? UjoManager.getInstance().getText(bokey.)
                : UjoManager.getInstance().encodeValue(valuefalse)
                ;
            String msg = String.format
                ( "table: %s, column %s, columnOffset: %d, value: %s"
                , bo!=null ? bo.getClass().getSimpleName() : "null"
                , column
                , 
                , textValue
                );
            throw new IllegalStateException(msge);
        }
    }

    
Assign procedure parameters
    @SuppressWarnings("unchecked")
    public void assignValues(DbProcedure bo) {
        CallableStatement ps = (CallableStatementthis.;
        MetaProcedure procedure = bo.metaProcedure();
        Object value = null;
        for (MetaColumn metaParam : ..getList(procedure)) {
            final Key key = metaParam.getKey();
            if (!key.isTypeOf(Void.class)) try {
                ++;
                int sqlType = ..of(metaParam).getSqlType();
                if (procedure.isInput(metaParam)) {
                    value = key.of(bo);
                    metaParam.getConverter().setValue(metaParampsvalue);
                    if () {
                        String textValue = UjoManager.getInstance().encodeValue(valuefalse);
                        logValue(textValuekey);
                    }
                }
                if (procedure.isOutput(metaParam)) {
                    ps.registerOutParameter(sqlType);
                }
            } catch (Throwable e) {
                String textValue = bo != null
                    ? UjoManager.getInstance().getText(bokey.)
                    : UjoManager.getInstance().encodeValue(valuefalse);
                String msg = String.format("table: %s, column %s, columnOffset: %d, value: %s"bo != null ? bo.getClass().getSimpleName() : "null"keytextValue);
                throw new IllegalStateException(msge);
            }
        }
    }

    
Assign procedure parameters
    @SuppressWarnings("unchecked")
    public void loadValues(DbProcedure bo) {
        CallableStatement ps = (CallableStatementthis.;
        MetaProcedure procedure = bo.metaProcedure();
        int i = 0;
        // Load data from CallableStatement:
        try {
            for (MetaColumn c : ..getList(procedure)) {
                if (procedure.isOutput(c)) {
                    final Object value = c.getConverter().getValue(cps, ++i);
                    c.setValue(bovalue);
                }
                else if (procedure.isInput(c)) {
                    ++i;
                }
            }
        } catch (Exception e) {
            throw new IllegalStateException("Procedure: " + boe);
        }
    }

    
Log a value value into a text format.
    protected void logValue(final Ujo bofinal Key key) {
        String textValue = UjoManager.getInstance().getText(bokey.);
        logValue(textValuekey);
    }

    
Log a value value into a text format.
    protected void logValue(final String textValuefinal Key key) {
        final boolean quotaType = key.isTypeOf(CharSequence.class)
                               || key.isTypeOf(java.util.Date.class)
                                ;
        final String textSeparator = quotaType ? "\'" : "";
        .append( == 0 ? "[" : ", ");
        .append(textSeparator);
        if (textValue!=null && textValue.length() > ) {
          .append(textValue.subSequence(0, ));
          .append("...[");
          .append(textValue.length());
          .append( < 20 ? "]" : " total characters]");
        } else {
          .append(textValue);
        }
        .append(textSeparator);
    }

    
Returns prepared statement - for internal use only
        return ;
    }

    
Vizualizuje první tři znaky pole
    private String arrayToString(final Object[] vals) {
        final StringBuilder sb = new StringBuilder(128);
        final int max = Math.min(3, vals.length);
        for (int i = 0; i < maxi++) {
            sb.append(sb.length()==0 ? '[' : ',');
            sb.append(vals[i]);
        }
        if (max < vals.length) {
            sb.append(", ...");
        }
        sb.append(']');
        return sb.toString();
    }
    @Override
    public String toString() {
        if (!=null) {
            return .toString();
        } else {
            return super.toString();
        }
    }
New to GrepCode? Check out our FAQ X