From 8dbecfc43e936955992dea876edf6e80786c53f2 Mon Sep 17 00:00:00 2001 From: zhouhongfa Date: Fri, 2 Aug 2019 15:35:21 +0800 Subject: [PATCH] =?UTF-8?q?update:=20=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=EF=BC=8C=E5=8E=BB=E6=8E=89=E4=B8=80=E4=BA=9B=E6=B2=A1=E7=94=A8?= =?UTF-8?q?=E7=9A=84=E6=96=B9=E6=B3=95=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/wugui/tool/meta/BaseDatabaseMeta.java | 2 +- .../wugui/tool/meta/DatabaseInterface.java | 32 +++++++------- .../wugui/tool/meta/MySQLDatabaseMeta.java | 16 ++++--- .../wugui/tool/meta/OracleDatabaseMeta.java | 15 ++++--- .../com/wugui/tool/query/BaseQueryTool.java | 38 ++++++----------- .../com/wugui/tool/query/MySQLQueryTool.java | 25 +++++++++++ .../com/wugui/tool/query/OracleQueryTool.java | 24 +++++++++++ .../wugui/tool/query/MySQLQueryToolTest.java | 34 +++------------ .../wugui/tool/query/OracleQueryToolTest.java | 42 +++++++++++++++++++ 9 files changed, 149 insertions(+), 79 deletions(-) create mode 100644 datax-web/src/test/java/com/wugui/tool/query/OracleQueryToolTest.java diff --git a/datax-web/src/main/java/com/wugui/tool/meta/BaseDatabaseMeta.java b/datax-web/src/main/java/com/wugui/tool/meta/BaseDatabaseMeta.java index 53035ecd..32a89daf 100644 --- a/datax-web/src/main/java/com/wugui/tool/meta/BaseDatabaseMeta.java +++ b/datax-web/src/main/java/com/wugui/tool/meta/BaseDatabaseMeta.java @@ -12,7 +12,7 @@ public abstract class BaseDatabaseMeta implements DatabaseInterface { @Override public String getSQLQueryFields(String tableName) { - return "SELECT * FROM " + tableName; + return "SELECT * FROM " + tableName + " where 1=0"; } @Override diff --git a/datax-web/src/main/java/com/wugui/tool/meta/DatabaseInterface.java b/datax-web/src/main/java/com/wugui/tool/meta/DatabaseInterface.java index d2714bc5..fd5d80b8 100644 --- a/datax-web/src/main/java/com/wugui/tool/meta/DatabaseInterface.java +++ b/datax-web/src/main/java/com/wugui/tool/meta/DatabaseInterface.java @@ -10,13 +10,6 @@ public interface DatabaseInterface { */ public String getSQLQueryFields(String tableName); - /** - * 获取表和字段注释的sql语句 - * - * @return The SQL to launch. - */ - public String getSQLQueryComment(String schemaName, String tableName, String columnName); - /** * 获取主键字段 * @@ -24,20 +17,31 @@ public interface DatabaseInterface { */ public String getSQLQueryPrimaryKey(); + public String getSQLQueryTableNameComment(); - /** - * 根据schemaName获取所有的表名和注释 - * - * @return - */ public String getSQLQueryTablesNameComments(); /** - * 根据schemaName tableName 获取所有的表名和注释 + * 获取所有表名的sql * * @return */ - public String getSQLQueryTableNameComment(); + public String getSQLQueryTables(String... args); + + + /** + * 获取所有的字段的sql + * + * @return + */ + public String getSQLQueryColumns(String... args); + + /** + * 获取表和字段注释的sql语句 + * + * @return The SQL to launch. + */ + public String getSQLQueryComment(String schemaName, String tableName, String columnName); // /** // * 查询表名所有字段信息 diff --git a/datax-web/src/main/java/com/wugui/tool/meta/MySQLDatabaseMeta.java b/datax-web/src/main/java/com/wugui/tool/meta/MySQLDatabaseMeta.java index c7e8ad08..cfe59c91 100644 --- a/datax-web/src/main/java/com/wugui/tool/meta/MySQLDatabaseMeta.java +++ b/datax-web/src/main/java/com/wugui/tool/meta/MySQLDatabaseMeta.java @@ -23,12 +23,6 @@ public class MySQLDatabaseMeta extends BaseDatabaseMeta implements DatabaseInter return single; } - @Override - public String getSQLQueryFields(String tableName) { - return "SELECT * FROM " + tableName + " LIMIT 0"; - } - - @Override public String getSQLQueryComment(String schemaName, String tableName, String columnName) { return String.format("SELECT COLUMN_COMMENT FROM information_schema.COLUMNS where TABLE_SCHEMA = '%s' and TABLE_NAME = '%s' and COLUMN_NAME = '%s'", schemaName, tableName, columnName); @@ -38,4 +32,14 @@ public class MySQLDatabaseMeta extends BaseDatabaseMeta implements DatabaseInter public String getSQLQueryPrimaryKey() { return "select column_name from information_schema.columns where table_schema=? and table_name=? and column_key = 'PRI'"; } + + @Override + public String getSQLQueryTables(String... args) { + return "select table_name from information_schema.tables where table_schema=?"; + } + + @Override + public String getSQLQueryColumns(String... args) { + return "select column_name from information_schema.columns where table_schema=? and table_name=?"; + } } diff --git a/datax-web/src/main/java/com/wugui/tool/meta/OracleDatabaseMeta.java b/datax-web/src/main/java/com/wugui/tool/meta/OracleDatabaseMeta.java index 608c4a2a..4e46ba18 100644 --- a/datax-web/src/main/java/com/wugui/tool/meta/OracleDatabaseMeta.java +++ b/datax-web/src/main/java/com/wugui/tool/meta/OracleDatabaseMeta.java @@ -23,11 +23,6 @@ public class OracleDatabaseMeta extends BaseDatabaseMeta implements DatabaseInte return single; } - @Override - public String getSQLQueryFields(String tableName) { - return "SELECT * FROM " + tableName + " where 1=0"; - } - @Override public String getSQLQueryComment(String schemaName, String tableName, String columnName) { @@ -53,4 +48,14 @@ public class OracleDatabaseMeta extends BaseDatabaseMeta implements DatabaseInte public String getSQLQueryTableNameComment() { return "select table_name,comments from user_tab_comments where table_name = ?"; } + + @Override + public String getSQLQueryTables(String... args) { + return "select table_name from user_tab_comments"; + } + + @Override + public String getSQLQueryColumns(String... args) { + return "select table_name,comments from user_tab_comments where table_name = ?"; + } } diff --git a/datax-web/src/main/java/com/wugui/tool/query/BaseQueryTool.java b/datax-web/src/main/java/com/wugui/tool/query/BaseQueryTool.java index 73ba9d77..4f75c435 100644 --- a/datax-web/src/main/java/com/wugui/tool/query/BaseQueryTool.java +++ b/datax-web/src/main/java/com/wugui/tool/query/BaseQueryTool.java @@ -152,11 +152,11 @@ public abstract class BaseQueryTool implements QueryToolInterface { @Override public List> getTables() { - String sqlQueryTablesNameComments = sqlBuilder.getSQLQueryTablesNameComments(); - logger.info(sqlQueryTablesNameComments); + String sqlQueryTables = sqlBuilder.getSQLQueryTables(); + logger.info(sqlQueryTables); List> res = null; try { - res = JdbcUtils.executeQuery(connection, sqlQueryTablesNameComments, ImmutableList.of(currentSchema)); + res = JdbcUtils.executeQuery(connection, sqlQueryTables, ImmutableList.of(currentSchema)); } catch (SQLException e) { e.printStackTrace(); } @@ -251,42 +251,30 @@ public abstract class BaseQueryTool implements QueryToolInterface { return res; } - @Override public List getColumnNames(String tableName) { - List columns = Lists.newArrayList(); - - //获取查询指定表所有字段的sql语句 - String querySql = sqlBuilder.getSQLQueryFields(tableName); - logger.info("querySql: {}", querySql); - + List res = Lists.newArrayList(); + //获取指定表的所有字段 try { + //获取查询指定表所有字段的sql语句 + String querySql = sqlBuilder.getSQLQueryFields(tableName); + logger.info("querySql: {}", querySql); + //获取所有字段 Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(querySql); ResultSetMetaData metaData = resultSet.getMetaData(); + int columnCount = metaData.getColumnCount(); for (int i = 1; i <= columnCount; i++) { - columns.add(metaData.getColumnName(i)); + res.add(metaData.getColumnName(i)); } +// logger.info("res: "); +// res.forEach(e -> logger.info(e.toString())); } catch (SQLException e) { e.printStackTrace(); } - return columns; - } - - @Override - public List getTableNames() { - List res = Lists.newArrayList(); - List> tables = getTables(); - //这里只取表名 - tables.forEach(e -> { - //表名,注释 - List tValues = new ArrayList(e.values()); - //第一个总是表名 - res.add((String) tValues.get(0)); - }); return res; } } diff --git a/datax-web/src/main/java/com/wugui/tool/query/MySQLQueryTool.java b/datax-web/src/main/java/com/wugui/tool/query/MySQLQueryTool.java index d19942e7..3bb80157 100644 --- a/datax-web/src/main/java/com/wugui/tool/query/MySQLQueryTool.java +++ b/datax-web/src/main/java/com/wugui/tool/query/MySQLQueryTool.java @@ -1,8 +1,14 @@ package com.wugui.tool.query; +import com.alibaba.druid.util.JdbcUtils; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; import com.wugui.dataxweb.entity.JobJdbcDatasource; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; /** * mysql数据库使用的查询工具 @@ -18,4 +24,23 @@ public class MySQLQueryTool extends BaseQueryTool implements QueryToolInterface super(codeJdbcDatasource); } + @Override + public List getTableNames() { + List res = Lists.newArrayList(); + //获取sql + String sqlQueryTables = sqlBuilder.getSQLQueryTables(); + logger.info(sqlQueryTables); + //查询 + try { + List> maps = JdbcUtils.executeQuery(connection, sqlQueryTables, ImmutableList.of(getSchema())); +// // 只取value即可 + maps.forEach((k) -> { + String tName = (String) new ArrayList<>(k.values()).get(0); + res.add(tName); + }); + } catch (SQLException e) { + e.printStackTrace(); + } + return res; + } } diff --git a/datax-web/src/main/java/com/wugui/tool/query/OracleQueryTool.java b/datax-web/src/main/java/com/wugui/tool/query/OracleQueryTool.java index ff1e4e14..151b06c3 100644 --- a/datax-web/src/main/java/com/wugui/tool/query/OracleQueryTool.java +++ b/datax-web/src/main/java/com/wugui/tool/query/OracleQueryTool.java @@ -6,6 +6,7 @@ import com.google.common.collect.Lists; import com.wugui.dataxweb.entity.JobJdbcDatasource; import java.sql.SQLException; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -48,4 +49,27 @@ public class OracleQueryTool extends BaseQueryTool implements QueryToolInterface } return res; } + + @Override + public List getTableNames() { + { + List res = Lists.newArrayList(); + //获取sql + String sqlQueryTables = sqlBuilder.getSQLQueryTables(); + logger.info(sqlQueryTables); + //查询 + try { + List> maps = JdbcUtils.executeQuery(connection, sqlQueryTables, new ArrayList<>()); +// logger.info(maps.toString()); +// // 只取value即可 + maps.forEach((k) -> { + String tName = (String) new ArrayList<>(k.values()).get(0); + res.add(tName); + }); + } catch (SQLException e) { + e.printStackTrace(); + } + return res; + } + } } diff --git a/datax-web/src/test/java/com/wugui/tool/query/MySQLQueryToolTest.java b/datax-web/src/test/java/com/wugui/tool/query/MySQLQueryToolTest.java index 20e3f86a..4c886a3d 100644 --- a/datax-web/src/test/java/com/wugui/tool/query/MySQLQueryToolTest.java +++ b/datax-web/src/test/java/com/wugui/tool/query/MySQLQueryToolTest.java @@ -1,13 +1,11 @@ package com.wugui.tool.query; import com.wugui.dataxweb.entity.JobJdbcDatasource; -import com.wugui.tool.database.TableInfo; import lombok.extern.slf4j.Slf4j; import org.junit.Before; import org.junit.Test; import java.util.List; -import java.util.Map; @Slf4j public class MySQLQueryToolTest { @@ -30,35 +28,15 @@ public class MySQLQueryToolTest { jdbcDatasource.setJdbcDriverClass("com.mysql.jdbc.Driver"); } - @Test - public void getTableInfo() { - List> tableInfo = queryTool.getTableInfo("datax_plugin"); - tableInfo.forEach(e -> { - log.info(e.toString()); - }); - } - - @Test - public void buildTableInfo() { - TableInfo tableInfo = queryTool.buildTableInfo("datax_plugin"); - log.info(tableInfo.toString()); - } - - @Test - public void getTables() { - List> tables = queryTool.getTables(); - tables.forEach(e -> log.info(e.toString())); - } - - @Test - public void getColumns() { - List columns = queryTool.getColumnNames("datax_plugin"); - log.info(columns.toString()); - } - @Test public void getTableNames() { List tableNames = queryTool.getTableNames(); tableNames.forEach(System.out::println); } + + @Test + public void getColumnNames() { + List columns = queryTool.getColumnNames("datax_plugin"); + log.info(columns.toString()); + } } \ No newline at end of file diff --git a/datax-web/src/test/java/com/wugui/tool/query/OracleQueryToolTest.java b/datax-web/src/test/java/com/wugui/tool/query/OracleQueryToolTest.java new file mode 100644 index 00000000..0e29a29b --- /dev/null +++ b/datax-web/src/test/java/com/wugui/tool/query/OracleQueryToolTest.java @@ -0,0 +1,42 @@ +package com.wugui.tool.query; + +import com.wugui.dataxweb.entity.JobJdbcDatasource; +import lombok.extern.slf4j.Slf4j; +import org.junit.Before; +import org.junit.Test; + +import java.util.List; + +@Slf4j +public class OracleQueryToolTest { + + private BaseQueryTool queryTool; + private JobJdbcDatasource jdbcDatasource; + + @Before + public void before() { + genMysqlDemo(); + queryTool = QueryToolFactory.getByDbType(jdbcDatasource); + } + + private void genMysqlDemo() { + jdbcDatasource = new JobJdbcDatasource(); + jdbcDatasource.setDatasourceName("test"); + jdbcDatasource.setJdbcUsername("scott"); + jdbcDatasource.setJdbcPassword("tiger"); + jdbcDatasource.setJdbcUrl("jdbc:oracle:thin:@localhost:1521/orcl"); + jdbcDatasource.setJdbcDriverClass("oracle.jdbc.OracleDriver"); + } + + @Test + public void getTableNames() { + List tableNames = queryTool.getTableNames(); + tableNames.forEach(System.out::println); + } + + @Test + public void getColumnNames() { + List columns = queryTool.getColumnNames("EMP"); + log.info(columns.toString()); + } +} \ No newline at end of file