Commit b421f890 authored by godkaikai's avatar godkaikai

oracle和clickhouse

parent 2c0f34f5
...@@ -2,6 +2,8 @@ package com.dlink.assertion; ...@@ -2,6 +2,8 @@ package com.dlink.assertion;
import com.dlink.exception.RunTimeException; import com.dlink.exception.RunTimeException;
import java.util.Collection;
/** /**
* Asserts * Asserts
* *
...@@ -46,6 +48,18 @@ public class Asserts { ...@@ -46,6 +48,18 @@ public class Asserts {
} }
} }
public static boolean isNullCollection(Collection collection) {
if (isNull(collection)||collection.size()==0) {
return true;
}
return false;
}
public static boolean isNotNullCollection(Collection collection) {
return !isNullCollection(collection);
}
public static void checkNull(String key,String msg) { public static void checkNull(String key,String msg) {
if (key == null||"".equals(key)) { if (key == null||"".equals(key)) {
throw new RunTimeException(msg); throw new RunTimeException(msg);
...@@ -64,4 +78,9 @@ public class Asserts { ...@@ -64,4 +78,9 @@ public class Asserts {
} }
} }
public static void checkNullCollection(Collection collection,String msg) {
if(isNullCollection(collection)){
throw new RunTimeException(msg);
}
}
} }
...@@ -121,7 +121,6 @@ ...@@ -121,7 +121,6 @@
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
...@@ -138,7 +137,6 @@ ...@@ -138,7 +137,6 @@
<dependency> <dependency>
<groupId>com.oracle</groupId> <groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId> <artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>
......
...@@ -30,7 +30,7 @@ public abstract class AbstractJdbcDriver extends AbstractDriver { ...@@ -30,7 +30,7 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
@Override @Override
public boolean test() { public boolean test() {
Asserts.checkNotNull(config,"无效的数据源配置"); Asserts.checkNotNull(config, "无效的数据源配置");
try { try {
Class.forName(getDriverClass()); Class.forName(getDriverClass());
DriverManager.getConnection(config.getUrl(), config.getUsername(), config.getPassword()).close(); DriverManager.getConnection(config.getUrl(), config.getUsername(), config.getPassword()).close();
...@@ -57,7 +57,7 @@ public abstract class AbstractJdbcDriver extends AbstractDriver { ...@@ -57,7 +57,7 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
@Override @Override
public void close() { public void close() {
try { try {
if(Asserts.isNotNull(conn)) { if (Asserts.isNotNull(conn)) {
conn.close(); conn.close();
} }
} catch (SQLException e) { } catch (SQLException e) {
...@@ -65,13 +65,28 @@ public abstract class AbstractJdbcDriver extends AbstractDriver { ...@@ -65,13 +65,28 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
} }
} }
public void close(PreparedStatement preparedStatement,ResultSet results){
try {
if (Asserts.isNotNull(results)) {
results.close();
}
if (Asserts.isNotNull(preparedStatement)) {
preparedStatement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override @Override
public List<Schema> listSchemas(){ public List<Schema> listSchemas() {
List<Schema> schemas = new ArrayList<>(); List<Schema> schemas = new ArrayList<>();
PreparedStatement preparedStatement = null;
ResultSet results = null;
String schemasSql = getDBQuery().schemaAllSql(); String schemasSql = getDBQuery().schemaAllSql();
try { try {
try (PreparedStatement preparedStatement = conn.prepareStatement(schemasSql); preparedStatement = conn.prepareStatement(schemasSql);
ResultSet results = preparedStatement.executeQuery()) { results = preparedStatement.executeQuery();
while (results.next()) { while (results.next()) {
String schemaName = results.getString(getDBQuery().schemaName()); String schemaName = results.getString(getDBQuery().schemaName());
if (Asserts.isNotNullString(schemaName)) { if (Asserts.isNotNullString(schemaName)) {
...@@ -79,9 +94,10 @@ public abstract class AbstractJdbcDriver extends AbstractDriver { ...@@ -79,9 +94,10 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
schemas.add(schema); schemas.add(schema);
} }
} }
}
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} finally {
close(preparedStatement,results);
} }
return schemas; return schemas;
} }
...@@ -89,12 +105,11 @@ public abstract class AbstractJdbcDriver extends AbstractDriver { ...@@ -89,12 +105,11 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
@Override @Override
public List<Table> listTables(String schemaName) { public List<Table> listTables(String schemaName) {
List<Table> tableList = new ArrayList<>(); List<Table> tableList = new ArrayList<>();
PreparedStatement preparedStatement = null;
ResultSet results = null; ResultSet results = null;
String sql = getDBQuery().tablesSql(schemaName);
try { try {
String tablesSql = getDBQuery().tablesSql(); preparedStatement = conn.prepareStatement(sql);
StringBuilder sql = new StringBuilder(tablesSql);
try (PreparedStatement preparedStatement = conn.prepareStatement(sql.toString())) {
preparedStatement.setString(1,schemaName);
results = preparedStatement.executeQuery(); results = preparedStatement.executeQuery();
while (results.next()) { while (results.next()) {
String tableName = results.getString(getDBQuery().tableName()); String tableName = results.getString(getDBQuery().tableName());
...@@ -107,30 +122,24 @@ public abstract class AbstractJdbcDriver extends AbstractDriver { ...@@ -107,30 +122,24 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
tableList.add(tableInfo); tableList.add(tableInfo);
} }
} }
}
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} finally { } finally {
if(Asserts.isNotNull(results)){ close(preparedStatement,results);
try {
results.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} }
return tableList; return tableList;
} }
@Override @Override
public List<Column> listColumns(String schema, String tableName) { public List<Column> listColumns(String schemaName, String tableName) {
List<Column> columns = new ArrayList<>(); List<Column> columns = new ArrayList<>();
try { PreparedStatement preparedStatement = null;
String tableFieldsSql = getDBQuery().columnsSql(); ResultSet results = null;
String tableFieldsSql = getDBQuery().columnsSql(schemaName,tableName);
tableFieldsSql = String.format(tableFieldsSql, tableName); tableFieldsSql = String.format(tableFieldsSql, tableName);
try ( try {
PreparedStatement preparedStatement = conn.prepareStatement(tableFieldsSql); preparedStatement = conn.prepareStatement(tableFieldsSql);
ResultSet results = preparedStatement.executeQuery()) { results = preparedStatement.executeQuery();
while (results.next()) { while (results.next()) {
Column field = new Column(); Column field = new Column();
String columnName = results.getString(getDBQuery().columnName()); String columnName = results.getString(getDBQuery().columnName());
...@@ -149,20 +158,73 @@ public abstract class AbstractJdbcDriver extends AbstractDriver { ...@@ -149,20 +158,73 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
field.setIsNotNull(results.getString(getDBQuery().isNotNull())); field.setIsNotNull(results.getString(getDBQuery().isNotNull()));
columns.add(field); columns.add(field);
} }
}
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
}finally {
close(preparedStatement,results);
} }
return columns; return columns;
} }
@Override @Override
public boolean execute(String sql){ public boolean createTable(Table table) {
Asserts.checkNullString(sql,"Sql 语句为空"); String sql = getCreateTableSql(table).replaceAll("\r\n", " ");
if (Asserts.isNotNull(sql)) {
return execute(sql);
} else {
return false;
}
}
@Override
public boolean dropTable(Table table) {
String sql = getDropTableSql(table).replaceAll("\r\n", " ");
if (Asserts.isNotNull(sql)) {
return execute(sql);
} else {
return false;
}
}
@Override
public boolean truncateTable(Table table) {
String sql = getTruncateTableSql(table).replaceAll("\r\n", " ");
if (Asserts.isNotNull(sql)) {
return execute(sql);
} else {
return false;
}
}
@Override
public String getDropTableSql(Table table) {
StringBuilder sb = new StringBuilder();
sb.append("DROP TABLE ");
if (Asserts.isNotNullString(table.getSchema())) {
sb.append(table.getSchema() + ".");
}
sb.append(table.getName());
return sb.toString();
}
@Override
public String getTruncateTableSql(Table table) {
StringBuilder sb = new StringBuilder();
sb.append("TRUNCATE TABLE ");
if (Asserts.isNotNullString(table.getSchema())) {
sb.append(table.getSchema() + ".");
}
sb.append(table.getName());
return sb.toString();
}
@Override
public boolean execute(String sql) {
Asserts.checkNullString(sql, "Sql 语句为空");
String[] sqls = sql.split(";"); String[] sqls = sql.split(";");
try(Statement statement = conn.createStatement()){ try (Statement statement = conn.createStatement()) {
for (int i = 0; i < sqls.length; i++) { for (int i = 0; i < sqls.length; i++) {
if(Asserts.isNullString(sqls[i])){ if (Asserts.isNullString(sqls[i])) {
continue; continue;
} }
statement.execute(sqls[i]); statement.execute(sqls[i]);
...@@ -178,8 +240,11 @@ public abstract class AbstractJdbcDriver extends AbstractDriver { ...@@ -178,8 +240,11 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
public List<HashMap<String, Object>> query(String sql) { public List<HashMap<String, Object>> query(String sql) {
List<HashMap<String, Object>> datas = new ArrayList<>(); List<HashMap<String, Object>> datas = new ArrayList<>();
List<Column> columns = new ArrayList<>(); List<Column> columns = new ArrayList<>();
try (PreparedStatement preparedStatement = conn.prepareStatement(sql); PreparedStatement preparedStatement = null;
ResultSet results = preparedStatement.executeQuery()) { ResultSet results = null;
try {
preparedStatement = conn.prepareStatement(sql);
results = preparedStatement.executeQuery();
ResultSetMetaData metaData = results.getMetaData(); ResultSetMetaData metaData = results.getMetaData();
for (int i = 1; i <= metaData.getColumnCount(); i++) { for (int i = 1; i <= metaData.getColumnCount(); i++) {
Column column = new Column(); Column column = new Column();
...@@ -191,13 +256,14 @@ public abstract class AbstractJdbcDriver extends AbstractDriver { ...@@ -191,13 +256,14 @@ public abstract class AbstractJdbcDriver extends AbstractDriver {
while (results.next()) { while (results.next()) {
HashMap<String, Object> data = new HashMap<>(); HashMap<String, Object> data = new HashMap<>();
for (int i = 0; i < columns.size(); i++) { for (int i = 0; i < columns.size(); i++) {
data.put(columns.get(i).getName(), getTypeConvert().convertValue(results,columns.get(i).getName(),columns.get(i).getType())); data.put(columns.get(i).getName(), getTypeConvert().convertValue(results, columns.get(i).getName(), columns.get(i).getType()));
} }
datas.add(data); datas.add(data);
} }
results.close();
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} finally {
close(preparedStatement,results);
} }
return datas; return datas;
} }
......
...@@ -69,19 +69,23 @@ public interface Driver { ...@@ -69,19 +69,23 @@ public interface Driver {
boolean createTable(Table table); boolean createTable(Table table);
boolean deleteTable(Table table); boolean dropTable(Table table);
boolean truncateTable(Table table); boolean truncateTable(Table table);
String getCreateTableSql(Table table); String getCreateTableSql(Table table);
boolean insert(Table table, JsonNode data); String getDropTableSql(Table table);
String getTruncateTableSql(Table table);
/* boolean insert(Table table, JsonNode data);
boolean update(Table table, JsonNode data); boolean update(Table table, JsonNode data);
boolean delete(Table table, JsonNode data); boolean delete(Table table, JsonNode data);
SelectResult select(String sql); SelectResult select(String sql);*/
boolean execute(String sql); boolean execute(String sql);
......
...@@ -14,18 +14,14 @@ public interface IDBQuery { ...@@ -14,18 +14,14 @@ public interface IDBQuery {
* 所有数据库信息查询 SQL * 所有数据库信息查询 SQL
*/ */
String schemaAllSql(); String schemaAllSql();
/**
* 所有表信息查询 SQL
*/
String tableAllSql();
/** /**
* 表信息查询 SQL * 表信息查询 SQL
*/ */
String tablesSql(); String tablesSql(String schemaName);
/** /**
* 表字段信息查询 SQL * 表字段信息查询 SQL
*/ */
String columnsSql(); String columnsSql(String schemaName,String tableName);
/** /**
* 数据库、模式、组织名称 * 数据库、模式、组织名称
*/ */
......
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>dlink-metadata</artifactId>
<groupId>com.dlink</groupId>
<version>0.3.0-SANPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dlink-metadata-clickhouse</artifactId>
<dependencies>
<dependency>
<groupId>com.dlink</groupId>
<artifactId>dlink-metadata-base</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>ru.yandex.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.dlink.metadata.convert;
import com.dlink.metadata.rules.IColumnType;
/**
* ClickHouseTypeConvert
*
* @author wenmo
* @since 2021/7/21 17:15
**/
public class ClickHouseTypeConvert implements ITypeConvert {
@Override
public IColumnType convert(String columnType) {
return null;
}
@Override
public String convertToDB(String columnType) {
return null;
}
}
package com.dlink.metadata.driver;
import com.dlink.metadata.convert.ClickHouseTypeConvert;
import com.dlink.metadata.convert.ITypeConvert;
import com.dlink.metadata.query.ClickHouseQuery;
import com.dlink.metadata.query.IDBQuery;
import com.dlink.model.Table;
/**
* ClickHouseDriver
*
* @author wenmo
* @since 2021/7/21 17:14
**/
public class ClickHouseDriver extends AbstractJdbcDriver {
@Override
String getDriverClass() {
return "ru.yandex.clickhouse.ClickHouseDriver";
}
@Override
public IDBQuery getDBQuery() {
return new ClickHouseQuery();
}
@Override
public ITypeConvert getTypeConvert() {
return new ClickHouseTypeConvert();
}
@Override
public String getType() {
return "ClickHouse";
}
@Override
public String getName() {
return "ClickHouse OLAP 数据库";
}
@Override
public String getCreateTableSql(Table table) {
return null;
}
}
package com.dlink.metadata.query;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* ClickHouseQuery
*
* @author wenmo
* @since 2021/7/21 17:15
**/
public class ClickHouseQuery extends AbstractDBQuery {
@Override
public String schemaAllSql() {
return "show databases";
}
@Override
public String tablesSql(String schemaName) {
return "show table status WHERE 1=1 ";
}
@Override
public String columnsSql(String schemaName,String tableName) {
return "desc `"+tableName+"`";
}
@Override
public String schemaName() {
return "db";
}
@Override
public String tableName() {
return "name";
}
@Override
public String tableComment() {
return "comment";
}
@Override
public String columnName() {
return "name";
}
@Override
public String columnType() {
return "type";
}
@Override
public String columnComment() {
return "comment";
}
@Override
public String columnKey() {
return "KEY";
}
@Override
public boolean isKeyIdentity(ResultSet results) throws SQLException {
return "auto_increment".equals(results.getString("Extra"));
}
@Override
public String isNotNull() {
return "NULL";
}
}
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
<scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>
</project> </project>
\ No newline at end of file
...@@ -33,12 +33,12 @@ public class MySqlDriver extends AbstractJdbcDriver { ...@@ -33,12 +33,12 @@ public class MySqlDriver extends AbstractJdbcDriver {
@Override @Override
public String getType() { public String getType() {
return "Mysql"; return "MySql";
} }
@Override @Override
public String getName() { public String getName() {
return "Mysql"; return "MySql数据库";
} }
@Override @Override
...@@ -46,26 +46,6 @@ public class MySqlDriver extends AbstractJdbcDriver { ...@@ -46,26 +46,6 @@ public class MySqlDriver extends AbstractJdbcDriver {
return "com.mysql.cj.jdbc.Driver"; return "com.mysql.cj.jdbc.Driver";
} }
@Override
public boolean createTable(Table table) {
String sql = getCreateTableSql(table);
if(Asserts.isNotNull(sql)) {
return execute(sql.replaceAll("\r\n"," "));
}else{
return false;
}
}
@Override
public boolean deleteTable(Table table) {
return false;
}
@Override
public boolean truncateTable(Table table) {
return false;
}
@Override @Override
public String getCreateTableSql(Table table) { public String getCreateTableSql(Table table) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
...@@ -105,23 +85,4 @@ public class MySqlDriver extends AbstractJdbcDriver { ...@@ -105,23 +85,4 @@ public class MySqlDriver extends AbstractJdbcDriver {
return sb.toString(); return sb.toString();
} }
@Override
public boolean insert(Table table, JsonNode data) {
return false;
}
@Override
public boolean update(Table table, JsonNode data) {
return false;
}
@Override
public boolean delete(Table table, JsonNode data) {
return false;
}
@Override
public SelectResult select(String sql) {
return null;
}
} }
package com.dlink.metadata.query; package com.dlink.metadata.query;
import com.dlink.assertion.Asserts;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
...@@ -17,21 +19,14 @@ public class MySqlQuery extends AbstractDBQuery { ...@@ -17,21 +19,14 @@ public class MySqlQuery extends AbstractDBQuery {
} }
@Override @Override
public String tableAllSql() { public String tablesSql(String schemaName) {
return "select TABLE_NAME AS `NAME`,TABLE_SCHEMA AS `Database`,TABLE_COMMENT AS COMMENT from information_schema.tables";
}
@Override
public String tablesSql() {
return "select TABLE_NAME AS `NAME`,TABLE_SCHEMA AS `Database`,TABLE_COMMENT AS COMMENT from information_schema.tables" + return "select TABLE_NAME AS `NAME`,TABLE_SCHEMA AS `Database`,TABLE_COMMENT AS COMMENT from information_schema.tables" +
" where TABLE_SCHEMA = ?"; " where TABLE_SCHEMA = '"+schemaName+"'";
// return "show table status WHERE 1=1 ";
} }
@Override @Override
public String columnsSql() { public String columnsSql(String schemaName,String tableName) {
return "show full columns from `%s`"; return "show full columns from `"+tableName+"`";
} }
@Override @Override
......
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>dlink-metadata</artifactId>
<groupId>com.dlink</groupId>
<version>0.3.0-SANPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dlink-metadata-oracle</artifactId>
<dependencies>
<dependency>
<groupId>com.dlink</groupId>
<artifactId>dlink-metadata-base</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.dlink.metadata.convert;
import com.dlink.metadata.rules.DbColumnType;
import com.dlink.metadata.rules.IColumnType;
/**
* OracleTypeConvert
*
* @author wenmo
* @since 2021/7/21 16:00
**/
public class OracleTypeConvert implements ITypeConvert {
@Override
public IColumnType convert(String columnType) {
String t = columnType.toLowerCase();
if (t.contains("char")) {
return DbColumnType.STRING;
} else if (t.contains("date") || t.contains("timestamp")) {
return DbColumnType.DATE;
} else if (t.contains("number")) {
if (t.matches("number\\(+\\d\\)")) {
return DbColumnType.INTEGER;
} else if (t.matches("number\\(+\\d{2}+\\)")) {
return DbColumnType.LONG;
}
return DbColumnType.BIG_DECIMAL;
} else if (t.contains("float")) {
return DbColumnType.FLOAT;
} else if (t.contains("clob")) {
return DbColumnType.STRING;
} else if (t.contains("blob")) {
return DbColumnType.BLOB;
} else if (t.contains("binary")) {
return DbColumnType.BYTE_ARRAY;
} else if (t.contains("raw")) {
return DbColumnType.BYTE_ARRAY;
}
return DbColumnType.STRING;
}
@Override
public String convertToDB(String columnType) {
switch (columnType.toLowerCase()){
case "string":
return "varchar(255)";
case "boolean":
case "int":
case "integer":
case "double":
case "float":
return "number";
case "date":
return "date";
default:
return "varchar(255)";
}
}
}
package com.dlink.metadata.driver;
import com.dlink.assertion.Asserts;
import com.dlink.metadata.convert.ITypeConvert;
import com.dlink.metadata.convert.OracleTypeConvert;
import com.dlink.metadata.query.IDBQuery;
import com.dlink.metadata.query.OracleQuery;
import com.dlink.model.Column;
import com.dlink.model.Table;
import java.util.List;
import java.util.stream.Collectors;
/**
* OracleDriver
*
* @author wenmo
* @since 2021/7/21 15:52
**/
public class OracleDriver extends AbstractJdbcDriver {
@Override
String getDriverClass() {
return "oracle.jdbc.driver.OracleDriver";
}
@Override
public IDBQuery getDBQuery() {
return new OracleQuery();
}
@Override
public ITypeConvert getTypeConvert() {
return new OracleTypeConvert();
}
@Override
public String getType() {
return "Oracle";
}
@Override
public String getName() {
return "Oracle数据库";
}
@Override
public String getCreateTableSql(Table table) {
StringBuilder sb = new StringBuilder();
sb.append("CREATE TABLE ");
sb.append(table.getName() + " (");
List<Column> columns = table.getColumns();
for (int i = 0; i < columns.size(); i++) {
if(i>0){
sb.append(",");
}
sb.append(columns.get(i).getName() + " " + getTypeConvert().convertToDB(columns.get(i).getType()));
if("YES".equals(columns.get(i).getIsNotNull())){
sb.append(" NOT NULL");
}
}
sb.append(");");
sb.append("\r\n");
List<Column> pks = columns.stream().filter(column -> column.isKeyFlag()).collect(Collectors.toList());
if(Asserts.isNotNullCollection(pks)) {
sb.append("ALTER TABLE " + table.getName() + " ADD CONSTRAINT " + table.getName() + "_PK PRIMARY KEY (");
for (int i = 0; i < pks.size(); i++) {
if(i>0){
sb.append(",");
}
sb.append(pks.get(i).getName());
}
sb.append(");\r\n");
}
for (int i = 0; i < columns.size(); i++) {
sb.append("COMMENT ON COLUMN "+table.getName()+"."+columns.get(i).getName()+" IS '"+columns.get(i).getComment()+"';");
}
return sb.toString();
}
}
package com.dlink.metadata.query;
/**
* OracleQuery
*
* @author wenmo
* @since 2021/7/21 15:54
**/
public class OracleQuery extends AbstractDBQuery {
@Override
public String schemaAllSql() {
return "SELECT DISTINCT OWNER FROM ALL_TAB_COMMENTS";
}
@Override
public String tablesSql(String schemaName) {
return "SELECT * FROM ALL_TAB_COMMENTS WHERE OWNER='"+schemaName+"'";
}
@Override
public String columnsSql(String schemaName,String tableName) {
return "SELECT A.COLUMN_NAME, CASE WHEN A.DATA_TYPE='NUMBER' THEN "
+ "(CASE WHEN A.DATA_PRECISION IS NULL THEN A.DATA_TYPE "
+ "WHEN NVL(A.DATA_SCALE, 0) > 0 THEN A.DATA_TYPE||'('||A.DATA_PRECISION||','||A.DATA_SCALE||')' "
+ "ELSE A.DATA_TYPE||'('||A.DATA_PRECISION||')' END) "
+ "ELSE A.DATA_TYPE END DATA_TYPE, B.COMMENTS,A.NULLABLE,DECODE((select count(1) from all_constraints pc,all_cons_columns pcc"
+ " where pcc.column_name = A.column_name"
+ " and pcc.constraint_name = pc.constraint_name"
+ " and pc.constraint_type ='P'"
+ " and pcc.owner = upper(A.OWNER)"
+ " and pcc.table_name = upper(A.TABLE_NAME)),0,'','PRI') KEY "
+ "FROM ALL_TAB_COLUMNS A "
+ " INNER JOIN ALL_COL_COMMENTS B ON A.TABLE_NAME = B.TABLE_NAME AND A.COLUMN_NAME = B.COLUMN_NAME AND B.OWNER = '"+schemaName+"'"
+ " LEFT JOIN ALL_CONSTRAINTS D ON D.TABLE_NAME = A.TABLE_NAME AND D.CONSTRAINT_TYPE = 'P' AND D.OWNER = '"+schemaName+"'"
+ " LEFT JOIN ALL_CONS_COLUMNS C ON C.CONSTRAINT_NAME = D.CONSTRAINT_NAME AND C.COLUMN_NAME=A.COLUMN_NAME AND C.OWNER = '"+schemaName+"'"
+ "WHERE A.OWNER = '"+schemaName+"' AND A.TABLE_NAME = '"+tableName+"' ORDER BY A.COLUMN_ID ";
}
@Override
public String schemaName() {
return "OWNER";
}
@Override
public String tableName() {
return "TABLE_NAME";
}
@Override
public String tableComment() {
return "COMMENTS";
}
@Override
public String columnName() {
return "COLUMN_NAME";
}
@Override
public String columnType() {
return "DATA_TYPE";
}
@Override
public String columnComment() {
return "COMMENTS";
}
@Override
public String columnKey() {
return "KEY";
}
@Override
public String isNotNull() {
return "NULLABLE";
}
}
package com.dlink.metadata;
import com.dlink.metadata.driver.Driver;
import com.dlink.metadata.driver.DriverConfig;
import com.dlink.model.Column;
import com.dlink.model.Schema;
import org.junit.Test;
import java.util.List;
/**
* OracleTest
*
* @author wenmo
* @since 2021/7/21 16:14
**/
public class OracleTest {
public Driver getDriver(){
DriverConfig config = new DriverConfig();
config.setType("Oracle");
config.setIp("10.1.51.25");
config.setPort(1521);
config.setUsername("cdr");
config.setPassword("cdr");
config.setUrl("jdbc:oracle:thin:@10.1.51.25:1521:orcl");
return Driver.build(config).connect();
}
@Test
public void connectTest(){
DriverConfig config = new DriverConfig();
config.setType("Oracle");
config.setIp("10.1.51.25");
config.setPort(1521);
config.setUsername("cdr");
config.setPassword("cdr");
config.setUrl("jdbc:oracle:thin:@10.1.51.25:1521:orcl");
boolean test = Driver.build(config).test();
System.out.println(test);
System.out.println("end...");
}
@Test
public void schemaTest(){
Driver driver = getDriver();
List<Schema> schemasAndTables = driver.getSchemasAndTables();
System.out.println("end...");
}
@Test
public void columnTest(){
Driver driver = getDriver();
List<Column> columns = driver.listColumns("CDR", "PAT_INFO");
System.out.println("end...");
}
@Test
public void queryTest(){
Driver driver = getDriver();
List query = driver.query("select * from CDR.PAT_INFO where ROWNUM<10");
System.out.println("end...");
}
}
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
<modules> <modules>
<module>dlink-metadata-base</module> <module>dlink-metadata-base</module>
<module>dlink-metadata-mysql</module> <module>dlink-metadata-mysql</module>
<module>dlink-metadata-oracle</module>
<module>dlink-metadata-clickhouse</module>
</modules> </modules>
......
...@@ -35,6 +35,8 @@ ...@@ -35,6 +35,8 @@
<guava.version>21.0</guava.version> <guava.version>21.0</guava.version>
<slf4j.version>1.7.30</slf4j.version> <slf4j.version>1.7.30</slf4j.version>
<mysql-connector-java.version>8.0.22</mysql-connector-java.version> <mysql-connector-java.version>8.0.22</mysql-connector-java.version>
<ojdbc6.version>11.2.0.3</ojdbc6.version>
<clickhouse.version>0.2.6</clickhouse.version>
<banner.version>1.0.2</banner.version> <banner.version>1.0.2</banner.version>
<hibernate-validator.version>6.2.0.Final</hibernate-validator.version> <hibernate-validator.version>6.2.0.Final</hibernate-validator.version>
<versions-maven-plugin.version>2.7</versions-maven-plugin.version> <versions-maven-plugin.version>2.7</versions-maven-plugin.version>
...@@ -118,6 +120,16 @@ ...@@ -118,6 +120,16 @@
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version> <version>${mysql-connector-java.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>${ojdbc6.version}</version>
</dependency>
<dependency>
<groupId>ru.yandex.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>${clickhouse.version}</version>
</dependency>
<dependency> <dependency>
<groupId>com.nepxion</groupId> <groupId>com.nepxion</groupId>
<artifactId>banner</artifactId> <artifactId>banner</artifactId>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment