package com.hackerdude.apps.sqlide.plugins.browser.browsejdbc; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import com.hackerdude.apps.sqlide.dataaccess.DatabaseProcess; import com.hackerdude.apps.sqlide.pluginapi.NodeIDECategory; /** * A node for category columns. * * @author David Martinez * @version 1.0 */ public class CategoryColumnsNode extends NodeIDECategory { String catalogName; private int iColumnCount; String tableName; public CategoryColumnsNode(String tableName, DatabaseProcess proc, String catalogName) { super("Columns", proc); this.catalogName = catalogName; this.tableName = tableName; } public void readChildren() { Connection conn = null; try { ArrayList columnNames = new ArrayList(); conn = databaseProcess.getConnection(); ResultSet rs = conn.getMetaData().getColumns(catalogName, null, tableName, null); iColumnCount = 0; while ( rs.next() ) { iColumnCount++; String columnName = rs.getString("COLUMN_NAME"); String typeName = rs.getString("TYPE_NAME"); int columnSize = -999; try { columnSize = rs.getInt("COLUMN_SIZE"); } catch ( Exception exc ) { } int iNullable = -999; try { iNullable = rs.getInt("NULLABLE"); } catch ( Exception exc ) { } boolean nullable = ( iNullable == DatabaseMetaData.columnNullable ); if ( ! columnNames.contains(columnName) ) { ItemTableColumnNode columnNode = new ItemTableColumnNode(catalogName, tableName, columnName, typeName, columnSize, nullable, databaseProcess ); add(columnNode); columnNames.add(columnName); } } rs.close(); databaseProcess.returnConnection(conn); } catch ( SQLException exc ) { exc.printStackTrace(); databaseProcess.returnConnection(conn); } } public String getInfo() { return "<HTML><P><B>"+iColumnCount+"</B> columns for <B>"+tableName+"</B>"; } }