sql.Schema hinzugefügt

thobaben_serialize
Harald Wolff 2016-10-26 19:30:38 +02:00
parent 1b29de87ef
commit 32059369c6
1 changed files with 147 additions and 0 deletions

View File

@ -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<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);
}
}
}
}
}