zoukankan      html  css  js  c++  java
  • 摘录:java和sql如何判断数据库是否存在

    java和sql如何判断数据库表是否存在
    2010-07-14 17:24

    用Java语句判断数据库表是否存在


        public boolean HasTable(String name) {
            //判断某一个表是否存在
            boolean result = false;
            try {
                DatabaseMetaData meta = sqlConn.getMetaData();
                ResultSet set = meta.getTables (null, null, name, null);
                while (set.next()) {
                    result = true;
                }
            } catch (Exception eHasTable) {
                System.err.println(eHasTable);
                eHasTable.printStackTrace ();
            }
            return result;
        }




    刚刚被一个比较麻烦的问题所困扰。这个问题就是如何判断数据中某张表是否存在,如果不存在则创建它。

    恩,我先用了最笨的方法,就是写个select从表中读数据,捕获异常的同时就知道了改表没有创建。

    此法不通,因为这个时候的异常似乎被认定为了系统错误,于是后面创建表的代码被忽略了。

    大部分人的做法类似于select system.table where tabblename='***',反正我曾经用类似的句子查询过DB2,是成功的。

    但是,我现在面对的不是DB2,而是7个不同的数据库,基本上常用的都包括了。是不是每类数据库都有上面的查询语句呢?是否查询语句相似呢?于是我挑了hsqldb,也是当前的默认数据库,来寻找解决办法。

    很遗憾,我没有找到类似前面的句子。正当我打算放弃的时候发现了下面的代码,这段代码是我从一个国外的论坛中找到的,尽管我不知道它是不是万能钥匙,但是他这次对我而言确成了万能的:


    java.sql.Connection con = getYourConnection(); 
       
    ResultSet rs = con.getMetaData().getTables(null, null, "yourTable", null );
    if (rs.next()) {
    //yourTable exist
    }else {
    //yourTable not exist
    }

     

    今天碰到个问题:java和sql如何判断数据库表是否存在。要判断数据库中表是否存在,就搜寻了一下java和sql如何判断数据库表是否存在的方法

    1.sql语句判断数据库表是否存在:

    sql:select * from user_all_tables where table_name='tableName'

    如果结果为空则表示不存在,如何结果不为空则表示存在;

     

    2.java如何判断数据库表是否存在

    方法一:

    可以利用上面的sql,执行获取结果,相应的java代码如下:

    String helperName= delegator.getGroupHelperName("com.asiainfo");
    SQLProcessor sqlProcessor= new SQLProcessor(helperName);

    String sql = "select * from user_all_tables where table_name='"+table+"'";

    ResultSet rsTables =sqlProcessor.executeQuery(sql);
    if(rsTables.next()){ 
     Debug.logWarning("table:"+table+" exists", module);
    }else{ 
     Debug.logWarning("table:"+table+" does not exist", module);
    }

     

    方法二:

    DatabaseMetaData meta = m_sqlCon.getMetaData();

    ResultSet rsTables = meta.getTables(null , null, “YourTableName”, null);

    if(rsTables.next()){

     System.out.println("The Table exsits.");

    }else{

     System.out.println("The Table not exsits.");

    }

    注意,这里的参数很重要,如何写不对会导致结果不正确。

    如果schema参数为null的话,那么它会查询整个数据库中的表有可能会冲突的:

    getTables(String catalog,String schemaPattern,String tableNamePattern,String[] types)

    参数: catalog:目录名称,一般都为空.

    参数:schema:数据库名,对于oracle来说就用户名

    参数:tablename:表名称

    参数:type :表的类型(TABLE | VIEW)

    注意:在使用过程中,参数名称必须使用大写的。

  • 相关阅读:
    魔镜完全是被王后问烦了才给她找点事做不再来烦它吧(豆瓣的经典评论)
    调色板QPalette类用法详解(附实例、源码)
    当程序调用dll时获取dll路径,DLL中获取自身的句柄
    把硬盘格式化成ext格式的cpu占用率就下来了
    Delphi XE6 如何设计并使用FireMonkeyStyle
    系统重构
    阅读Google的C++代码规范有感
    VS2010生成安装包制作步骤
    MVC视图中的@Html.xxx(...)
    高性能的JavaScript--加载和执行
  • 原文地址:https://www.cnblogs.com/hoojjack/p/2613036.html
Copyright © 2011-2022 走看看