148 lines
2.8 KiB
Java
148 lines
2.8 KiB
Java
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<Table> tables;
|
|
|
|
public Schema(Connection database){
|
|
this.database = database;
|
|
this.tables = new ArrayList<Schema.Table>();
|
|
|
|
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<Column> columns;
|
|
|
|
public Table(String name) throws SQLException{
|
|
this.name = name;
|
|
this.columns = new ArrayList<Schema.Table.Column>();
|
|
scan();
|
|
}
|
|
public Table(){
|
|
this.name = "";
|
|
this.columns = new ArrayList<Schema.Table.Column>();
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|