package com.gitee.dbswitch.common.util;
import cn.hutool.core.codec.Base64;
import cn.hutool.json.JSONUtil;
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.sql.Types;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.Collection;
import java.util.Map;
import java.util.function.Function;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@Slf4j
@UtilityClass
public final class ObjectCastUtils {
/**
* 将任意类型转换为java.lang.Byte类型
*
* @param in 任意类型的对象实例
* @return java.lang.Byte类型
*/
public static Byte castToByte(final Object in) {
if (in instanceof Number) {
return ((Number) in).byteValue();
} else if (in instanceof java.util.Date) {
return Long.valueOf(((java.util.Date) in).getTime()).byteValue();
} else if (in instanceof String) {
try {
return Byte.parseByte(in.toString());
} catch (NumberFormatException e) {
throw new RuntimeException(
String.format("无法将java.lang.String类型转换为java.lang.Byte类型:%s", e.getMessage()));
}
} else if (in instanceof Character) {
try {
return Byte.parseByte(in.toString());
} catch (NumberFormatException e) {
throw new RuntimeException(
String.format("无法将java.lang.Character类型转换为java.lang.Byte类型:%s", e.getMessage()));
}
} else if (in instanceof java.sql.Clob) {
try {
return Byte.parseByte(clob2Str((java.sql.Clob) in));
} catch (NumberFormatException e) {
throw new RuntimeException(
String.format("无法将java.sql.Clob类型转换为java.lang.Byte类型:%s", e.getMessage()));
}
} else if (in instanceof Boolean) {
return (Boolean) in ? (byte) 1 : (byte) 0;
}
return null;
}
public static byte[] castToByteArray(final Object in) {
if (in instanceof byte[]) {
return (byte[]) in;
} else if (in instanceof java.util.Date) {
return in.toString().getBytes();
} else if (in instanceof java.sql.Blob) {
return blob2Bytes((java.sql.Blob) in);
} else if (in instanceof java.lang.String || in instanceof java.lang.Character) {
return in.toString().getBytes();
} else if (in instanceof java.sql.Clob) {
return clob2Str((java.sql.Clob) in).getBytes();
} else {
try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos)) {
oos.writeObject(in);
oos.flush();
return bos.toByteArray();
} catch (Exception e) {
log.error("Field value convert from {} to byte[] failed:", in.getClass().getName(), e);
throw new RuntimeException(e);
}
}
}
/**
* 将任意类型转换为java.lang.Short类型
*
* @param in 任意类型的对象实例
* @return java.lang.Short类型
*/
public static Short castToShort(final Object in) {
if (in instanceof Number) {
return ((Number) in).shortValue();
} else if (in instanceof Byte) {
return (short) (((byte) in) & 0xff);
} else if (in instanceof java.util.Date) {
return (short) ((java.util.Date) in).getTime();
} else if (in instanceof java.util.Calendar) {
return (short) ((java.util.Calendar) in).getTime().getTime();
} else if (in instanceof LocalDateTime) {
return (short) java.sql.Timestamp.valueOf((LocalDateTime) in).getTime();
} else if (in instanceof java.time.OffsetDateTime) {
return (short) java.sql.Timestamp.valueOf(((java.time.OffsetDateTime) in).toLocalDateTime())
.getTime();
} else if (in instanceof String || in instanceof Character) {
try {
String s = in.toString().trim();
if (s.equalsIgnoreCase("true")) {
return Short.valueOf((short) 1);
} else if (s.equalsIgnoreCase("false")) {
return Short.valueOf((short) 0);
} else {
return Short.parseShort(s);
}
} catch (NumberFormatException e) {
throw new RuntimeException(
String.format("无法将java.lang.String类型转换为java.lang.Short类型:%s", e.getMessage()));
}
} else if (in instanceof java.sql.Clob) {
try {
String s = clob2Str((java.sql.Clob) in).trim();
if (s.equalsIgnoreCase("true")) {
return Short.valueOf((short) 1);
} else if (s.equalsIgnoreCase("false")) {
return Short.valueOf((short) 0);
} else {
return Short.parseShort(s);
}
} catch (NumberFormatException e) {
throw new RuntimeException(
String.format("无法将java.sql.Clob类型转换为java.lang.Short类型:%s", e.getMessage()));
}
} else if (in instanceof Boolean) {
return (Boolean) in ? (short) 1 : (short) 0;
}
return null;
}
/**
* 将任意类型转换为java.lang.Integer类型
*
* @param in 任意类型的对象实例
* @return java.lang.Integer类型
*/
public static Integer castToInteger(final Object in) {
if (in instanceof Number) {
return ((Number) in).intValue();
} else if (in instanceof Byte) {
return (((byte) in) & 0xff);
} else if (in instanceof java.util.Date) {
return (int) ((java.util.Date) in).getTime();
} else if (in instanceof java.util.Calendar) {
return (int) ((java.util.Calendar) in).getTime().getTime();
} else if (in instanceof LocalDateTime) {
return (int) java.sql.Timestamp.valueOf((LocalDateTime) in).getTime();
} else if (in instanceof java.time.OffsetDateTime) {
return (int) java.sql.Timestamp.valueOf(((java.time.OffsetDateTime) in).toLocalDateTime())
.getTime();
} else if (in instanceof String || in instanceof Character) {
try {
String s = in.toString().trim();
if (s.equalsIgnoreCase("true")) {
return Integer.valueOf(1);
} else if (s.equalsIgnoreCase("false")) {
return Integer.valueOf(0);
} else {
return Integer.parseInt(s);
}
} catch (NumberFormatException e) {
throw new RuntimeException(
String.format("无法将java.lang.String类型转换为java.lang.Integer类型:%s", e.getMessage()));
}
} else if (in instanceof java.sql.Clob) {
try {
String s = clob2Str((java.sql.Clob) in).trim();
if (s.equalsIgnoreCase("true")) {
return Integer.valueOf(1);
} else if (s.equalsIgnoreCase("false")) {
return Integer.valueOf(0);
} else {
return Integer.parseInt(s);
}
} catch (NumberFormatException e) {
throw new RuntimeException(
String.format("无法将java.sql.Clob类型转换为java.lang.Integer类型:%s", e.getMessage()));
}
} else if (in instanceof Boolean) {
return (Boolean) in ? (int) 1 : (int) 0;
}
return null;
}
/**
* 将任意类型转换为java.lang.Long类型
*
* @param in 任意类型的对象实例
* @return java.lang.Long类型
*/
public static Long castToLong(final Object in) {
if (in instanceof Number) {
return ((Number) in).longValue();
} else if (in instanceof Byte) {
return (long) (((byte) in) & 0xff);
} else if (in instanceof java.util.Date) {
return ((java.util.Date) in).getTime();
} else if (in instanceof java.util.Calendar) {
return ((java.util.Calendar) in).getTime().getTime();
} else if (in instanceof LocalDateTime) {
return java.sql.Timestamp.valueOf((LocalDateTime) in).getTime();
} else if (in instanceof java.time.OffsetDateT
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
异构数据库数据与结构同步工具。dbswitch工具提供源端数据库向目的端数据库的批量迁移同步功能,支持数据的全量和增量方式同步。支持字段类型、主键信息、建表语句等的转换,并生成建表SQL语句。支持基于正则表达式转换的表名与字段名映射转换。基于JDBC的分批次读取源端数据库数据,并基于insert/copy方式将数据分批次写入目的数据库。支持有主键表的 增量变更同步 (变化数据计算Change Data Calculate)功能(千万级以上数据量的性能尚需在生产环境验证)
资源推荐
资源详情
资源评论
收起资源包目录
异构数据库数据与结构同步工具 (595个子文件)
.babelrc 230B
startup.cmd 1KB
datasync.cmd 1KB
version.cmd 315B
build.cmd 153B
app.11c124a4bb7152fd93250fb83b267df7.css 249KB
demo.css 8KB
iconfont.css 486B
Dockerfile 314B
spring.factories 131B
spring.factories 115B
.gitignore 288B
.gitkeep 0B
.gitkeep 0B
.gitkeep 0B
.gitkeep 0B
demo_index.html 10KB
index.html 526B
index.html 286B
hive-jdbc-3.1.2-standalone.jar 69.07MB
mongodb-jdbc-driver-4.10.2-jar-with-dependencies.jar 27.15MB
jdbc-jest-driver-1.0.0-jar-with-dependencies.jar 8.22MB
sqlite-jdbc-3.31.1.jar 6.85MB
ojdbc8-19.3.0.0.jar 4.02MB
db2jcc4-10.1.jar 3.54MB
oscarJDBC8.jar 3.39MB
mysql-connector-java-8.0.17.jar 2.21MB
jconn4.jar 1.81MB
orai18n-19.3.0.0.jar 1.58MB
clickhouse-jdbc-0.4.2.jar 1.17MB
mssql-jdbc-7.2.1.jre8.jar 1.07MB
mssql-jdbc-6.4.0.jre7.jar 1.06MB
HgdbJdbc-6.2.4.jar 1.01MB
kingbase8-8.6.0.jar 1017KB
mysql-connector-java-5.1.41.jar 970KB
opengauss-jdbc-5.0.1.jar 882KB
opengauss-jdbc-3.0.0.jar 825KB
gbase-connector-java-9.5.0.1.jar 823KB
postgresql-42.2.5.jar 807KB
kingbase8-8.2.0.jar 793KB
gbase-connector-java-8.3.81.53.jar 695KB
lz4-java-1.7.1.jar 635KB
mariadb-java-client-2.7.1.jar 610KB
DmJdbcDriver18.jar 598KB
ObjectCastUtils.java 39KB
ReaderTaskThread.java 30KB
DefaultChangeCalculatorService.java 19KB
PostgresTableCopyWriteProvider.java 16KB
SimpleRow.java 16KB
AssignmentService.java 14KB
AbstractMapping.java 14KB
JdbcUrlUtils.java 13KB
ColumnMetaData.java 12KB
MysqlMetadataQueryProvider.java 12KB
AbstractMetadataProvider.java 11KB
ConnectionService.java 11KB
SqlserverMetadataQueryProvider.java 11KB
SybaseMetadataQueryProvider.java 10KB
ProductTypeEnum.java 10KB
ClickhouseMetadataQueryProvider.java 10KB
DefaultTableDataSynchronizeProvider.java 9KB
DataSourceUtils.java 9KB
PostgresMetadataQueryProvider.java 8KB
ExecuteJobTaskRunnable.java 8KB
DefaultMetadataService.java 8KB
DefaultReaderRobot.java 8KB
OracleMetadataQueryProvider.java 8KB
LogAdviceAspect.java 7KB
DB2MetadataQueryProvider.java 7KB
GenerateSqlUtils.java 7KB
ScheduleService.java 7KB
OscarMetadataQueryProvider.java 7KB
MongodbMetadataQueryProvider.java 6KB
MigrationService.java 6KB
KingbaseMetadataQueryProvider.java 6KB
OracleCastUtils.java 6KB
ObjectIdentifier.java 6KB
MetaDataService.java 6KB
DmMetadataQueryProvider.java 6KB
QuartzConfig.java 6KB
PostgresqlConst.java 6KB
ConnectionController.java 6KB
PatternMapperService.java 5KB
HiveMetadataQueryProvider.java 5KB
PgBinaryWriter.java 5KB
DatabaseAwareUtils.java 5KB
SqliteMetadataQueryProvider.java 5KB
DefaultTableDataQueryProvider.java 5KB
TaskEventHub.java 5KB
MetadataProvider.java 5KB
AssignmentController.java 5KB
JdbcTypesUtils.java 5KB
Range.java 4KB
SQLServerConst.java 4KB
SimpleRowWriter.java 4KB
ProductRegisterAutoConfiguration.java 4KB
DefaultWriterRobot.java 4KB
ColumnDescription.java 4KB
MetadataService.java 4KB
WrapHikariDataSource.java 4KB
共 595 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6649
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功