/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.apache.gora.sql.util;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * SQL related utilities
 */
public class SqlUtils {
  
  /** Closes the ResultSet silently */
  public static void close(ResultSet rs) {
    if(rs != null) {
      try {
        rs.close();
      } catch (SQLException ignore) { }
    }
  }
  
  /** Closes the Statement silently */
  public static void close(Statement statement) {
    if(statement != null) {
      try {
        statement.close();
      } catch (SQLException ignore) { }
    }
  }
}
