📄 dbinfoimpl.java
字号:
package util.database;
import java.sql.*;
import java.util.*;
/**
* DBInfoImpl,得到数据库的基本信息
*
* @author Michael Zeng
* @version 1.0 September 18, 2002
*/
public class DBInfoImpl implements DBInfo
{
private Connection conn = null;
private DatabaseMetaData dbmd = null;
private ArrayList alTables = null;
private HashMap hmTableColumns = null;
DBInfoImpl(){}
/**
* 指定一个数据库连接
*
* @param conn 给定的数据库连接
*/
public void setConnection(Connection conn)
{
this.conn = conn;
}
/**
* 返回一个数据库中的所有表的名称
*
* @return String[] 一个数据库中的所有表的名称
*
* @throws Exception
*/
public String[] getTables() throws Exception
{
//先检查是否需要查询数据库
if(alTables == null)
{
alTables = new ArrayList();
if(dbmd == null) setDBMD();
ResultSet rsTables = dbmd.getTables(null, null,null, new String[] {"TABLE"});
while (rsTables.next())
{
alTables.add(rsTables.getString("TABLE_NAME"));
}// end of while
}
if(alTables.size() == 0) return new String[0];
return (String[])alTables.toArray(new String[1]);
}
/**
* 返回数据库中某个特定表的所有列的名称
*
* @param table 指定的表名称
* @return String[] 所有列的名称
*
* @throws Exception
*/
public String[] getColumns(String table) throws Exception
{
if (hmTableColumns == null) hmTableColumns = new HashMap();
ArrayList alColumns = new ArrayList();
//先检查是否需要查询数据库
if (!hmTableColumns.containsKey(table)) getTableColumns(table);
ResultSet rsColumns = (ResultSet)hmTableColumns.get(table);
while (rsColumns.next())
{
alColumns.add(rsColumns.getString("COLUMN_NAME"));
}// end of while
if(alColumns.size() == 0) return new String[0];
return (String[])alColumns.toArray(new String[1]);
}
/**
* 返回指定数据库表中某个指定列的类型
*
* @param table 指定数据库表
* @param column 指定的列
* @return 列的类型,出现异常则返回null
*
* @throws Exception
*/
public String getColumnType(String table, String column) throws Exception
{
if (hmTableColumns == null) hmTableColumns = new HashMap();
String columnType = null;
//先检查是否需要查询数据库
if (!hmTableColumns.containsKey(table)) getTableColumns(table);
ResultSet rsColumns = (ResultSet)hmTableColumns.get(table);
rsColumns.beforeFirst();
while (rsColumns.next())
{
if(column.equalsIgnoreCase(rsColumns.getString("COLUMN_NAME")))
{
columnType = rsColumns.getString("TYPE_NAME");
break;
}
}// end of while
return columnType;
}
/**
* 给定名称的数据表是否已经存在
*
* @param table 表名称
* @return 如果已经存在,返回true
*
* @throws Exception
*/
public boolean isTableExist(String table) throws Exception
{
//先检查是否需要查询数据库
if(alTables == null) this.getTables();
if(alTables.contains(table))
return true;
else
return false;
}
/**
* 内部使用的helper方法,设置元数据
*
*@throws SQLException
*/
private void setDBMD() throws SQLException
{
dbmd = conn.getMetaData();
}
/**
* helper方法,取得一个指定表的列信息,存放在一个HashMap中
*
* @param table 指定的表名称
*
* @throws Exception
*/
private void getTableColumns(String table) throws Exception
{
if(dbmd == null) setDBMD();
ResultSet rsColumns = dbmd.getColumns(null, null, table, null);
hmTableColumns.put(table, rsColumns);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -