IT-KIMI_SHI\SINOIT.KIMI
2018-06-01 521993214708c66a5498bd669c94a661c11484b2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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;
    }
    
}