diff --git a/backend/pom.xml b/backend/pom.xml index 3f4ead7d7b..88b4824bc1 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -91,6 +91,11 @@ mysql-connector-java runtime + + com.microsoft.sqlserver + mssql-jdbc + runtime + com.github.pagehelper pagehelper @@ -409,33 +414,6 @@ 2.6 - - org.apache.maven.plugins - maven-antrun-plugin - - - main-class-placement - generate-resources - - - - - - - - - - - - - - - - run - - - - org.mybatis.generator mybatis-generator-maven-plugin diff --git a/backend/src/main/java/io/dataease/datasource/constants/DatasourceTypes.java b/backend/src/main/java/io/dataease/datasource/constants/DatasourceTypes.java index 1c3860db49..e2982eb4cd 100644 --- a/backend/src/main/java/io/dataease/datasource/constants/DatasourceTypes.java +++ b/backend/src/main/java/io/dataease/datasource/constants/DatasourceTypes.java @@ -1,5 +1,5 @@ package io.dataease.datasource.constants; public enum DatasourceTypes { - mysql + mysql, sqlServer } diff --git a/backend/src/main/java/io/dataease/datasource/dto/JdbcDTO.java b/backend/src/main/java/io/dataease/datasource/dto/JdbcDTO.java new file mode 100644 index 0000000000..4f5c6b822a --- /dev/null +++ b/backend/src/main/java/io/dataease/datasource/dto/JdbcDTO.java @@ -0,0 +1,16 @@ +package io.dataease.datasource.dto; + + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class JdbcDTO { + private String host; + private Integer port; + private String username; + private String password; + private String dataBase; + private String dataSourceType = "jdbc"; +} diff --git a/backend/src/main/java/io/dataease/datasource/dto/MysqlConfigrationDTO.java b/backend/src/main/java/io/dataease/datasource/dto/MysqlConfigrationDTO.java index a7197eb75c..9e2d444480 100644 --- a/backend/src/main/java/io/dataease/datasource/dto/MysqlConfigrationDTO.java +++ b/backend/src/main/java/io/dataease/datasource/dto/MysqlConfigrationDTO.java @@ -6,20 +6,11 @@ import org.apache.commons.lang3.StringUtils; @Getter @Setter -public class MysqlConfigrationDTO { - private String host; - private Integer port; - private String username; - private String password; - private String jdbc; - private String dataBase; +public class MysqlConfigrationDTO extends JdbcDTO { + private String driver = "com.mysql.cj.jdbc.Driver"; public String getJdbc(){ - if(StringUtils.isNotEmpty(jdbc)){ - return jdbc; - }else { - return "jdbc:mysql://HOSTNAME:PORT/DATABASE".replace("HOSTNAME", host).replace("PORT", port.toString()).replace("DATABASE", dataBase); - } + return "jdbc:mysql://HOSTNAME:PORT/DATABASE".replace("HOSTNAME", getHost()).replace("PORT", getPort().toString()).replace("DATABASE", getDataBase()); } } diff --git a/backend/src/main/java/io/dataease/datasource/dto/SqlServerConfigration.java b/backend/src/main/java/io/dataease/datasource/dto/SqlServerConfigration.java new file mode 100644 index 0000000000..47ee64bce1 --- /dev/null +++ b/backend/src/main/java/io/dataease/datasource/dto/SqlServerConfigration.java @@ -0,0 +1,16 @@ +package io.dataease.datasource.dto; + +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.StringUtils; + + +@Getter +@Setter +public class SqlServerConfigration extends JdbcDTO { + private String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; + + public String getJdbc(){ + return "jdbc:sqlserver://HOSTNAME:PORT;DatabaseName=DATABASE".replace("HOSTNAME", getHost()).replace("PORT", getPort().toString()).replace("DATABASE", getDataBase()); + } +} diff --git a/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java b/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java index e3856cbd18..d3c94c8230 100644 --- a/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java +++ b/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java @@ -3,6 +3,7 @@ package io.dataease.datasource.provider; import com.google.gson.Gson; import io.dataease.datasource.constants.DatasourceTypes; import io.dataease.datasource.dto.MysqlConfigrationDTO; +import io.dataease.datasource.dto.SqlServerConfigration; import io.dataease.datasource.dto.TableFiled; import io.dataease.datasource.request.DatasourceRequest; import org.apache.commons.lang3.StringUtils; @@ -13,13 +14,14 @@ import java.util.*; @Service("jdbc") public class JdbcProvider extends DatasourceProvider{ + @Override public List getData(DatasourceRequest datasourceRequest) throws Exception { List list = new LinkedList<>(); try ( - Connection connection = getConnection(datasourceRequest); - Statement stat = connection.createStatement(); - ResultSet rs = stat.executeQuery(datasourceRequest.getQuery()) + Connection connection = getConnection(datasourceRequest); + Statement stat = connection.createStatement(); + ResultSet rs = stat.executeQuery(datasourceRequest.getQuery()) ) { ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount(); @@ -49,11 +51,7 @@ public class JdbcProvider extends DatasourceProvider{ @Override public List getTables(DatasourceRequest datasourceRequest) throws Exception { List tables = new ArrayList<>(); - - String queryStr = "show tables"; - if(StringUtils.isNotEmpty(datasourceRequest.getQuery())){ - queryStr = datasourceRequest.getQuery(); - } + String queryStr = getTablesSql(datasourceRequest); try (Connection con = getConnection(datasourceRequest); Statement ps = con.createStatement()) { ResultSet resultSet = ps.executeQuery(queryStr); while (resultSet.next()){ @@ -74,7 +72,7 @@ public class JdbcProvider extends DatasourceProvider{ DatabaseMetaData databaseMetaData = connection.getMetaData(); ResultSet resultSet = databaseMetaData.getColumns(null, "%", datasourceRequest.getTable().toUpperCase(), "%"); while (resultSet.next()) { - String tableName=resultSet.getString("TABLE_NAME"); + String tableName = resultSet.getString("TABLE_NAME"); String database = resultSet.getString("TABLE_CAT"); if(tableName.equals(datasourceRequest.getTable()) && database.equalsIgnoreCase(getDatabase(datasourceRequest))){ TableFiled tableFiled = new TableFiled(); @@ -100,7 +98,7 @@ public class JdbcProvider extends DatasourceProvider{ @Override public void test(DatasourceRequest datasourceRequest) throws Exception { - String queryStr = "show tables"; + String queryStr = getTablesSql(datasourceRequest); try (Connection con = getConnection(datasourceRequest); Statement ps = con.createStatement()) { ResultSet resultSet = ps.executeQuery(queryStr); } catch (Exception e) { @@ -122,6 +120,13 @@ public class JdbcProvider extends DatasourceProvider{ driver = mysqlConfigrationDTO.getDriver(); jdbcurl = mysqlConfigrationDTO.getJdbc(); break; + case sqlServer: + SqlServerConfigration sqlServerConfigration= new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), SqlServerConfigration.class); + username = sqlServerConfigration.getUsername(); + password = sqlServerConfigration.getPassword(); + driver = sqlServerConfigration.getDriver(); + jdbcurl = sqlServerConfigration.getJdbc(); + break; default: break; } @@ -141,45 +146,23 @@ public class JdbcProvider extends DatasourceProvider{ case mysql: MysqlConfigrationDTO mysqlConfigrationDTO = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), MysqlConfigrationDTO.class); return mysqlConfigrationDTO.getDataBase(); + case sqlServer: + SqlServerConfigration sqlServerConfigration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), SqlServerConfigration.class); + return sqlServerConfigration.getDataBase(); default: return null; } } - private static String getSchema(Connection conn) throws Exception { - String schema; - schema = conn.getMetaData().getUserName(); - System.out.println(schema); - if ((schema == null) || (schema.length() == 0)) { - throw new Exception("ORACLE数据库模式不允许为空"); - } - return schema.toUpperCase().toString(); - } - - private static String changeDbType(String dbType) { - dbType = dbType.toUpperCase(); - switch(dbType){ - case "VARCHAR": - case "VARCHAR2": - case "CHAR": - return "1"; - case "NUMBER": - case "DECIMAL": - return "4"; - case "INT": - case "SMALLINT": - case "INTEGER": - return "2"; - case "BIGINT": - return "6"; - case "DATETIME": - case "TIMESTAMP": - case "DATE": - return "7"; + private String getTablesSql(DatasourceRequest datasourceRequest){ + DatasourceTypes datasourceType = DatasourceTypes.valueOf(datasourceRequest.getDatasource().getType()); + switch (datasourceType){ + case mysql: + return "show tables;"; + case sqlServer: + return "SELECT TABLE_NAME FROM fit2cloud2.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE';"; default: - return "1"; + return "show tables;"; } } - - } diff --git a/backend/src/main/java/io/dataease/datasource/provider/ProviderFactory.java b/backend/src/main/java/io/dataease/datasource/provider/ProviderFactory.java index 1866664756..244a3ccde3 100644 --- a/backend/src/main/java/io/dataease/datasource/provider/ProviderFactory.java +++ b/backend/src/main/java/io/dataease/datasource/provider/ProviderFactory.java @@ -19,12 +19,12 @@ public class ProviderFactory implements ApplicationContextAware { } public static DatasourceProvider getProvider(String type){ - System.out.println(type); DatasourceTypes datasourceType = DatasourceTypes.valueOf(type); - System.out.println(datasourceType.name()); switch (datasourceType){ case mysql: return context.getBean("jdbc", DatasourceProvider.class); + case sqlServer: + return context.getBean("jdbc", DatasourceProvider.class); default: return context.getBean("jdbc", DatasourceProvider.class); } diff --git a/backend/src/main/java/io/dataease/datasource/request/DatasourceRequest.java b/backend/src/main/java/io/dataease/datasource/request/DatasourceRequest.java index 74521fd605..60d7b4f1b0 100644 --- a/backend/src/main/java/io/dataease/datasource/request/DatasourceRequest.java +++ b/backend/src/main/java/io/dataease/datasource/request/DatasourceRequest.java @@ -4,7 +4,6 @@ import io.dataease.base.domain.Datasource; import lombok.Getter; import lombok.Setter; -import javax.sql.DataSource; @Getter @Setter diff --git a/backend/src/main/java/io/dataease/datasource/service/DatasourceService.java b/backend/src/main/java/io/dataease/datasource/service/DatasourceService.java index e81a18fe25..b95ed98090 100644 --- a/backend/src/main/java/io/dataease/datasource/service/DatasourceService.java +++ b/backend/src/main/java/io/dataease/datasource/service/DatasourceService.java @@ -1,12 +1,9 @@ package io.dataease.datasource.service; -import com.google.gson.Gson; import io.dataease.base.domain.*; import io.dataease.base.mapper.*; import io.dataease.commons.exception.DEException; -import io.dataease.datasource.dto.MysqlConfigrationDTO; import io.dataease.datasource.provider.DatasourceProvider; -import io.dataease.datasource.provider.JdbcProvider; import io.dataease.datasource.provider.ProviderFactory; import io.dataease.datasource.request.DatasourceRequest; import org.apache.commons.collections.CollectionUtils; @@ -15,10 +12,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.ArrayList; import java.util.List; import java.util.UUID; -import java.util.stream.Collectors; @Service @Transactional(rollbackFor = Exception.class) diff --git a/frontend/src/business/components/settings/system/Datasource.vue b/frontend/src/business/components/settings/system/Datasource.vue index faafa93ef8..0806eb926c 100644 --- a/frontend/src/business/components/settings/system/Datasource.vue +++ b/frontend/src/business/components/settings/system/Datasource.vue @@ -34,29 +34,29 @@ - + + :key="item.name" + :label="item.name" + :value="item.name"> - + - + - + - + - + @@ -84,19 +84,19 @@ {min: 2, max: 50, message: this.$t('commons.input_limit', [2, 50]), trigger: 'blur'}]"> - + - + - + - + - + @@ -169,7 +169,7 @@ tableData: [], memberLineData: [], form: {configuration: {}}, - allTypes: ['mysql', 'oracle'], + allTypes: [{name: "mysql", type: "jdbc"}, {name: "sqlServer", type: "jdbc"}], memberForm: {}, rule: { name: [ @@ -320,6 +320,13 @@ } }) }, + changeType(){ + for (let i = 0; i < this.allTypes.length; i++) { + if(this.allTypes[i].name == this.form.type){ + this.form.configuration.dataSourceType = this.allTypes[i].type; + } + } + }, initTableData() { this.result = this.$post(this.queryPath + "/" + this.currentPage + "/" + this.pageSize, this.condition, response => { let data = response.data; diff --git a/frontend/src/i18n/zh-CN.js b/frontend/src/i18n/zh-CN.js index a03eb0e502..e9cfd780ae 100644 --- a/frontend/src/i18n/zh-CN.js +++ b/frontend/src/i18n/zh-CN.js @@ -1573,7 +1573,7 @@ export default { special_characters_are_not_supported: '格式错误(不支持特殊字符,且不能以\'-\'开头结尾)', none: '无组织', select: '选择组织', - delete_warning: '删除该组织将同步删除该组织下所有相关工作空间和相关工作空间下的所有项目,以及项目中的所有用例、接口测试、性能测试等,确定要删除吗?', + delete_warning: '删除该数据连接将同步删除该数据连接下所有相关的数据集, 确定要删除吗?', service_integration: '服务集成', defect_manage: '缺陷管理平台', message_settings: '消息设置',