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 package com.rapiddweller.platform.db;
28
29 import com.rapiddweller.common.converter.AnyConverter;
30 import com.rapiddweller.model.data.ComplexTypeDescriptor;
31 import com.rapiddweller.model.data.ComponentDescriptor;
32 import com.rapiddweller.model.data.DataModel;
33 import com.rapiddweller.model.data.Entity;
34 import com.rapiddweller.model.data.SimpleTypeDescriptor;
35 import com.rapiddweller.script.PrimitiveType;
36
37 import java.sql.ResultSet;
38 import java.sql.ResultSetMetaData;
39 import java.sql.SQLException;
40
41
42
43
44
45
46
47
48 public class ResultSet2EntityConverter {
49
50
51
52
53
54
55
56
57
58 public static Entity convert(ResultSet resultSet,
59 ComplexTypeDescriptor descriptor)
60 throws SQLException {
61 EntityEntity.html#Entity">Entity entity = new Entity(descriptor);
62 ResultSetMetaData metaData = resultSet.getMetaData();
63 int columnCount = metaData.getColumnCount();
64 for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
65 String columnName = metaData.getColumnName(columnIndex);
66 String typeName = null;
67 if (descriptor != null) {
68 ComponentDescriptor component =
69 descriptor.getComponent(columnName);
70 if (component != null) {
71 SimpleTypeDescriptorcom/rapiddweller/model/data/SimpleTypeDescriptor.html#SimpleTypeDescriptor">SimpleTypeDescriptor type = (SimpleTypeDescriptor) component
72 .getTypeDescriptor();
73 PrimitiveType primitiveType = type.getPrimitiveType();
74 typeName =
75 (primitiveType != null ? primitiveType.getName() :
76 "string");
77 } else {
78 typeName = "string";
79 }
80 } else {
81 typeName = "string";
82 }
83 DataModel dataModel =
84 (descriptor != null ? descriptor.getDataModel() : null);
85 Object javaValue =
86 javaValue(resultSet, columnIndex, typeName, dataModel);
87 entity.setComponent(columnName, javaValue);
88 }
89 return entity;
90 }
91
92
93 private static Object javaValue(ResultSet resultSet, int columnIndex,
94 String primitiveType, DataModel dataModel)
95 throws SQLException {
96 if ("date".equals(primitiveType)) {
97 return resultSet.getDate(columnIndex);
98 } else if ("timestamp".equals(primitiveType)) {
99 return resultSet.getTimestamp(columnIndex);
100 } else if ("string".equals(primitiveType)) {
101 return resultSet.getString(columnIndex);
102 }
103
104 Object driverValue = resultSet.getObject(columnIndex);
105 Object javaValue = driverValue;
106 if (dataModel != null) {
107 Class<?> javaType = dataModel.getBeanDescriptorProvider()
108 .concreteType(primitiveType);
109 javaValue = AnyConverter.convert(driverValue, javaType);
110 }
111 return javaValue;
112 }
113
114 }