All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nl.topicus.jdbc.statement.ParameterStore Maven / Gradle / Ivy

There is a newer version: 1.1.6
Show newest version
package nl.topicus.jdbc.statement;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;

/**
 * 
 * @author loite
 *
 */
public class ParameterStore {
  private Object[] parameters = new Object[10];

  private Integer[] types = new Integer[10];

  private Integer[] nullable = new Integer[10];

  private Integer[] scalesOrLengths = new Integer[10];

  private String table;

  private String[] columns = new String[10];

  private int highestIndex = 0;

  void clearParameters() {
    highestIndex = 0;
    parameters = new Object[10];
    types = new Integer[10];
    nullable = new Integer[10];
    scalesOrLengths = new Integer[10];
    columns = new String[10];
    table = null;
  }

  Object getParameter(int parameterIndex) {
    int arrayIndex = parameterIndex - 1;
    if (arrayIndex >= parameters.length)
      return null;
    return parameters[arrayIndex];
  }

  Integer getType(int parameterIndex) {
    int arrayIndex = parameterIndex - 1;
    if (arrayIndex >= types.length)
      return null;
    return types[arrayIndex];
  }

  Integer getNullable(int parameterIndex) {
    int arrayIndex = parameterIndex - 1;
    if (arrayIndex >= nullable.length)
      return null;
    return nullable[arrayIndex];
  }

  Integer getScaleOrLength(int parameterIndex) {
    int arrayIndex = parameterIndex - 1;
    if (arrayIndex >= scalesOrLengths.length)
      return null;
    return scalesOrLengths[arrayIndex];
  }

  String getColumn(int parameterIndex) {
    int arrayIndex = parameterIndex - 1;
    if (arrayIndex >= columns.length)
      return null;
    return columns[arrayIndex];
  }

  String getTable() {
    return table;
  }

  void setTable(String table) {
    this.table = table;
  }

  void setColumn(int parameterIndex, String column) {
    setParameter(parameterIndex, getParameter(parameterIndex), getType(parameterIndex),
        getScaleOrLength(parameterIndex), column);
  }

  void setType(int parameterIndex, Integer type) {
    setParameter(parameterIndex, getParameter(parameterIndex), type,
        getScaleOrLength(parameterIndex), getColumn(parameterIndex));
  }

  void setParameter(int parameterIndex, Object value, Integer sqlType) {
    setParameter(parameterIndex, value, sqlType, null);
  }

  void setParameter(int parameterIndex, Object value, Integer sqlType, Integer scaleOrLength) {
    setParameter(parameterIndex, value, sqlType, scaleOrLength, null);
  }

  void setParameter(int parameterIndex, Object value, Integer sqlType, Integer scaleOrLength,
      String column) {
    highestIndex = Math.max(parameterIndex, highestIndex);
    int arrayIndex = parameterIndex - 1;
    if (arrayIndex >= parameters.length) {
      parameters = Arrays.copyOf(parameters, Math.max(parameters.length * 2, arrayIndex));
      types = Arrays.copyOf(types, Math.max(types.length * 2, arrayIndex));
      nullable = Arrays.copyOf(nullable, Math.max(nullable.length * 2, arrayIndex));
      scalesOrLengths =
          Arrays.copyOf(scalesOrLengths, Math.max(scalesOrLengths.length * 2, arrayIndex));
      columns = Arrays.copyOf(columns, Math.max(columns.length * 2, arrayIndex));
    }
    parameters[arrayIndex] = value;
    types[arrayIndex] = sqlType;
    scalesOrLengths[arrayIndex] = scaleOrLength;
    columns[arrayIndex] = column;
  }

  int getHighestIndex() {
    return highestIndex;
  }

  void fetchMetaData(Connection connection) throws SQLException {
    if (table != null && !"".equals(table)) {
      try (ResultSet rsCols = connection.getMetaData().getColumns(null, null, table, null)) {
        while (rsCols.next()) {
          String col = rsCols.getString("COLUMN_NAME");
          int arrayIndex = getParameterArrayIndex(col);
          if (arrayIndex > -1) {
            scalesOrLengths[arrayIndex] = rsCols.getInt("COLUMN_SIZE");
            types[arrayIndex] = rsCols.getInt("DATA_TYPE");
            nullable[arrayIndex] = rsCols.getInt("NULLABLE");
          }
        }
      }
    }
  }

  private int getParameterArrayIndex(String columnName) {
    for (int param = 0; param < highestIndex; param++) {
      if (columnName != null && columns[param] != null
          && columnName.equalsIgnoreCase(columns[param])) {
        return param;
      }
    }
    return -1;
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy