/* * DBeaver - Universal Database Manager * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) * * 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.jkiss.dbeaver.model.impl.jdbc.data.handlers; import org.jkiss.dbeaver.Log; import org.jkiss.code.NotNull; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.model.messages.ModelMessages; import org.jkiss.dbeaver.model.exec.DBCException; import org.jkiss.dbeaver.model.exec.DBCResultSet; import org.jkiss.dbeaver.model.exec.DBCSession; import org.jkiss.dbeaver.model.exec.DBCStatement; import org.jkiss.dbeaver.model.exec.jdbc.JDBCPreparedStatement; import org.jkiss.dbeaver.model.exec.jdbc.JDBCResultSet; import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession; import org.jkiss.dbeaver.model.impl.data.BaseValueHandler; import org.jkiss.dbeaver.model.struct.DBSTypedObject; import java.sql.SQLException; /** * Base JDBC value handler */ public abstract class JDBCAbstractValueHandler extends BaseValueHandler { private static final Log log = Log.getLog(JDBCAbstractValueHandler.class); @Override public final Object fetchValueObject(@NotNull DBCSession session, @NotNull DBCResultSet resultSet, @NotNull DBSTypedObject type, int index) throws DBCException { try { if (resultSet instanceof JDBCResultSet) { // JDBC uses 1-based indexes return fetchColumnValue(session, (JDBCResultSet) resultSet, type, index + 1); } else { return resultSet.getAttributeValue(index); } } catch (SQLException e) { throw new DBCException(e, session.getDataSource()); } } @Override public final void bindValueObject(@NotNull DBCSession session, @NotNull DBCStatement statement, @NotNull DBSTypedObject columnMetaData, int index, Object value) throws DBCException { try { // JDBC uses 1-based indexes this.bindParameter((JDBCSession) session, (JDBCPreparedStatement) statement, columnMetaData, index + 1, value); } catch (SQLException e) { throw new DBCException(ModelMessages.model_jdbc_exception_could_not_bind_statement_parameter, e); } } @Nullable protected abstract Object fetchColumnValue(DBCSession session, JDBCResultSet resultSet, DBSTypedObject type, int index) throws DBCException, SQLException; /** * Binds parameter value * @param session session * @param statement statement * @param paramType parameter type * @param paramIndex parameter index (1-based) * @param value parameter value * @throws DBCException * @throws SQLException */ protected abstract void bindParameter( JDBCSession session, JDBCPreparedStatement statement, DBSTypedObject paramType, int paramIndex, Object value) throws DBCException, SQLException; }