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)

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

  • 相关阅读:
    网页加速的14条优化法则 网站开发与优化
    .NET在后置代码中输入JS提示语句(背景不会变白)
    C语言变量声明内存分配
    SQL Server Hosting Toolkit
    An established connection was aborted by the software in your host machine
    C语言程序设计 2009春季考试时间和地点
    C语言程序设计 函数递归调用示例
    让.Net 程序脱离.net framework框架运行
    C语言程序设计 答疑安排(2009春季 110周) 有变动
    软件测试技术,软件项目管理 实验时间安排 2009春季
  • 原文地址:https://www.cnblogs.com/hoojjack/p/2613036.html
Copyright © 2011-2022 走看看