今天用到数据库库的知识,想用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