java查询数据库方法show create

实现获取SQL创建代码和获取数据操作(待优化)

public Tip query(HttpServletResponse response) throws IOException {
        var list = queryTablesDao.queryAllTables();
        PrintWriter writer = new PrintWriter(response.getOutputStream());
        List<String> file = new ArrayList<>();
        for (String tableName:list) {
//            var line = queryTablesDao.queryCreateTableSql(tableName);
//            writer.println(line);
            String sql = "show create table " +tableName;
            var str = tableServer.handleResult(sql)+";";
            file.add(str);
            writer.println(str);
            String sql1 = "SELECT * FROM " +tableName;
            var test = tableServer.handleResult2(sql1);
            for (String st:test) {
                writer.println(st);
                file.add(st);
            }
            writer.flush();
        }
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.sql.DataSource;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

@Service
public class TableServer {

    @Resource
    DataSource dataSource;

    Connection conn = null;

    public String handleResult(String sql){
        ResultSet rs = executeQuery(sql);
        try {
            while (rs.next()) {
                ResultSetMetaData md = rs.getMetaData();
                int cols = md.getColumnCount();

                for (int i = 1; i <= cols; i++) {
                    switch (md.getColumnType(i)) {
                        case Types.BIT:
                        case Types.INTEGER:
                        case Types.TINYINT:
                        case Types.SMALLINT:
                        case Types.NUMERIC:
                            System.out.print(rs.getInt(i));
                            break;
                        case Types.BIGINT:
                            System.out.print(rs.getLong(i));
                            break;
                        case Types.DECIMAL:
                            System.out.print(rs.getBigDecimal(i));
                            break;
                        case Types.BOOLEAN:
                            System.out.print(rs.getBoolean(i));
                            break;
                        case Types.FLOAT:
                        case Types.REAL:
                            System.out.print(rs.getFloat(i));
                            break;
                        case Types.DOUBLE:
                            System.out.print(rs.getDouble(i));
                            break;
                        case Types.VARCHAR:
                        case Types.NVARCHAR:
                        case Types.CHAR:
                        case Types.NCHAR:
                        case Types.DATE:
                        case Types.TIMESTAMP: {
                            String val = rs.getString(i);
                            if(val==null){
                                System.out.print("null");
                            }else {
                                val = val.replace("\r", "");
                                val = val.replace("\n", "");
                                if(i>1) {
                                    return val;
                                }else{
                                    System.out.print(val);
                                }
                            }
                        }
                        break;
                        case Types.VARBINARY: {
                            byte[] bytes = rs.getBytes(i);
                            if(bytes!=null) {
                                String hex="";
                                for (int c = 0; c < bytes.length; c++) {
                                    hex += String.format("%02X", bytes[c]);
                                }
                                System.out.print("'" + hex + "'");
                            }else{
                                System.out.print("null");
                            }
                        }
                        break;
                        case Types.NULL:
                            System.out.print("null");
                            break;
                        case Types.LONGVARBINARY:
                            System.out.print("[IMAGE]");
                            break;
                        default:
                            System.out.print("Unknown type: " + md.getColumnType(i));
                    }

                    if(i<cols){
                        System.out.print("|");
                    }
                }

                // new line
                System.out.println("");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            close();
        }
        return null;
    }

    public List<String> handleResult2(String sql){
        ResultSet rs = executeQuery(sql);
        List<String> list = new ArrayList<>();
        try {
            while (rs.next()) {
                ResultSetMetaData md = rs.getMetaData();
                int cols = md.getColumnCount();
                StringBuilder str = new StringBuilder("INSERT INTO "+md.getTableName(1)+" VALUES(");
                for (int i = 1; i <= cols; i++) {
                    switch (md.getColumnType(i)) {
                        case Types.BIT:
                        case Types.INTEGER:
                        case Types.TINYINT:
                        case Types.SMALLINT:
                        case Types.NUMERIC:
                            str.append(rs.getInt(i));
                            break;
                        case Types.BIGINT:
                            str.append(rs.getLong(i));
                            break;
                        case Types.DECIMAL:
                            str.append(rs.getBigDecimal(i));
                            break;
                        case Types.BOOLEAN:
                            str.append(rs.getBoolean(i));
                            break;
                        case Types.FLOAT:
                        case Types.REAL:
                            str.append(rs.getFloat(i));
                            break;
                        case Types.DOUBLE:
                            str.append(rs.getDouble(i));
                            break;
                        case Types.VARCHAR:
                        case Types.NVARCHAR:
                        case Types.CHAR:
                        case Types.NCHAR:
                        case Types.DATE:
                        case Types.TIMESTAMP: {
                            String val = rs.getString(i);
                            if(val==null){
                                str.append("null");
                            }else {
                                val = val.replace("\r", "");
                                val = val.replace("\n", "");
                                str.append("'"+val+"'");
                            }
                        }
                        break;
                        case Types.VARBINARY: {
                            byte[] bytes = rs.getBytes(i);
                            if(bytes!=null) {
                                String hex="";
                                for (int c = 0; c < bytes.length; c++) {
                                    hex += String.format("%02X", bytes[c]);
                                }
                                str.append("'"+ hex +"'");
                            }
                        }
                        break;
                        case Types.NULL:
                            str.append("null");
                            break;
                        case Types.LONGVARBINARY:
                            str.append("[IMAGE]");
                            break;
                        default:
                            System.out.print("Unknown type: " + md.getColumnType(i));
                    }

                    if(i<cols){
                        str.append(",");
                    }
                }
                str.append(");");
                String st = str.toString();
            list.add(st);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            close();
        }
        return list;
    }

    public ResultSet executeQuery(String sql) {
        ResultSet rs=null;
        try {
            conn = dataSource.getConnection();
            PreparedStatement q1 = conn.prepareStatement(sql);
            rs = q1.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return rs;
    }

    public void close() {
        try {
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

io输入流模板

 response.setContentType("application/octet-stream");
        //此处设置请求头为二进制
        response.setHeader(ACCESS_CONTROL_EXPOSE_HEADERS, CONTENT_DISPOSITION);
        var list = queryTablesDao.queryAllTables();
        List<String> file = new ArrayList<String>();
        if(filter!=null && filter.equals(SCHEDULE)){
            for (String tableName : list) {
                String dropSql = "\nDROP TABLE IF EXISTS " +tableName +";\n";
                file.add(dropSql);
                String createSql = "show create table " + tableName;
                var str = tableServer.handleResult(createSql) + ";\n\n";
                file.add(str);
            }
        }else {
            for (String tableName : list) {
                String dropSql = "\nDROP TABLE IF EXISTS " + tableName + ";\n";
                file.add(dropSql);
                String createSql = "show create table " + tableName;
                var str = tableServer.handleResult(createSql) + ";\n\n";
                file.add(str);
                String insertSql = "SELECT * FROM " + tableName;
                var test = tableServer.handleResult2(insertSql);
                for (String st : test) {
                    file.add(st + "\n");
                }
            }
        }
       //把List<String> 转化为byte[]流   
//具体如下,StringBuffer str = new StringBuffer
// str.append(list每一个String插入)
//byte[] data = str.toString.getBytes(StandardCharsets.UTF_8)
//上面那步防止乱码的发生
        var data = tableServer.changToByte(file);
        var dataBase = queryTablesDao.queryDataBase();
       //防止中文乱码
        response.setHeader(CONTENT_DISPOSITION,"attachment; filename="+dataBase+".sql");
        IOUtils.write(data,response.getOutputStream());
//        writer.flush();
        return null;

List排序问题

.stream().sorted(Comparator.comparing(list对象::按此值排序).reversed()).collect(Collectors.toList());

加reversed()为倒叙

事务处理问题
@Transactional(rollbackFor = Exception.class)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值