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

com.orangesignal.csv.CsvResultSetMetaData Maven / Gradle / Ivy

Go to download

OrangeSignal CSV is a very flexible csv (comma-separated values) read and write library for Java.

There is a newer version: 2.2.1
Show newest version
/*
 * Copyright 2013 the original author or authors.
 *
 * 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 com.orangesignal.csv;

import java.io.IOException;
import java.io.Serializable;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.sql.Types;
import java.util.List;

/**
 * {@link ResultSetMetaData} の実装クラスを提供します。
 *
 * @author Koji Sugisawa
 */
public class CsvResultSetMetaData implements Serializable, ResultSetMetaData {

	private static final long serialVersionUID = -177998106514695495L;

	/**
	 * 列名のリストを保持します。
	 */
	private final List columns;

	/**
	 * コンストラクタです。
	 *
	 * @param reader 区切り文字形式入力ストリーム
	 * @throws IOException 入出力例外が発生した場合
	 */
	public CsvResultSetMetaData(final CsvReader reader) throws IOException {
		columns = reader.readValues();
		if (columns == null) {
			throw new IOException("No header is available");
		}
	}

	// ------------------------------------------------------------------------

	@Override
	public int getColumnCount() {
		return columns.size();
	}

	/**
	 * この実装は常に false を返します。
	 */
	@Override public boolean isAutoIncrement(final int column) { return false; }

	/**
	 * この実装は常に true を返します。
	 */
	@Override public boolean isCaseSensitive(final int column) { return true; }

	/**
	 * この実装は常に false を返します。
	 */
	@Override
	public boolean isSearchable(final int column) { return false; }

	/**
	 * この実装は常に false を返します。
	 */
	@Override public boolean isCurrency(final int column) { return false; }

	/**
	 * この実装は常に {@link ResultSetMetaData#columnNullableUnknown} を返します。
	 */
	@Override public int isNullable(final int column) { return columnNullableUnknown; }

	/**
	 * この実装は常に false を返します。
	 */
	@Override public boolean isSigned(final int column) { return false; }

	/**
	 * この実装は常に {@link Integer#MAX_VALUE} を返します。
	 */
	@Override public int getColumnDisplaySize(final int column) { return Integer.MAX_VALUE; }

	@Override
	public String getColumnLabel(final int column) throws SQLException {
		return getColumnName(column);
	}

	@Override
	public String getColumnName(final int column) throws SQLException {
		if (column < 1 || column > columns.size()) {
			throw new SQLException("Invalid column " + column);
		}
		return columns.get(column - 1);
	}

	/**
	 * この実装は常に空文字列 ("") を返します。
	 */
	@Override public String getSchemaName(final int column) { return ""; }

	/**
	 * この実装は常に 0 を返します。
	 */
	@Override public int getPrecision(final int column) { return 0; }

	/**
	 * この実装は常に 0 を返します。
	 */
	@Override public int getScale(final int column) { return 0; }

	/**
	 * この実装は常に空文字列 ("") を返します。
	 */
	@Override public String getTableName(final int column) { return ""; }

	/**
	 * この実装は常に空文字列 ("") を返します。
	 */
	@Override public String getCatalogName(final int column) { return ""; }

	/**
	 * この実装は常に {@link Types#VARCHAR} を返します。
	 */
	@Override public int getColumnType(final int column) { return Types.VARCHAR; }

	/**
	 * この実装は常に "java.lang.String" を返します。
	 */
	@Override public String getColumnTypeName(final int column) { return String.class.getName(); }

	/**
	 * この実装は常に true を返します。
	 */
	@Override public boolean isReadOnly(final int column) { return true; }

	/**
	 * この実装は常に false を返します。
	 */
	@Override public boolean isWritable(final int column) { return false; }

	/**
	 * この実装は常に false を返します。
	 */
	@Override public boolean isDefinitelyWritable(final int column) { return false; }

	/**
	 * この実装は常に "java.lang.String" を返します。
	 */
	@Override public String getColumnClassName(final int column) { return String.class.getName(); }

	// ------------------------------------------------------------------------

	/**
	 * この実装は常に {@link SQLFeatureNotSupportedException} をスローします。
	 */
	@Override
	public  T unwrap(final Class iface) throws SQLFeatureNotSupportedException {
		throw new SQLFeatureNotSupportedException("unwrap(Class) not supported");
	}

	/**
	 * この実装は常に {@link SQLFeatureNotSupportedException} をスローします。
	 */
	@Override
	public boolean isWrapperFor(final Class iface) throws SQLFeatureNotSupportedException {
		throw new SQLFeatureNotSupportedException("isWrapperFor(Class) not supported");
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy