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

jetbrick.dao.orm.utils.DbUtils Maven / Gradle / Ivy

There is a newer version: 2.0
Show newest version
/**
 * Copyright 2013-2014 Guoqiang Chen, Shanghai, China. All rights reserved.
 *
 * Email: [email protected]
 * URL: http://subchen.github.io/
 *
 * 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 jetbrick.dao.orm.utils;

import java.sql.*;
import java.util.regex.Pattern;
import javax.sql.DataSource;
import jetbrick.dao.dialect.SqlDialect;
import jetbrick.lang.ExceptionUtils;

public final class DbUtils {
    public static void closeQuietly(Connection conn) {
        try {
            if (conn != null) conn.close();
        } catch (SQLException e) {
        }
    }

    public static void closeQuietly(Statement stmt) {
        try {
            if (stmt != null) stmt.close();
        } catch (SQLException e) {
        }
    }

    public static void closeQuietly(ResultSet rs) {
        try {
            if (rs != null) rs.close();
        } catch (SQLException e) {
        }
    }

    public static boolean doGetTableExist(Connection conn, String tabelName) {
        ResultSet rs = null;
        try {
            DatabaseMetaData metaData = conn.getMetaData();
            rs = metaData.getTables(null, null, tabelName.toUpperCase(), new String[] { "TABLE" });
            return rs.next();
        } catch (SQLException e) {
            throw ExceptionUtils.unchecked(e);
        } finally {
            DbUtils.closeQuietly(rs);
        }
    }

    public static SqlDialect doGetDialect(DataSource dataSource) {
        Connection conn = null;
        try {
            conn = dataSource.getConnection();
            return DbUtils.doGetDialect(conn);
        } catch (SQLException e) {
            throw ExceptionUtils.unchecked(e);
        } finally {
            DbUtils.closeQuietly(conn);
        }
    }

    public static SqlDialect doGetDialect(Connection conn) {
        try {
            String name = conn.getMetaData().getDatabaseProductName();
            return SqlDialect.getDialect(name);
        } catch (SQLException e) {
            throw ExceptionUtils.unchecked(e);
        } finally {
            DbUtils.closeQuietly(conn);
        }
    }

    // 从一个标准的select语句中,生成一个 select count(*) 语句
    public static String get_sql_select_count(String sql) {
        String count_sql = sql.replaceAll("\\s+", " ");
        int pos = count_sql.toLowerCase().indexOf(" from ");
        count_sql = count_sql.substring(pos);

        pos = count_sql.toLowerCase().lastIndexOf(" order by ");
        int lastpos = count_sql.toLowerCase().lastIndexOf(")");
        if (pos != -1 && pos > lastpos) {
            count_sql = count_sql.substring(0, pos);
        }

        String regex = "(left|right|inner) join (fetch )?\\w+(\\.\\w+)*";
        Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        count_sql = p.matcher(count_sql).replaceAll("");

        count_sql = "select count(*) " + count_sql;
        return count_sql;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy