判断数据中某张表是否存在

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

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

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

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

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

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


[java]  view plain  copy
  1. java.sql.Connection con = getYourConnection();  
  2.      
  3. ResultSet rs = con.getMetaData().getTables(nullnull"yourTable"null);  
  4. if (rs.next()) {  
  5. //yourTable exist  
  6. }else {  
  7. //yourTable not exist  
  8. }  

select count(*) from User_Tab_Columns where  table_name='T_E_KMCJB' and column_name='JCBZ1';

(检查某表中是否存在某个字段,注意大写。)

 

select count(*) from all_tables where table_name='TD_KMDM';

(检查某数据库内,是否存在某张表,注意大写。)


下面提供优化后的解决方案:

/**
 * 判断是否有表
 * @param con
 * @param tableName
 * @return
 * @throws SQLException
 */
public boolean hasTabel(Connection con, String tableName) throws SQLException {
    ResultSet rs = con.getMetaData().getTables(null, con.getMetaData().getUserName(), tableName, null);
    if (rs.next()) {
        return true;
    }else{
        return false;
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值