diff --git a/backend/src/main/java/io/dataease/datasource/provider/DatasourceProvider.java b/backend/src/main/java/io/dataease/datasource/provider/DatasourceProvider.java index 7117254d5a..42c0a1a20a 100644 --- a/backend/src/main/java/io/dataease/datasource/provider/DatasourceProvider.java +++ b/backend/src/main/java/io/dataease/datasource/provider/DatasourceProvider.java @@ -2,43 +2,25 @@ package io.dataease.datasource.provider; import io.dataease.base.domain.Datasource; import io.dataease.datasource.dto.TableFiled; +import io.dataease.datasource.request.DatasourceRequest; import java.util.ArrayList; import java.util.List; public abstract class DatasourceProvider { - protected String query; private int resultLimit = 30000; - protected Datasource datasource; + abstract public List getData(DatasourceRequest datasourceRequest) throws Exception; - public String getQuery() { - return query; - } + abstract public List getTables(DatasourceRequest datasourceRequest) throws Exception; - public void setQuery(String query) { - this.query = query; - } - - public Datasource getDatasource() { - return datasource; - } - - public void setDatasource(Datasource datasource) { - this.datasource = datasource; - } - - abstract public List getData() throws Exception; - - abstract public List getTables() throws Exception; - - public List getTableFileds(String table) throws Exception{ + public List getTableFileds(DatasourceRequest datasourceRequest) throws Exception{ return new ArrayList<>(); }; - public void test() throws Exception { - getData(); + public void test(DatasourceRequest datasourceRequest) throws Exception { + getData(datasourceRequest); } } 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 512003122e..e3856cbd18 100644 --- a/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java +++ b/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java @@ -4,25 +4,22 @@ import com.google.gson.Gson; import io.dataease.datasource.constants.DatasourceTypes; import io.dataease.datasource.dto.MysqlConfigrationDTO; import io.dataease.datasource.dto.TableFiled; +import io.dataease.datasource.request.DatasourceRequest; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; - import java.sql.*; import java.util.*; -import io.dataease.datasource.constants.DatasourceTypes.*; - - @Service("jdbc") public class JdbcProvider extends DatasourceProvider{ @Override - public List getData() throws Exception { + public List getData(DatasourceRequest datasourceRequest) throws Exception { List list = new LinkedList<>(); try ( - Connection connection = getConnection(); + Connection connection = getConnection(datasourceRequest); Statement stat = connection.createStatement(); - ResultSet rs = stat.executeQuery(getQuery()) + ResultSet rs = stat.executeQuery(datasourceRequest.getQuery()) ) { ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount(); @@ -50,11 +47,14 @@ public class JdbcProvider extends DatasourceProvider{ } @Override - public List getTables() throws Exception { + public List getTables(DatasourceRequest datasourceRequest) throws Exception { List tables = new ArrayList<>(); String queryStr = "show tables"; - try (Connection con = getConnection(); Statement ps = con.createStatement()) { + if(StringUtils.isNotEmpty(datasourceRequest.getQuery())){ + queryStr = datasourceRequest.getQuery(); + } + try (Connection con = getConnection(datasourceRequest); Statement ps = con.createStatement()) { ResultSet resultSet = ps.executeQuery(queryStr); while (resultSet.next()){ tables.add(resultSet.getString(1)); @@ -66,17 +66,17 @@ public class JdbcProvider extends DatasourceProvider{ } @Override - public List getTableFileds(String table) throws Exception{ + public List getTableFileds(DatasourceRequest datasourceRequest) throws Exception{ List list = new LinkedList<>(); try ( - Connection connection = getConnection(); + Connection connection = getConnection(datasourceRequest); ) { DatabaseMetaData databaseMetaData = connection.getMetaData(); - ResultSet resultSet = databaseMetaData.getColumns(null, "%", table.toUpperCase(), "%"); + ResultSet resultSet = databaseMetaData.getColumns(null, "%", datasourceRequest.getTable().toUpperCase(), "%"); while (resultSet.next()) { String tableName=resultSet.getString("TABLE_NAME"); String database = resultSet.getString("TABLE_CAT"); - if(tableName.equals(table) && database.equalsIgnoreCase(getDatabase())){ + if(tableName.equals(datasourceRequest.getTable()) && database.equalsIgnoreCase(getDatabase(datasourceRequest))){ TableFiled tableFiled = new TableFiled(); String colName = resultSet.getString("COLUMN_NAME"); tableFiled.setFieldName(colName); @@ -99,24 +99,24 @@ public class JdbcProvider extends DatasourceProvider{ }; @Override - public void test() throws Exception { + public void test(DatasourceRequest datasourceRequest) throws Exception { String queryStr = "show tables"; - try (Connection con = getConnection(); Statement ps = con.createStatement()) { + try (Connection con = getConnection(datasourceRequest); Statement ps = con.createStatement()) { ResultSet resultSet = ps.executeQuery(queryStr); } catch (Exception e) { throw new Exception("ERROR: " + e.getMessage(), e); } } - private Connection getConnection() throws Exception { + private Connection getConnection(DatasourceRequest datasourceRequest) throws Exception { String username = null; String password = null; String driver = null; String jdbcurl = null; - DatasourceTypes datasourceType = DatasourceTypes.valueOf(getDatasource().getType()); + DatasourceTypes datasourceType = DatasourceTypes.valueOf(datasourceRequest.getDatasource().getType()); switch (datasourceType){ case mysql: - MysqlConfigrationDTO mysqlConfigrationDTO = new Gson().fromJson(getDatasource().getConfiguration(), MysqlConfigrationDTO.class); + MysqlConfigrationDTO mysqlConfigrationDTO = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), MysqlConfigrationDTO.class); username = mysqlConfigrationDTO.getUsername(); password = mysqlConfigrationDTO.getPassword(); driver = mysqlConfigrationDTO.getDriver(); @@ -135,11 +135,11 @@ public class JdbcProvider extends DatasourceProvider{ return DriverManager.getConnection(jdbcurl, props); } - private String getDatabase(){ - DatasourceTypes datasourceType = DatasourceTypes.valueOf(getDatasource().getType()); + private String getDatabase(DatasourceRequest datasourceRequest){ + DatasourceTypes datasourceType = DatasourceTypes.valueOf(datasourceRequest.getDatasource().getType()); switch (datasourceType) { case mysql: - MysqlConfigrationDTO mysqlConfigrationDTO = new Gson().fromJson(getDatasource().getConfiguration(), MysqlConfigrationDTO.class); + MysqlConfigrationDTO mysqlConfigrationDTO = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), MysqlConfigrationDTO.class); return mysqlConfigrationDTO.getDataBase(); default: return null; diff --git a/backend/src/main/java/io/dataease/datasource/request/DatasourceRequest.java b/backend/src/main/java/io/dataease/datasource/request/DatasourceRequest.java new file mode 100644 index 0000000000..74521fd605 --- /dev/null +++ b/backend/src/main/java/io/dataease/datasource/request/DatasourceRequest.java @@ -0,0 +1,16 @@ +package io.dataease.datasource.request; + +import io.dataease.base.domain.Datasource; +import lombok.Getter; +import lombok.Setter; + +import javax.sql.DataSource; + +@Getter +@Setter +public class DatasourceRequest { + protected String query; + protected String table; + protected Datasource datasource; + +} 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 f347cce465..e81a18fe25 100644 --- a/backend/src/main/java/io/dataease/datasource/service/DatasourceService.java +++ b/backend/src/main/java/io/dataease/datasource/service/DatasourceService.java @@ -8,6 +8,7 @@ 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; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -65,8 +66,9 @@ public class DatasourceService { public void validate(Datasource datasource)throws Exception { DatasourceProvider datasourceProvider = ProviderFactory.getProvider(datasource.getType()); - datasourceProvider.setDatasource(datasource); - datasourceProvider.test(); + DatasourceRequest datasourceRequest = new DatasourceRequest(); + datasourceRequest.setDatasource(datasource); + datasourceProvider.test(datasourceRequest); }