java 利用hibernate获取所连接的数据库信息详解

KLQ 2020-08-10 16:19:23 java常见问答 4112

下面要给大家分享的是java利用hibernate获取所连接的数据库信息的相关内容,对这个方面有疑问的小伙伴可以来看一下,有具体的分析哦。

程序架构:springMVC+hibernate

需求:针对不同的数据库,做不同的处理

获取所连接的数据库是什么,oracle?mysql?sql?server? 基础方法。

public String getDatabaseProductName()
{
    String dpName = "";
    Session session = null;
    try
    {
        session = this.getHibernateTemplate()
            .getSessionFactory()
            .openSession();
        DatabaseMetaData dbData = session.connection()
            .getMetaData();
        dpName = dbData.getDatabaseProductName()
            .toLowerCase();
    }
    catch (SQLException e)
    {
        log.error(e.getMessage(), e);
    }
    finally
    {
        if (session != null)
        {
            session.close();
            session = null;
        }
    }
    return dpName;
}

调用方法:

String dbName = this.baseDao.getDatabaseProductName();
if (dbName.indexOf("oracle") > -1)
{ //oracle
    //做oracle的处理
}
else if (dbName.indexOf("mysql") > -1)
{
    //做mysql的处理
}
else if (dbName.indexOf("sql server") > -1)
{
    //做sql server的处理
}

假如,你想要进一步的获取用户实例名呢?应该怎样做?

public String getDBName(String dbType)
{
    String dbName = "";
    Session session = null;
    try
    {
        session = this.getHibernateTemplate()
            .getSessionFactory()
            .openSession();
        DatabaseMetaData dbData = session.connection()
            .getMetaData();
        if ("oracle".equals(dbType))
        {
            dbName = dbData.getUserName();
        }
        else if ("mysql".equals(dbType))
        {
            String url = dbData.getURL();
            String str = url.substring(0, url.indexOf("?"));
            dbName = str.substring(str.lastIndexOf("/") + 1);
        }
        else if ("sqlserver".equals(dbType))
        {
            dbName = dbData.getUserName();
        }
    }
    catch (SQLException e)
    {
        log.error(e.getMessage(), e);
    }
    finally
    {
        if (session != null)
        {
            session.close();
            session = null;
        }
    }
    return dbName.toLowerCase();
}

调用方法:

String test = baseDao.getDBName("mysql");

以上的内容你都清楚了吧,更多的java常见问题及解决方法,可以继续关注奇Q工具网来进行了解哦。

推荐阅读:

mybatis和hibernate的区别是什么?有什么区别?

hibernate还有人用吗?hibernate框架介绍

hibernate与jdbc的联系有哪些?