コード例 #1
0
ファイル: CsvStatement.java プロジェクト: simoc/csvjdbc
 @Override
 public void close() throws SQLException {
   try {
     if (lastResultSet != null) lastResultSet.close();
   } finally {
     lastResultSet = null;
     multipleParsers = null;
     closed = true;
     connection.removeStatement(this);
   }
 }
コード例 #2
0
ファイル: CsvStatement.java プロジェクト: simoc/csvjdbc
  protected ResultSet executeParsedQuery(
      SqlParser parser, Map<String, Object> parentobjectEnvironment) throws SQLException {
    if (parser.getTableNames().size() > 1)
      throw new SQLException(CsvResources.getString("joinNotSupported"));
    String tableName = null;
    if (parser.getTableNames().size() > 0) tableName = parser.getTableNames().get(0);
    String tableAlias = null;
    if (parser.getTableAliases().size() > 0) tableAlias = parser.getTableAliases().get(0);

    String path = connection.getPath();
    TableReader tableReader = connection.getTableReader();
    if (path != null) CsvDriver.writeLog("Connection Path: " + path);
    else CsvDriver.writeLog("Connection TableReader: " + tableReader.getClass().getName());
    CsvDriver.writeLog("Parser Table Name: " + tableName);
    CsvDriver.writeLog("Connection Extension: " + connection.getExtension());

    DataReader reader = null;
    String fileName = null;

    if (tableName == null) {
      /*
       * Create an empty dataset with one row.
       */
      String[] columnNames = new String[0];
      String[] columnTypes = new String[0];
      ArrayList<Object[]> rows = new ArrayList<Object[]>();
      rows.add(new Object[0]);
      reader = new ListDataReader(columnNames, columnTypes, rows);
    } else {
      if (path != null && (!connection.isIndexedFiles())) {
        fileName = path + tableName + connection.getExtension();

        CsvDriver.writeLog("CSV file name: " + fileName);

        File checkFile = new File(fileName);

        if (!checkFile.exists()) {
          throw new SQLException(CsvResources.getString("fileNotFound") + ": " + fileName);
        }

        if (!checkFile.canRead()) {
          throw new SQLException(CsvResources.getString("fileNotReadable") + ": " + fileName);
        }
      }

      try {
        if (connection.getExtension().equalsIgnoreCase(".dbf")) {
          reader = new DbfReader(fileName, tableName, tableAlias, connection.getCharset());
        } else {
          LineNumberReader input;
          if (tableReader == null) {
            InputStream in;
            CryptoFilter filter = connection.getDecryptingCodec();
            if (connection.isIndexedFiles()) {
              String fileNamePattern =
                  tableName + connection.getFileNamePattern() + connection.getExtension();
              String[] nameParts = connection.getNameParts();
              String dirName = connection.getPath();
              in =
                  new FileSetInputStream(
                      dirName,
                      fileNamePattern,
                      nameParts,
                      connection.getSeparator(),
                      connection.isFileTailPrepend(),
                      connection.isSuppressHeaders(),
                      filter,
                      connection.getSkipLeadingDataLines() + connection.getTransposedLines());
            } else if (filter == null) {
              in = new FileInputStream(fileName);
            } else {
              filter.reset();
              in = new EncryptedFileInputStream(fileName, filter);
            }
            if (connection.getCharset() != null) {
              input = new LineNumberReader(new InputStreamReader(in, connection.getCharset()));
            } else {
              input = new LineNumberReader(new InputStreamReader(in));
            }
          } else {
            /*
             * Reader for table comes from user-provided class.
             */
            input = new LineNumberReader(tableReader.getReader(this, tableName));
          }

          String headerline = connection.getHeaderline(tableName);
          CsvRawReader rawReader =
              new CsvRawReader(
                  input,
                  tableName,
                  tableAlias,
                  connection.getSeparator(),
                  connection.isSuppressHeaders(),
                  connection.isHeaderFixedWidth(),
                  connection.getQuotechar(),
                  connection.getCommentChar(),
                  headerline,
                  connection.getTrimHeaders(),
                  connection.getTrimValues(),
                  connection.getSkipLeadingLines(),
                  connection.isIgnoreUnparseableLines(),
                  connection.getMissingValue(),
                  connection.isDefectiveHeaders(),
                  connection.getSkipLeadingDataLines(),
                  connection.getQuoteStyle(),
                  connection.getFixedWidthColumns());
          reader =
              new CsvReader(
                  rawReader,
                  connection.getTransposedLines(),
                  connection.getTransposedFieldsToSkip(),
                  headerline);
        }
      } catch (IOException e) {
        throw new SQLException(CsvResources.getString("fileReadError") + ": " + e);
      } catch (SQLException e) {
        throw e;
      } catch (Exception e) {
        e.printStackTrace();
        throw new SQLException(CsvResources.getString("dataReaderError") + ": " + e);
      }
    }

    CsvResultSet resultSet = null;
    try {
      resultSet =
          new CsvResultSet(
              this,
              reader,
              tableName,
              parser.getColumns(),
              parser.isDistinct(),
              this.resultSetType,
              parser.getWhereClause(),
              parser.getGroupByColumns(),
              parser.getHavingClause(),
              parser.getOrderByColumns(),
              parser.getLimit(),
              parser.getOffset(),
              connection.getColumnTypes(tableName),
              connection.getSkipLeadingLines(),
              parentobjectEnvironment);
      lastResultSet = resultSet;
    } catch (ClassNotFoundException e) {
      CsvDriver.writeLog("" + e);
    }

    return resultSet;
  }