remove redundant code and optimize exception throwing

This commit is contained in:
zgq
2024-03-28 14:49:40 +08:00
parent f425604b15
commit af467eb5fc
9 changed files with 54 additions and 228 deletions

View File

@ -10,16 +10,10 @@ import java.sql.*;
import java.util.Objects; import java.util.Objects;
public class ClickHouseDBManage extends DefaultDBManage implements DBManage { public class ClickHouseDBManage extends DefaultDBManage implements DBManage {
@Override
public String exportDatabaseData(Connection connection, String databaseName, String schemaName, String tableName) throws SQLException {
StringBuilder sqlBuilder = new StringBuilder();
exportTableData(connection, tableName, sqlBuilder);
return sqlBuilder.toString();
}
@Override @Override
public String exportDatabase(Connection connection, String databaseName, String schemaName, boolean containData) throws SQLException { public String exportDatabase(Connection connection, String databaseName, String schemaName, boolean containData) throws SQLException {
StringBuilder sqlBuilder = new StringBuilder(); StringBuilder sqlBuilder = new StringBuilder();
exportTablesOrViewsOrDictionaries(connection, sqlBuilder, databaseName, containData); exportTablesOrViewsOrDictionaries(connection, sqlBuilder, databaseName, schemaName,containData);
exportFunctions(connection, sqlBuilder); exportFunctions(connection, sqlBuilder);
return sqlBuilder.toString(); return sqlBuilder.toString();
} }
@ -35,7 +29,7 @@ public class ClickHouseDBManage extends DefaultDBManage implements DBManage {
} }
} }
private void exportTablesOrViewsOrDictionaries(Connection connection, StringBuilder sqlBuilder, String databaseName, boolean containData) throws SQLException { private void exportTablesOrViewsOrDictionaries(Connection connection, StringBuilder sqlBuilder, String databaseName, String schemaName, boolean containData) throws SQLException {
String sql =String.format("SELECT create_table_query, has_own_data,engine,name from system.`tables` WHERE `database`='%s'", databaseName); String sql =String.format("SELECT create_table_query, has_own_data,engine,name from system.`tables` WHERE `database`='%s'", databaseName);
try (Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sql)) { try (Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sql)) {
while (resultSet.next()) { while (resultSet.next()) {
@ -53,7 +47,7 @@ public class ClickHouseDBManage extends DefaultDBManage implements DBManage {
sqlBuilder.append("DROP TABLE IF EXISTS ").append(databaseName).append(".").append(tableOrViewName) sqlBuilder.append("DROP TABLE IF EXISTS ").append(databaseName).append(".").append(tableOrViewName)
.append(";").append("\n").append(ddl).append(";").append("\n"); .append(";").append("\n").append(ddl).append(";").append("\n");
if (containData && dataFlag) { if (containData && dataFlag) {
exportTableData(connection, tableOrViewName, sqlBuilder); exportTableData(connection,schemaName, tableOrViewName, sqlBuilder);
} }
} }
} }
@ -61,30 +55,6 @@ public class ClickHouseDBManage extends DefaultDBManage implements DBManage {
} }
private void exportTableData(Connection connection, String tableName, StringBuilder sqlBuilder) throws SQLException {
String sql = String.format("select * from %s", tableName);
try (ResultSet resultSet = connection.createStatement().executeQuery(sql)) {
ResultSetMetaData metaData = resultSet.getMetaData();
while (resultSet.next()) {
sqlBuilder.append("INSERT INTO ").append(tableName).append(" VALUES (");
for (int i = 1; i <= metaData.getColumnCount(); i++) {
String value = resultSet.getString(i);
if (Objects.isNull(value)) {
sqlBuilder.append("NULL");
} else {
sqlBuilder.append("'").append(value).append("'");
}
if (i < metaData.getColumnCount()) {
sqlBuilder.append(", ");
}
}
sqlBuilder.append(");\n");
}
sqlBuilder.append("\n");
}
}
@Override @Override
public Connection getConnection(ConnectInfo connectInfo) { public Connection getConnection(ConnectInfo connectInfo) {
String url = setDatabaseInJdbcUrl(connectInfo); String url = setDatabaseInJdbcUrl(connectInfo);

View File

@ -11,28 +11,20 @@ import org.apache.commons.lang3.StringUtils;
import java.sql.Connection; import java.sql.Connection;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Objects;
public class DB2DBManage extends DefaultDBManage implements DBManage { public class DB2DBManage extends DefaultDBManage implements DBManage {
@Override
public String exportDatabaseData(Connection connection, String databaseName, String schemaName, String tableName) throws SQLException {
StringBuilder sqlBuilder = new StringBuilder();
exportTableData(connection, tableName, sqlBuilder);
return sqlBuilder.toString();
}
@Override @Override
public String exportDatabase(Connection connection, String databaseName, String schemaName, boolean containData) throws SQLException { public String exportDatabase(Connection connection, String databaseName, String schemaName, boolean containData) throws SQLException {
StringBuilder sqlBuilder = new StringBuilder(); StringBuilder sqlBuilder = new StringBuilder();
exportTables(connection, schemaName, sqlBuilder, containData); exportTables(connection, schemaName, sqlBuilder, containData);
exportViews(connection, schemaName, sqlBuilder); exportViews(connection, schemaName, sqlBuilder);
exportProceduresAndFunctions(connection,schemaName, sqlBuilder); exportProceduresAndFunctions(connection, schemaName, sqlBuilder);
exportTriggers(connection, schemaName,sqlBuilder); exportTriggers(connection, schemaName, sqlBuilder);
return sqlBuilder.toString(); return sqlBuilder.toString();
} }
private void exportTables(Connection connection, String schemaName, StringBuilder sqlBuilder, boolean containData) throws SQLException { private void exportTables(Connection connection, String schemaName, StringBuilder sqlBuilder, boolean containData) throws SQLException {
try (ResultSet resultSet = connection.getMetaData().getTables(null, schemaName, null, new String[]{"TABLE", "SYSTEM TABLE"})) { try (ResultSet resultSet = connection.getMetaData().getTables(null, schemaName, null, new String[]{"TABLE", "SYSTEM TABLE"})) {
while (resultSet.next()) { while (resultSet.next()) {
@ -53,34 +45,12 @@ public class DB2DBManage extends DefaultDBManage implements DBManage {
if (resultSet.next()) { if (resultSet.next()) {
sqlBuilder.append(resultSet.getString("sql")).append("\n"); sqlBuilder.append(resultSet.getString("sql")).append("\n");
if (containData) { if (containData) {
exportTableData(connection, tableName, sqlBuilder); exportTableData(connection, schemaName, tableName, sqlBuilder);
} }
} }
} }
} }
private void exportTableData(Connection connection, String tableName, StringBuilder sqlBuilder) throws SQLException {
String sql = String.format("select * from %s", tableName);
try (ResultSet resultSet = connection.createStatement().executeQuery(sql)) {
ResultSetMetaData metaData = resultSet.getMetaData();
while (resultSet.next()) {
sqlBuilder.append("INSERT INTO ").append(tableName).append(" VALUES (");
for (int i = 1; i <= metaData.getColumnCount(); i++) {
String value = resultSet.getString(i);
if (Objects.isNull(value)) {
sqlBuilder.append("NULL");
} else {
sqlBuilder.append("'").append(value).append("'");
}
if (i < metaData.getColumnCount()) {
sqlBuilder.append(", ");
}
}
sqlBuilder.append(");\n");
}
sqlBuilder.append("\n");
}
}
private void exportViews(Connection connection, String schemaName, StringBuilder sqlBuilder) throws SQLException { private void exportViews(Connection connection, String schemaName, StringBuilder sqlBuilder) throws SQLException {
String sql = String.format("select TEXT from syscat.views where VIEWSCHEMA='%s';", schemaName); String sql = String.format("select TEXT from syscat.views where VIEWSCHEMA='%s';", schemaName);
@ -93,7 +63,7 @@ public class DB2DBManage extends DefaultDBManage implements DBManage {
} }
private void exportProceduresAndFunctions(Connection connection, String schemaName, StringBuilder sqlBuilder) throws SQLException { private void exportProceduresAndFunctions(Connection connection, String schemaName, StringBuilder sqlBuilder) throws SQLException {
String sql =String.format( "select TEXT from syscat.routines where ROUTINESCHEMA='%s';",schemaName); String sql = String.format("select TEXT from syscat.routines where ROUTINESCHEMA='%s';", schemaName);
try (ResultSet resultSet = connection.createStatement().executeQuery(sql)) { try (ResultSet resultSet = connection.createStatement().executeQuery(sql)) {
while (resultSet.next()) { while (resultSet.next()) {
String ddl = resultSet.getString("TEXT"); String ddl = resultSet.getString("TEXT");
@ -103,9 +73,8 @@ public class DB2DBManage extends DefaultDBManage implements DBManage {
} }
private void exportTriggers(Connection connection, String schemaName, StringBuilder sqlBuilder) throws SQLException { private void exportTriggers(Connection connection, String schemaName, StringBuilder sqlBuilder) throws SQLException {
String sql = String.format("select * from SYSCAT.TRIGGERS where TRIGSCHEMA = '%s';",schemaName); String sql = String.format("select * from SYSCAT.TRIGGERS where TRIGSCHEMA = '%s';", schemaName);
try (ResultSet resultSet = connection.createStatement().executeQuery(sql)) { try (ResultSet resultSet = connection.createStatement().executeQuery(sql)) {
while (resultSet.next()) { while (resultSet.next()) {
String ddl = resultSet.getString("TEXT"); String ddl = resultSet.getString("TEXT");
@ -127,9 +96,10 @@ public class DB2DBManage extends DefaultDBManage implements DBManage {
e.printStackTrace(); e.printStackTrace();
} }
} }
@Override @Override
public void dropTable(Connection connection, String databaseName, String schemaName, String tableName) { public void dropTable(Connection connection, String databaseName, String schemaName, String tableName) {
String sql = "DROP TABLE " + tableName; String sql = "DROP TABLE " + tableName;
SQLExecutor.getInstance().execute(connection,sql, resultSet -> null); SQLExecutor.getInstance().execute(connection, sql, resultSet -> null);
} }
} }

View File

@ -22,13 +22,6 @@ public class DMDBManage extends DefaultDBManage implements DBManage {
private static String TRIGGER_SQL private static String TRIGGER_SQL
= "SELECT OWNER, TRIGGER_NAME, TABLE_OWNER, TABLE_NAME, TRIGGERING_TYPE, TRIGGERING_EVENT, STATUS, TRIGGER_BODY " = "SELECT OWNER, TRIGGER_NAME, TABLE_OWNER, TABLE_NAME, TRIGGERING_TYPE, TRIGGERING_EVENT, STATUS, TRIGGER_BODY "
+ "FROM ALL_TRIGGERS WHERE OWNER = '%s' AND TRIGGER_NAME = '%s'"; + "FROM ALL_TRIGGERS WHERE OWNER = '%s' AND TRIGGER_NAME = '%s'";
@Override
public String exportDatabaseData(Connection connection, String databaseName, String schemaName, String tableName) throws SQLException {
StringBuilder sqlBuilder = new StringBuilder();
exportTableData(connection, schemaName,tableName, sqlBuilder);
return sqlBuilder.toString();
}
@Override @Override
public String exportDatabase(Connection connection, String databaseName, String schemaName, boolean containData) throws SQLException { public String exportDatabase(Connection connection, String databaseName, String schemaName, boolean containData) throws SQLException {
StringBuilder sqlBuilder = new StringBuilder(); StringBuilder sqlBuilder = new StringBuilder();
@ -91,29 +84,6 @@ public class DMDBManage extends DefaultDBManage implements DBManage {
} }
private void exportTableData(Connection connection, String schemaName, String tableName, StringBuilder sqlBuilder) throws SQLException {
String sql =String.format("SELECT * FROM %s.%s",schemaName,tableName);
try (ResultSet resultSet = connection.createStatement().executeQuery(sql)) {
ResultSetMetaData metaData = resultSet.getMetaData();
while (resultSet.next()) {
sqlBuilder.append("INSERT INTO ").append(tableName).append(" VALUES (");
for (int i = 1; i <= metaData.getColumnCount(); i++) {
String value = resultSet.getString(i);
if (Objects.isNull(value)) {
sqlBuilder.append("NULL");
} else {
sqlBuilder.append("'").append(value).append("'");
}
if (i < metaData.getColumnCount()) {
sqlBuilder.append(", ");
}
}
sqlBuilder.append(");\n");
}
sqlBuilder.append("\n");
}
}
private void exportViews(Connection connection, String schemaName, StringBuilder sqlBuilder) throws SQLException { private void exportViews(Connection connection, String schemaName, StringBuilder sqlBuilder) throws SQLException {
try (ResultSet resultSet = connection.getMetaData().getTables(null, schemaName, null, new String[]{"VIEW"})) { try (ResultSet resultSet = connection.getMetaData().getTables(null, schemaName, null, new String[]{"VIEW"})) {
while (resultSet.next()) { while (resultSet.next()) {

View File

@ -15,13 +15,6 @@ import java.sql.SQLException;
import java.util.Objects; import java.util.Objects;
public class H2DBManage extends DefaultDBManage implements DBManage { public class H2DBManage extends DefaultDBManage implements DBManage {
@Override
public String exportDatabaseData(Connection connection, String databaseName, String schemaName, String tableName) throws SQLException {
StringBuilder sqlBuilder = new StringBuilder();
exportTableData(connection, tableName, sqlBuilder);
return sqlBuilder.toString();
}
@Override @Override
public String exportDatabase(Connection connection, String databaseName, String schemaName, boolean containData) throws SQLException { public String exportDatabase(Connection connection, String databaseName, String schemaName, boolean containData) throws SQLException {
StringBuilder sqlBuilder = new StringBuilder(); StringBuilder sqlBuilder = new StringBuilder();
@ -45,28 +38,6 @@ public class H2DBManage extends DefaultDBManage implements DBManage {
} }
} }
private void exportTableData(Connection connection, String tableName, StringBuilder sqlBuilder) throws SQLException {
String sql = String.format("select * from %s", tableName);
try (ResultSet resultSet = connection.createStatement().executeQuery(sql)) {
ResultSetMetaData metaData = resultSet.getMetaData();
while (resultSet.next()) {
sqlBuilder.append("INSERT INTO ").append(tableName).append(" VALUES (");
for (int i = 1; i <= metaData.getColumnCount(); i++) {
String value = resultSet.getString(i);
if (Objects.isNull(value)) {
sqlBuilder.append("NULL");
} else {
sqlBuilder.append("'").append(value).append("'");
}
if (i < metaData.getColumnCount()) {
sqlBuilder.append(", ");
}
}
sqlBuilder.append(");\n");
}
sqlBuilder.append("\n");
}
}
@Override @Override
public void connectDatabase(Connection connection, String database) { public void connectDatabase(Connection connection, String database) {

View File

@ -10,12 +10,6 @@ import java.sql.*;
import java.util.Objects; import java.util.Objects;
public class MysqlDBManage extends DefaultDBManage implements DBManage { public class MysqlDBManage extends DefaultDBManage implements DBManage {
@Override
public String exportDatabaseData(Connection connection, String databaseName, String schemaName, String tableName) throws SQLException {
StringBuilder sqlBuilder = new StringBuilder();
exportTableData(connection, tableName, sqlBuilder);
return sqlBuilder.toString();
}
@Override @Override
public String exportDatabase(Connection connection, String databaseName, String schemaName, boolean containData) throws SQLException { public String exportDatabase(Connection connection, String databaseName, String schemaName, boolean containData) throws SQLException {
StringBuilder sqlBuilder = new StringBuilder(); StringBuilder sqlBuilder = new StringBuilder();
@ -62,34 +56,12 @@ public class MysqlDBManage extends DefaultDBManage implements DBManage {
sqlBuilder.append("DROP TABLE IF EXISTS ").append(format(tableName)).append(";").append("\n") sqlBuilder.append("DROP TABLE IF EXISTS ").append(format(tableName)).append(";").append("\n")
.append(resultSet.getString("Create Table")).append(";").append("\n"); .append(resultSet.getString("Create Table")).append(";").append("\n");
if (containData) { if (containData) {
exportTableData(connection, tableName, sqlBuilder); exportTableData(connection, null,tableName, sqlBuilder);
} }
} }
} }
} }
private void exportTableData(Connection connection, String tableName, StringBuilder sqlBuilder) throws SQLException {
String sql = String.format("select * from %s", tableName);
try (ResultSet resultSet = connection.createStatement().executeQuery(sql)) {
ResultSetMetaData metaData = resultSet.getMetaData();
while (resultSet.next()) {
sqlBuilder.append("INSERT INTO ").append(tableName).append(" VALUES (");
for (int i = 1; i <= metaData.getColumnCount(); i++) {
String value = resultSet.getString(i);
if (Objects.isNull(value)) {
sqlBuilder.append("NULL");
} else {
sqlBuilder.append("'").append(value).append("'");
}
if (i < metaData.getColumnCount()) {
sqlBuilder.append(", ");
}
}
sqlBuilder.append(");\n");
}
sqlBuilder.append("\n");
}
}
private void exportViews(Connection connection, String databaseName, StringBuilder sqlBuilder) throws SQLException { private void exportViews(Connection connection, String databaseName, StringBuilder sqlBuilder) throws SQLException {
try (ResultSet resultSet = connection.getMetaData().getTables(databaseName, null, null, new String[]{"VIEW"})) { try (ResultSet resultSet = connection.getMetaData().getTables(databaseName, null, null, new String[]{"VIEW"})) {

View File

@ -15,12 +15,6 @@ import static ai.chat2db.plugin.postgresql.consts.SQLConst.*;
public class PostgreSQLDBManage extends DefaultDBManage implements DBManage { public class PostgreSQLDBManage extends DefaultDBManage implements DBManage {
@Override
public String exportDatabaseData(Connection connection, String databaseName, String schemaName, String tableName) throws SQLException {
StringBuilder sqlBuilder = new StringBuilder();
exportTableData(connection,schemaName, tableName, sqlBuilder);
return sqlBuilder.toString();
}
public String exportDatabase(Connection connection, String databaseName, String schemaName, boolean containData) throws SQLException { public String exportDatabase(Connection connection, String databaseName, String schemaName, boolean containData) throws SQLException {
StringBuilder sqlBuilder = new StringBuilder(); StringBuilder sqlBuilder = new StringBuilder();
exportTypes(connection, sqlBuilder); exportTypes(connection, sqlBuilder);
@ -67,28 +61,6 @@ public class PostgreSQLDBManage extends DefaultDBManage implements DBManage {
} }
} }
private void exportTableData(Connection connection, String schemaName, String tableName, StringBuilder sqlBuilder) throws SQLException {
String sql =String.format("select * from %s.%s", schemaName,tableName);
try (ResultSet resultSet = connection.createStatement().executeQuery(sql)) {
ResultSetMetaData metaData = resultSet.getMetaData();
while (resultSet.next()) {
sqlBuilder.append("INSERT INTO ").append(tableName).append(" VALUES (");
for (int i = 1; i <= metaData.getColumnCount(); i++) {
String value = resultSet.getString(i);
if (Objects.isNull(value)) {
sqlBuilder.append("NULL");
} else {
sqlBuilder.append("'").append(value).append("'");
}
if (i < metaData.getColumnCount()) {
sqlBuilder.append(", ");
}
}
sqlBuilder.append(");\n");
}
sqlBuilder.append("\n");
}
}
private void exportViews(Connection connection, String schemaName, StringBuilder sqlBuilder) throws SQLException { private void exportViews(Connection connection, String schemaName, StringBuilder sqlBuilder) throws SQLException {

View File

@ -5,44 +5,36 @@ import ai.chat2db.spi.jdbc.DefaultDBManage;
import java.sql.Connection; import java.sql.Connection;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Objects;
public class SqliteDBManage extends DefaultDBManage implements DBManage { public class SqliteDBManage extends DefaultDBManage implements DBManage {
@Override
public String exportDatabaseData(Connection connection, String databaseName, String schemaName, String tableName) throws SQLException {
StringBuilder sqlBuilder = new StringBuilder();
exportTableData(connection, tableName, sqlBuilder);
return sqlBuilder.toString();
}
@Override @Override
public String exportDatabase(Connection connection, String databaseName, String schemaName, boolean containData) throws SQLException { public String exportDatabase(Connection connection, String databaseName, String schemaName, boolean containData) throws SQLException {
StringBuilder sqlBuilder = new StringBuilder(); StringBuilder sqlBuilder = new StringBuilder();
exportTables(connection, databaseName, sqlBuilder, containData); exportTables(connection, databaseName, schemaName,sqlBuilder, containData);
exportViews(connection, databaseName, sqlBuilder); exportViews(connection, databaseName, sqlBuilder);
exportTriggers(connection, sqlBuilder); exportTriggers(connection, sqlBuilder);
return sqlBuilder.toString(); return sqlBuilder.toString();
} }
private void exportTables(Connection connection, String databaseName, StringBuilder sqlBuilder, boolean containData) throws SQLException { private void exportTables(Connection connection, String databaseName, String schemaName, StringBuilder sqlBuilder, boolean containData) throws SQLException {
try (ResultSet resultSet = connection.getMetaData().getTables(databaseName, null, null, new String[]{"TABLE", "SYSTEM TABLE"})) { try (ResultSet resultSet = connection.getMetaData().getTables(databaseName, null, null, new String[]{"TABLE", "SYSTEM TABLE"})) {
while (resultSet.next()) { while (resultSet.next()) {
exportTable(connection, resultSet.getString("TABLE_NAME"), sqlBuilder, containData); exportTable(connection,schemaName, resultSet.getString("TABLE_NAME"), sqlBuilder, containData);
} }
} }
} }
private void exportTable(Connection connection, String tableName, StringBuilder sqlBuilder, boolean containData) throws SQLException { private void exportTable(Connection connection, String schemaName, String tableName, StringBuilder sqlBuilder, boolean containData) throws SQLException {
String sql = String.format("SELECT sql FROM sqlite_master WHERE type='table' AND name='%s'", tableName); String sql = String.format("SELECT sql FROM sqlite_master WHERE type='table' AND name='%s'", tableName);
try (ResultSet resultSet = connection.createStatement().executeQuery(sql)) { try (ResultSet resultSet = connection.createStatement().executeQuery(sql)) {
if (resultSet.next()) { if (resultSet.next()) {
sqlBuilder.append("DROP TABLE IF EXISTS ").append(format(tableName)).append(";").append("\n") sqlBuilder.append("DROP TABLE IF EXISTS ").append(format(tableName)).append(";").append("\n")
.append(resultSet.getString("sql")).append(";").append("\n"); .append(resultSet.getString("sql")).append(";").append("\n");
if (containData) { if (containData) {
exportTableData(connection, tableName, sqlBuilder); exportTableData(connection,schemaName, tableName, sqlBuilder);
} }
} }
} }
@ -52,30 +44,6 @@ public class SqliteDBManage extends DefaultDBManage implements DBManage {
return "\""+tableName+"\""; return "\""+tableName+"\"";
} }
private void exportTableData(Connection connection, String tableName, StringBuilder sqlBuilder) throws SQLException {
String sql = String.format("select * from %s", tableName);
try (ResultSet resultSet = connection.createStatement().executeQuery(sql)) {
ResultSetMetaData metaData = resultSet.getMetaData();
while (resultSet.next()) {
sqlBuilder.append("INSERT INTO ").append(tableName).append(" VALUES (");
for (int i = 1; i <= metaData.getColumnCount(); i++) {
String value = resultSet.getString(i);
if (Objects.isNull(value)) {
sqlBuilder.append("NULL");
} else {
sqlBuilder.append("'").append(value).append("'");
}
if (i < metaData.getColumnCount()) {
sqlBuilder.append(", ");
}
}
sqlBuilder.append(");\n");
}
sqlBuilder.append("\n");
}
}
private void exportViews(Connection connection, String databaseName, StringBuilder sqlBuilder) throws SQLException { private void exportViews(Connection connection, String databaseName, StringBuilder sqlBuilder) throws SQLException {
try (ResultSet resultSet = connection.getMetaData().getTables(databaseName, null, null, new String[]{"VIEW"})) { try (ResultSet resultSet = connection.getMetaData().getTables(databaseName, null, null, new String[]{"VIEW"})) {
while (resultSet.next()) { while (resultSet.next()) {

View File

@ -1,6 +1,7 @@
package ai.chat2db.server.web.api.controller.rdb.data.export.strategy; package ai.chat2db.server.web.api.controller.rdb.data.export.strategy;
import ai.chat2db.server.domain.api.enums.ExportFileSuffix; import ai.chat2db.server.domain.api.enums.ExportFileSuffix;
import ai.chat2db.server.tools.base.excption.BusinessException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
@ -49,7 +50,7 @@ public class ExportDBData2JsonStrategy extends ExportDBDataStrategy {
String jsonString = objectMapper.writeValueAsString(data); String jsonString = objectMapper.writeValueAsString(data);
writer.println(jsonString); writer.println(jsonString);
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new BusinessException();
} }
} }
} }

View File

@ -1,7 +1,10 @@
package ai.chat2db.spi.jdbc; package ai.chat2db.spi.jdbc;
import java.sql.Connection; import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Objects;
import ai.chat2db.server.tools.base.excption.BusinessException; import ai.chat2db.server.tools.base.excption.BusinessException;
import ai.chat2db.server.tools.common.exception.ConnectionException; import ai.chat2db.server.tools.common.exception.ConnectionException;
@ -142,9 +145,10 @@ public class DefaultDBManage implements DBManage {
public String exportDatabase(Connection connection, String databaseName, String schemaName, boolean containData) throws SQLException { public String exportDatabase(Connection connection, String databaseName, String schemaName, boolean containData) throws SQLException {
return null; return null;
} }
@Override public String exportDatabaseData(Connection connection, String databaseName, String schemaName, String tableName) throws SQLException {
public String exportDatabaseData(Connection connection, String databaseName, String schemaName,String tableName) throws SQLException { StringBuilder sqlBuilder = new StringBuilder();
return null; exportTableData(connection, schemaName,tableName, sqlBuilder);
return sqlBuilder.toString();
} }
@Override @Override
@ -152,4 +156,32 @@ public class DefaultDBManage implements DBManage {
String sql = "DROP TABLE " + tableName; String sql = "DROP TABLE " + tableName;
SQLExecutor.getInstance().execute(connection, sql, resultSet -> null); SQLExecutor.getInstance().execute(connection, sql, resultSet -> null);
} }
public void exportTableData(Connection connection,String schemaName, String tableName, StringBuilder sqlBuilder) throws SQLException {
String sql;
if (Objects.isNull(schemaName)) {
sql = String.format("select * from %s", tableName);
}else{
sql = String.format("select * from %s.%s",schemaName,tableName);
}
try (ResultSet resultSet = connection.createStatement().executeQuery(sql)) {
ResultSetMetaData metaData = resultSet.getMetaData();
while (resultSet.next()) {
sqlBuilder.append("INSERT INTO ").append(tableName).append(" VALUES (");
for (int i = 1; i <= metaData.getColumnCount(); i++) {
String value = resultSet.getString(i);
if (Objects.isNull(value)) {
sqlBuilder.append("NULL");
} else {
sqlBuilder.append("'").append(value).append("'");
}
if (i < metaData.getColumnCount()) {
sqlBuilder.append(", ");
}
}
sqlBuilder.append(");\n");
}
sqlBuilder.append("\n");
}
}
} }