Skip to content

Commit f6d5de6

Browse files
committed
fix: 修复 oracle 大数序列化问题
1 parent b0b165c commit f6d5de6

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

backend/framework/src/main/java/org/jumpserver/chen/framework/datasource/base/BaseSQLActuator.java

+10-5
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement;
1111
import lombok.Getter;
1212
import lombok.extern.slf4j.Slf4j;
13+
import org.apache.commons.lang3.StringUtils;
1314
import org.jumpserver.chen.framework.datasource.ConnectionManager;
1415
import org.jumpserver.chen.framework.datasource.entity.resource.Field;
1516
import org.jumpserver.chen.framework.datasource.sql.*;
@@ -19,6 +20,7 @@
1920
import org.jumpserver.chen.framework.utils.PageUtils;
2021
import org.jumpserver.chen.framework.utils.ReflectUtils;
2122

23+
import java.math.BigDecimal;
2224
import java.math.BigInteger;
2325
import java.sql.*;
2426
import java.util.ArrayList;
@@ -149,7 +151,10 @@ private void executeStatement(SQLExecutePlan plan, Statement statement, SQLQuery
149151

150152
for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) {
151153
Field field = new Field();
152-
field.setName(resultSet.getMetaData().getColumnName(i));
154+
155+
var fieldName = StringUtils.isNotEmpty(resultSet.getMetaData().getColumnLabel(i)) ?
156+
resultSet.getMetaData().getColumnLabel(i) : resultSet.getMetaData().getColumnName(i);
157+
field.setName(fieldName);
153158
result.getFields().add(field);
154159
}
155160

@@ -160,12 +165,12 @@ private void executeStatement(SQLExecutePlan plan, Statement statement, SQLQuery
160165
var obj = resultSet.getObject(i);
161166
if (obj instanceof Timestamp timestamp) {
162167
fs.add(new Date(timestamp.getTime()));
163-
} else if (obj instanceof Long l) {
164-
fs.add(l.toString());
165-
} else if (obj instanceof BigInteger b) {
166-
fs.add(b.toString());
168+
} else if (obj instanceof Long || obj instanceof BigDecimal || obj instanceof BigInteger) {
169+
fs.add(obj.toString());
167170
} else if (obj instanceof byte[]) {
168171
fs.add(HexUtils.bytesToHex((byte[]) obj));
172+
} else if (obj instanceof Blob) {
173+
fs.add(HexUtils.bytesToHex(((Blob) obj).getBytes(1, (int) ((Blob) obj).length())));
169174
} else {
170175
fs.add(obj);
171176
}

0 commit comments

Comments
 (0)