1.修复mysql数据库因数据库名包含特殊字符导致的报错问题

2.修复oracle分页语句错误
3.oracle表信息sql补全
This commit is contained in:
diantu
2023-01-17 13:57:12 +08:00
parent 8689918837
commit 5b39cfe2f1
3 changed files with 280 additions and 190 deletions

View File

@@ -22,7 +22,16 @@
</select> </select>
<select id="getTableStatus" resultType="com.zyplayer.doc.db.controller.vo.TableStatusVo"> <select id="getTableStatus" resultType="com.zyplayer.doc.db.controller.vo.TableStatusVo">
select 1 select dt.TABLE_NAME as name,
dt.NUM_ROWS as "rows",
dt.AVG_ROW_LEN as avgRowLength,
do.CREATED as createTime,
do.LAST_DDL_TIME as updateTime,
dtc.COMMENTS as "comment"
from dba_tables dt
left join dba_objects do on do.owner = dt.owner and do.object_name = dt.table_name
left join dba_tab_comments dtc on dtc.owner = dt.owner and dtc.table_name = dt.table_name
where dt.owner = #{dbName} and dt.table_name = #{tableName}
</select> </select>
<!-- 获取表列表 --> <!-- 获取表列表 -->

View File

@@ -2,6 +2,7 @@ package com.zyplayer.doc.db.service.database;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import com.zyplayer.doc.db.controller.param.DataViewParam;
import com.zyplayer.doc.db.controller.vo.TableDdlVo; import com.zyplayer.doc.db.controller.vo.TableDdlVo;
import com.zyplayer.doc.db.framework.db.dto.ColumnInfoDto; import com.zyplayer.doc.db.framework.db.dto.ColumnInfoDto;
import com.zyplayer.doc.db.framework.db.dto.ProcedureDto; import com.zyplayer.doc.db.framework.db.dto.ProcedureDto;
@@ -48,6 +49,60 @@ public class MysqlServiceImpl extends DbBaseService {
return null; return null;
} }
/**
* 获取查询总条数的SQL(mysql数据库名中含有 - 等特殊字符,需要用反引号包裹)
*
* @author diantu
* @since 2023年1月16日
*/
@Override
public String getQueryCountSql(DataViewParam dataViewParam) {
StringBuilder sqlSb = new StringBuilder();
sqlSb.append(String.format("select count(1) as counts from %s.%s", "`"+dataViewParam.getDbName()+"`", dataViewParam.getTableName()));
if (StringUtils.isNotBlank(dataViewParam.getCondition())) {
sqlSb.append(String.format(" where %s", dataViewParam.getCondition()));
}
return sqlSb.toString();
}
/**
* 获取全量数据查询的SQL(mysql数据库名中含有 - 等特殊字符,需要用反引号包裹)
*
* @author diantu
* @since 2023年1月17日
*/
@Override
public String getQueryAllSql(DataViewParam dataViewParam) {
String queryColumns = StringUtils.defaultIfBlank(dataViewParam.getRetainColumn(), "*");
StringBuilder sqlSb = new StringBuilder();
sqlSb.append(String.format("select %s from %s.%s", queryColumns, "`" + dataViewParam.getDbName() + "`", dataViewParam.getTableName()));
if (StringUtils.isNotBlank(dataViewParam.getCondition())) {
sqlSb.append(String.format(" where %s", dataViewParam.getCondition()));
}
return sqlSb.toString();
}
/**
* 获取分页查询的SQL(mysql数据库名中含有 - 等特殊字符,需要用反引号包裹)
*
* @author diantu
* @since 2023年1月17日
*/
@Override
public String getQueryPageSql(DataViewParam dataViewParam) {
String queryColumns = StringUtils.defaultIfBlank(dataViewParam.getRetainColumn(), "*");
StringBuilder sqlSb = new StringBuilder();
sqlSb.append(String.format("select %s from %s.%s", queryColumns, "`" + dataViewParam.getDbName() + "`", dataViewParam.getTableName()));
if (StringUtils.isNotBlank(dataViewParam.getCondition())) {
sqlSb.append(String.format(" where %s", dataViewParam.getCondition()));
}
if (StringUtils.isNotBlank(dataViewParam.getOrderColumn()) && StringUtils.isNotBlank(dataViewParam.getOrderType())) {
sqlSb.append(String.format(" order by %s %s", dataViewParam.getOrderColumn(), dataViewParam.getOrderType()));
}
sqlSb.append(String.format(" limit %s offset %s", dataViewParam.getPageSize(), dataViewParam.getOffset()));
return sqlSb.toString();
}
@Override @Override
public TableDdlVo getTableDdl(Long sourceId, String dbName, String tableName) { public TableDdlVo getTableDdl(Long sourceId, String dbName, String tableName) {
BaseMapper baseMapper = this.getViewAuthBaseMapper(sourceId); BaseMapper baseMapper = this.getViewAuthBaseMapper(sourceId);

View File

@@ -1,6 +1,8 @@
package com.zyplayer.doc.db.service.database; package com.zyplayer.doc.db.service.database;
import com.zyplayer.doc.db.controller.param.DataViewParam;
import com.zyplayer.doc.db.framework.db.enums.DatabaseProductEnum; import com.zyplayer.doc.db.framework.db.enums.DatabaseProductEnum;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
@@ -26,4 +28,28 @@ public class OracleServiceImpl extends DbBaseService {
public String getUseDbSql(String dbName) { public String getUseDbSql(String dbName) {
return null; return null;
} }
/**
* 获取分页查询的SQL(oracle分页)
*
* @author diantu
* @since 2023年1月17日
*/
@Override
public String getQueryPageSql(DataViewParam dataViewParam) {
String queryColumns = StringUtils.defaultIfBlank(dataViewParam.getRetainColumn(), "*");
StringBuilder sqlSb = new StringBuilder();
sqlSb.append(String.format("select %s from %s.%s", queryColumns, dataViewParam.getDbName(), dataViewParam.getTableName()));
if (StringUtils.isNotBlank(dataViewParam.getCondition())) {
sqlSb.append(String.format(" where %s", dataViewParam.getCondition()));
}
if (StringUtils.isNotBlank(dataViewParam.getOrderColumn()) && StringUtils.isNotBlank(dataViewParam.getOrderType())) {
sqlSb.append(String.format(" order by %s %s", dataViewParam.getOrderColumn(), dataViewParam.getOrderType()));
}
StringBuilder sqlSbFinal = new StringBuilder();
Integer pageSize = dataViewParam.getPageSize() * dataViewParam.getPageNum();
Integer offsetSize = dataViewParam.getPageSize() * (dataViewParam.getPageNum() - 1) + 1;
sqlSbFinal.append(String.format("select * from ( select %s from %s", queryColumns + ",rownum rn", "(" + sqlSb + ") where rownum<=" + pageSize + " ) t2 where t2.rn >=" + offsetSize));
return sqlSbFinal.toString();
}
} }