diff --git a/src/org/hwo/sql/Schema.java b/src/org/hwo/sql/Schema.java new file mode 100644 index 0000000..2f8698f --- /dev/null +++ b/src/org/hwo/sql/Schema.java @@ -0,0 +1,147 @@ +package org.hwo.sql; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.hwo.StringHelper; + +public class Schema { + + Connection database; + List tables; + + public Schema(Connection database){ + this.database = database; + this.tables = new ArrayList(); + + scanTables(); + } + + private void scanTables(){ + ResultSet rsTables; + try { + rsTables = database.getMetaData().getTables(null, null, null, new String[]{"TABLE"}); + while (rsTables.next()){ + tables.add(new Table(rsTables.getString("TABLE_NAME"))); + } + } catch (SQLException e) { + e.printStackTrace(); + } + + } + + + public void print(){ + + for (Table t: tables){ + System.err.println(t.toString()); + } + } + + + public class Table { + private String name; + private ArrayList columns; + + public Table(String name) throws SQLException{ + this.name = name; + this.columns = new ArrayList(); + scan(); + } + public Table(){ + this.name = ""; + this.columns = new ArrayList(); + } + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + Column[] getColumns(){ + return columns.toArray(new Column[0]); + } + + Column getColumn(String name){ + for (Column c: columns){ + if (c.getName().equals(name)) + return c; + } + return null; + } + + void addColumn(Column c){ + columns.add(c); + } + void removeColumn(Column c){ + columns.remove(c); + } + void removeColumn(String name){ + columns.remove(getColumn(name)); + } + + private void scan() throws SQLException { + ResultSet rsColumns = database.getMetaData().getColumns(null, null, name, null); + + while (rsColumns.next()){ + addColumn(new Column(rsColumns.getString("COLUMN_NAME"), rsColumns.getString("TYPE_NAME"), rsColumns.getInt("COLUMN_SIZE"))); + } + + } + + + @Override + public String toString() { + return String.format("TABLE %s (%s)",name,StringHelper.join(columns, ",")); + } + + public class Column { + private String name; + private String sqltype; + private Integer size; + + public Column(String name,String sqltype,Integer size) { + this.name = name; + this.sqltype = sqltype; + this.size = size; + } + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + public String getSqltype() { + return sqltype; + } + public void setSqltype(String sqltype) { + this.sqltype = sqltype; + } + + public Integer getSize() { + return size; + } + public void setSize(Integer size) { + this.size = size; + } + + @Override + public String toString() { + if (!size.equals(0)){ + return String.format("%s %s(%d)", name, sqltype, size); + } else { + return String.format("%s %s", name, sqltype); + } + } + } + + } + +}