20
20
import java .nio .file .Files ;
21
21
import java .sql .Clob ;
22
22
import java .sql .SQLException ;
23
+ import java .text .SimpleDateFormat ;
23
24
import java .time .LocalDateTime ;
24
25
import java .time .format .DateTimeFormatter ;
26
+ import java .util .Date ;
25
27
import java .util .HashMap ;
26
28
import java .util .List ;
27
29
import java .util .Map ;
@@ -101,13 +103,17 @@ private void fullData(SQLQueryResult result) {
101
103
this .data .getData ().clear ();
102
104
103
105
this .getStateManager ().getState ().setTotal (result .getTotal ());
106
+ this .fullDataViewData (this .data , result );
107
+ }
108
+
104
109
110
+ private void fullDataViewData (DataViewData viewData , SQLQueryResult result ) {
105
111
106
- this . data .setFields (result .getFields ());
112
+ viewData .setFields (result .getFields ());
107
113
108
114
Map <String , Integer > fieldNumMap = new HashMap <>();
109
115
110
- this . data .getFields ().forEach (field -> {
116
+ viewData .getFields ().forEach (field -> {
111
117
if (fieldNumMap .containsKey (field .getName ())) {
112
118
var fieldName = field .getName ();
113
119
var num = fieldNumMap .get (field .getName ());
@@ -118,16 +124,16 @@ private void fullData(SQLQueryResult result) {
118
124
}
119
125
});
120
126
121
-
122
127
for (List <Object > row : result .getData ()) {
123
128
Map <String , Object > map = new HashMap <>();
124
129
for (int i = 0 ; i < row .size (); i ++) {
125
- map .put (this . data .getFields ().get (i ).getName (), row .get (i ));
130
+ map .put (viewData .getFields ().get (i ).getName (), row .get (i ));
126
131
}
127
- this . data .getData ().add (map );
132
+ viewData .getData ().add (map );
128
133
}
129
134
}
130
135
136
+
131
137
private static void writeString (BufferedWriter writer , Object object ) throws IOException {
132
138
var str = object .toString ();
133
139
@@ -137,6 +143,35 @@ private static void writeString(BufferedWriter writer, Object object) throws IOE
137
143
writer .write (str );
138
144
}
139
145
146
+ private void writeCSVData (BufferedWriter writer , DataViewData viewData ) throws IOException , SQLException {
147
+
148
+ for (Field field : viewData .getFields ()) {
149
+ writeString (writer , field .getName ());
150
+ writer .write ("," );
151
+ }
152
+ for (Map <String , Object > row : viewData .getData ()) {
153
+ for (Field field : viewData .getFields ()) {
154
+ var obj = row .get (field .getName ());
155
+ if (obj == null ) {
156
+ writer .write ("NULL" );
157
+ writer .write ("," );
158
+ } else if (obj instanceof Clob clob ) {
159
+ writer .write (CodeUtils .escapeCsvValue (clob .getSubString (1 , (int ) clob .length ())));
160
+ writer .write ("," );
161
+ } else if (obj instanceof Date ) {
162
+ SimpleDateFormat fmt = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss" );
163
+ writeString (writer , fmt .format (obj ));
164
+ } else {
165
+ writeString (writer , row .get (field .getName ()));
166
+ writer .write ("," );
167
+ }
168
+ }
169
+ writer .newLine ();
170
+ }
171
+
172
+ writer .newLine ();
173
+ }
174
+
140
175
public void export (String scope ) throws SQLException {
141
176
var session = SessionManager .getCurrentSession ();
142
177
@@ -155,56 +190,16 @@ public void export(String scope) throws SQLException {
155
190
var writer = Files .newBufferedWriter (f .toPath ());
156
191
157
192
if (scope .equals ("current" )) {
158
- for (Field field : this .data .getFields ()) {
159
- writeString (writer , field .getName ());
160
- writer .write ("," );
161
- }
162
- writer .newLine ();
163
-
164
- for (Map <String , Object > row : this .data .getData ()) {
165
- for (Field field : this .data .getFields ()) {
166
- if (row .get (field .getName ()) == null ) {
167
- writer .write ("NULL" );
168
- writer .write ("," );
169
- } else if (row .get (field .getName ()) instanceof Clob clob ) {
170
- writer .write (CodeUtils .escapeCsvValue (clob .getSubString (1 , (int ) clob .length ())));
171
- writer .write ("," );
172
- } else {
173
- writeString (writer , row .get (field .getName ()));
174
- writer .write ("," );
175
- }
176
- }
177
- writer .newLine ();
178
- }
193
+ this .writeCSVData (writer , this .data );
179
194
command .setOutput (String .format ("%d rows exported" , this .data .getData ().size ()));
180
195
}
181
196
182
197
if (scope .equals ("all" )) {
183
198
SQLQueryParams queryParams = new SQLQueryParams ();
184
199
queryParams .setLimit (-1 );
185
200
var result = this .loadDataInterface .loadData (queryParams );
186
-
187
- for (Field field : result .getFields ()) {
188
- writer .write (field .getName ());
189
- writer .write ("," );
190
- }
191
- writer .newLine ();
192
-
193
- for (List <Object > row : result .getData ()) {
194
- for (Object o : row ) {
195
- if (o == null ) {
196
- writer .write ("NULL" );
197
- writer .write ("," );
198
- } else if (o instanceof Clob clob ) {
199
- writer .write (CodeUtils .escapeCsvValue (clob .getSubString (1 , (int ) clob .length ())));
200
- writer .write ("," );
201
- } else {
202
- writer .write (o .toString ());
203
- writer .write ("," );
204
- }
205
- }
206
- writer .newLine ();
207
- }
201
+ var viewData = new DataViewData ();
202
+ this .fullDataViewData (viewData , result );
208
203
command .setOutput (String .format ("%d rows exported" , result .getData ().size ()));
209
204
}
210
205
writer .flush ();
0 commit comments