今天白天遇到一个问题,要求判断一个已知表名的表是否在数据库存在的方法,这种问题还是挺让人郁闷了,先 GG,后 baidu,结果找到的方法要么只能适用于专用的数据库,要么就是没有考虑到 X 排他锁的问题。不过还好想到了 SUN 的 API,在 java.sql 包下面有这样一个接口 DatabaseMetaData 可以一用,方法很简单获取数据库 meta 中的表中是否有你要的就好,而且只要是你的 JDBC 驱动支持就好,通用性很强,写了点 DEMO 代码给大家参考
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
//detec unknow tables by name
// TableName
public class Main {
public static void main(String[] argv) throws Exception {
Connection c = null; //db connection
DatabaseMetaData dbm = c.getMetaData();
ResultSet rs = dbm.getTables(null, null, "tablename", null);
if (rs.next()) {
System.out.println("Exists");
}
else {
System.out.println("Not Exist");
}
}
}
下面是 getTables 的函数原型 public ResultSet getTables (String catalog,String schemaPattern, String tableNamePattern,String [] types) throws SQLException 对应参数说明如下: catalog , 不用说了,目录名,一般就是数据库的名称 test 的数据库就是 test,null 的话会搜索所有表 schemaPattern, 是匹配数据表的模式,null 的话就不考虑 schema 了 tableNamePattern, 数据表名称的匹配,我上面直接用的表名,只能匹配一张表,这里可以用正则实现多表匹配 types 数组,是数据表的类型,比如 Mysql 常用的 MyISAM 和 InnoDB,可以查找多种类型的表