001: /*
002:
003: Derby - Class org.apache.derby.impl.load.ExportResultSetForObject
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to You under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derby.impl.load;
023:
024: import java.sql.Connection;
025: import java.sql.Statement;
026: import java.sql.ResultSet;
027: import java.sql.ResultSetMetaData;
028: import java.sql.DatabaseMetaData;
029: import java.sql.SQLException;
030:
031: //uses the passed connection and table/view name to make the resultset on
032: //that entity. If the entity to be exported has non-sql types in it, an
033: //exception will be thrown
034: class ExportResultSetForObject {
035:
036: private Connection con;
037: private String selectQuery;
038: private ResultSet rs;
039: private int columnCount;
040: private String columnNames[];
041: private String columnTypes[];
042: private int columnLengths[];
043:
044: private Statement expStmt = null;
045: private String schemaName;
046: private String tableName;
047:
048: /* set up the connection and table/view name or the select query
049: * to make the result set, whose data is exported.
050: **/
051: public ExportResultSetForObject(Connection con, String schemaName,
052: String tableName, String selectQuery) {
053: this .con = con;
054: if (selectQuery == null) {
055: this .schemaName = schemaName;
056: this .tableName = tableName;
057:
058: // delimit schema Name and table Name using quotes because
059: // they can be case-sensitive names or SQL reserved words. Export
060: // procedures are expected to be called with case-senisitive names.
061: // undelimited names are passed in upper case, because that is
062: // the form database stores them.
063:
064: this .selectQuery = "select * from "
065: + (schemaName == null ? "\"" + tableName + "\""
066: : "\"" + schemaName + "\"" + "." + "\""
067: + tableName + "\"");
068: } else {
069: this .selectQuery = selectQuery;
070: }
071: }
072:
073: public ResultSet getResultSet() throws SQLException {
074: rs = null;
075: //execute the select query and keep it's meta data info ready
076: expStmt = con.createStatement();
077: rs = expStmt.executeQuery(selectQuery);
078: getMetaDataInfo();
079: return rs;
080: }
081:
082: public int getColumnCount() {
083: return columnCount;
084: }
085:
086: public String[] getColumnDefinition() {
087: return columnNames;
088: }
089:
090: public String[] getColumnTypes() {
091: return columnTypes;
092: }
093:
094: public int[] getColumnLengths() {
095: return columnLengths;
096: }
097:
098: //if the entity to be exported has non-sql types in it, an exception will be thrown
099: private void getMetaDataInfo() throws SQLException {
100: ResultSetMetaData metaData = rs.getMetaData();
101: columnCount = metaData.getColumnCount();
102: int numColumns = columnCount;
103: columnNames = new String[numColumns];
104: columnTypes = new String[numColumns];
105: columnLengths = new int[numColumns];
106:
107: for (int i = 0; i < numColumns; i++) {
108: int jdbcTypeId = metaData.getColumnType(i + 1);
109: columnNames[i] = metaData.getColumnName(i + 1);
110: columnTypes[i] = metaData.getColumnTypeName(i + 1);
111: if (!ColumnInfo.importExportSupportedType(jdbcTypeId)) {
112: throw LoadError.nonSupportedTypeColumn(columnNames[i],
113: columnTypes[i]);
114: }
115:
116: columnLengths[i] = metaData.getColumnDisplaySize(i + 1);
117: }
118: }
119:
120: public void close() throws Exception {
121: if (expStmt != null)
122: expStmt.close();
123: }
124: }
|