JDBC 如何判断一张表是否存在

来源:互联网 发布:php 约瑟夫环递归 编辑:程序博客网 时间:2024/05/02 00:56

      今天用到数据库库的知识,想用java代码的动态创建一张表结构。在创建表结构之前呢,我们首先要确定这张表在数据库中 是不存在的。因为大家都知道同一个数据库中的表名是不能重复的。

      1 。用比较笨的方法,也是比较简单的方法。利用错误来判断表是否存在。

代码:              

package com.vaolan.util.db;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import org.apache.log4j.Logger;import com.vaolan.util.file.ReadConfigFile;/** * 创建商品表的 * @author xiaoming * */public class CreatProductTable {protected Logger logger;protected ReadConfigFile jdbcConfig;protected Connection conn;protected Statement st;protected ResultSet rs;public CreatProductTable(){init();}public void init (){jdbcConfig = new ReadConfigFile("jdbc.properties");}/** * 判断表结构是否存在 * @param tableName  所判断的表名 * @return */public boolean validateTableExist(String tableName){//定义一个变量标示  boolean flag = true ;  //一个查询该表所有的语句。  String sql = "SELECT COUNT(*) FROM "+ tableName ;  //获取连接  conn = ConnectFactory.getConnection();  try{ st = conn.createStatement(); rs = st.executeQuery(sql); flag =  false;  }catch(Exception e){  //该表不存在,则 会跳入catch中  e.printStackTrace();  }finally{  //关闭所有连接  CloseConnect.closeAll(conn, st, null, null);  }  return flag; }}
获取连接一步课查看 上一篇博客。

测试:

public static void main(String[] args) {CreatProductTable c = new CreatProductTable();boolean flag = c.validateTableExist("renern");System.out.println(flag);}

若结果为:false 说明 此方法正常,则说明 表已经存在。

                 true 说明 此方法进入catch中,方法异常,则说明表不存在,可以创建

           

      2. 使用DatabaseMetaData类;

           在这个类中有一个防范,getTables();

          ResultSet rt = DatabaseMetaData.getTables(String catalog,String schema,String tableName,String []type);

          参数含义:

          catalog :用来寻找表名的目录名称。对于JDBC-ODBC数据库和许多其它的数据库,它可被设置为null。
          schema:要包括的数据库schema。许多数据库并不支持schema,而对于其它的数据库,它为数据库所有者的用户名称。 
      tablemask:描述你要获取的表的名称的一个掩码。若你想获取所有的表名,将它设为通配符%。
          types[]  :描述你奥获取的表的种类的一个字符串数组。数据库中通常包括一些用于内部管理的表,而这些表对用户来说是毫无用处的。若被设为null,你将得到所有的表。若使该数组只包括一个元素,且将该元素设为字符串“TABLES”,你将得到用户所感兴趣的那些表。 (简单地说就是表的类型)包括:"TABLE"、"VIEW"、"SYSTEM TABLE"、"GLOBAL TEMPORARY"、"LOCAL TEMPORARY"、"ALIAS" 和 "SYNONYM"

代码:

public boolean validateTableExist(String tableName){boolean flag = false;try {conn = ConnectFactory.getConnection();DatabaseMetaData meta = conn.getMetaData();String type [] = {"TABLE"};rs = meta.getTables(null, null, tableName, type);flag = rs.next();} catch (SQLException e) {e.printStackTrace();}return flag; }

结果:true  表存在;false 表不存在


了解更多:DatabaseMetaData

 http://canfly2010.iteye.com/blog/520557

http://hi.baidu.com/qqljsevpepbhilq/item/60d94ad0d11feb3a48e1ddd9

        



0 0
原创粉丝点击