package frame.data.meta; import java.sql.Connection; import java.sql.ResultSetMetaData; import java.sql.SQLException; import frame.persist.SQLRunner; import frame.persist.loader.ResultMetaFieldReader; import frame.persist.IMetaDataLoader; public class MetaDataLoader implements IMetaDataLoader { private String tableName; private EntityMeta entityMeta; private String schema; public MetaDataLoader(String table) { tableName = table; } public String getTableName() { if (schema != null) { return schema + "." + tableName; } return tableName; } public void load(ResultSetMetaData metaData) throws Exception { ResultMetaFieldReader fieldReader = new ResultMetaFieldReader(metaData); entityMeta = new EntityMeta(tableName, fieldReader); } public EntityMeta getEntityMeta() throws Exception { return getCoreTable(null); } public EntityMeta getCoreTable(Connection conn) throws Exception { if (entityMeta == null) { synchronized (this) { if (entityMeta == null) { SQLRunner.getTableMetaData(conn, this); } } } return entityMeta; } public void setSchema(String schema) { this.schema = schema; } public static int[] getFieldIndex(ResultSetMetaData metaData, String[] fieldnames) throws SQLException { ResultMetaFieldReader fieldReader = new ResultMetaFieldReader(metaData); EntityMeta tableMeta = new EntityMeta("anymous", fieldReader); int[] result = new int[fieldnames.length]; for (int i = 0; i < fieldnames.length; i++) { String fieldname = fieldnames[i]; result[i] = tableMeta.getIndex(fieldname) + 1; } return result; } public static int getFieldIndex(ResultSetMetaData metaData, String fieldname) throws SQLException { ResultMetaFieldReader fieldReader = new ResultMetaFieldReader(metaData); EntityMeta tableMeta = new EntityMeta("anymous", fieldReader); return tableMeta.getIndex(fieldname) + 1; } }