mysql jdbc 表操作工具类

TableUtil

package com.example.hutool;

import org.hamcrest.beans.PropertyUtil;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class TableUtil {

    private static String url = null;
    private static String user = null;
    private static String passwd = null;
    private static String driver = null;

    static {
        //初始化jdbc连接参数
        Properties properties = null;
        try {
            properties = new Properties();
            InputStream in = PropertyUtil.class.getClassLoader().getResourceAsStream("procedure.properties");
            assert in != null;
            BufferedReader bf = new BufferedReader(new InputStreamReader(in));
            properties.load(bf);
            in.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        assert properties != null;
        url = properties.getProperty("url");
        user = properties.getProperty("user");
        passwd = properties.getProperty("passwd");
        driver = properties.getProperty("driver");
    }

    /**
     * 创建表
     * @param table
     * @return
     */
    public static TableExecuteResult createTable(Table table){
        StringBuilder createTableSentence = new StringBuilder("CREATE TABLE ").append(table.getTableName()).append(" (").append("\n");
        List<Field> fields = table.getFields();
        List<Field> primaryKeys = new ArrayList<>();
        for (Field field : fields) {
            //主键
            if(field.getPrimaryKey()){
                primaryKeys.add(field);
            }
            //字段名&类型&长度
            createTableSentence.append("`")
                    .append(field.getFieldName())
                    .append("`")
                    .append(" ")
                    .append(field.getType())
                    .append("(")
                    .append(field.getLength());
            if(null == field.getDecimals()){
                createTableSentence.append(")");
            }else{
                //小数位
                createTableSentence.append(",").append(field.getDecimals()).append(")");
            }
            //非空
            if(field.getNotNull()){
                createTableSentence.append(" ")
                        .append("NOT NULL");
            }
            //非空
            if(field.getAutoIncrement()){
                createTableSentence.append(" ")
                        .append("AUTO_INCREMENT");
            }
            //唯一索引
            if(field.getUnique()){
                createTableSentence.append(" ")
                        .append("UNIQUE");
            }
            //描述
            if(null != field.getDescribe() && !"".equals(field.getDescribe())){
                createTableSentence.append(" ").append("COMMENT '").append(field.getDescribe()).append("'");
            }
            createTableSentence.append(",").append("\n");
        }
        for (Field primaryKey : primaryKeys) {
            createTableSentence.append("PRIMARY KEY (`").append(primaryKey.getFieldName()).append("`)");
            createTableSentence.append(",").append("\n");
        }
        //去除末尾逗号
        createTableSentence.deleteCharAt(createTableSentence.length() - 2);
        createTableSentence.append(") ");
        //表属性
        createTableSentence.append("ENGINE=").append(table.getEngine()).append(" ");
        createTableSentence.append("CHARSET=").append(table.getCharset()).append(" ");
        createTableSentence.append("COLLATE=").append(table.getCollate());
        //运行建表语句
        return executeSQL(createTableSentence.toString());
    }

    /**
     * 删除表
     * @param table
     * @return
     */
    public static TableExecuteResult dropTable(Table table){
        return executeSQL("DROP TABLE IF EXISTS `"+table.getTableName()+"`;");
    }

    /**
     * 添加字段
     * @param table
     * @return
     */
    public static TableExecuteResult addField(Table table){
        StringBuilder addFieldSentences = new StringBuilder();
        List<String> primaryKeyName = new ArrayList<>();
        for (Field field : table.getFields()) {
            StringBuilder addFieldSentence = new StringBuilder("ALTER TABLE `"+table.getTableName()+"` ADD ");
            //主键
            if(field.getPrimaryKey()){
                primaryKeyName.add(field.getFieldName());
            }
            //字段名&类型&长度
            addFieldSentence.append("`")
                    .append(field.getFieldName())
                    .append("`")
                    .append(" ")
                    .append(field.getType())
                    .append("(")
                    .append(field.getLength());
            if(null == field.getDecimals()){
                addFieldSentence.append(")");
            }else{
                //小数位
                addFieldSentence.append(",").append(field.getDecimals()).append(")");
            }
            //非空
            if(field.getNotNull()){
                addFieldSentence.append(" ")
                        .append("NOT NULL");
            }
            //自增
            if(field.getAutoIncrement()){
                addFieldSentence.append(" ")
                        .append("AUTO_INCREMENT");
            }
            //唯一索引
            if(field.getUnique()){
                addFieldSentence.append(" ")
                        .append("UNIQUE");
            }
            //描述
            if(null != field.getDescribe() && !"".equals(field.getDescribe())){
                addFieldSentence.append(" ").append("COMMENT '").append(field.getDescribe()).append("'");
            }
            addFieldSentence.append(";\n");
            addFieldSentences.append(addFieldSentence);
        }
        for (String primaryKey : primaryKeyName) {
            addFieldSentences.append("ALTER TABLE `")
                    .append(table.getTableName())
                    .append("` ADD PRIMARY KEY(`")
                    .append(primaryKey).append("`)");
        }
        return executeSQL(addFieldSentences.toString());
    }

    /**
     * 删除字段
     * @param table
     * @return
     */
    public static TableExecuteResult dropField(Table table){
        StringBuilder addFieldSentences = new StringBuilder();
        for (Field field : table.getFields()) {
            String addFieldSentence = "ALTER TABLE `" + table.getTableName() + "` DROP " + "`" + field.getFieldName() + "`" +
                    ";\n";
            addFieldSentences.append(addFieldSentence);
        }
        return executeSQL(addFieldSentences.toString());
    }

    /**
     * 修改字段
     * 可以更新字段名和各种字段属性
     * @param table
     * @return
     */
    public static TableExecuteResult updateField(Table table){
        StringBuilder addFieldSentences = new StringBuilder();
        for (Field field : table.getFields()) {
            StringBuilder addFieldSentence = new StringBuilder("ALTER TABLE `"+table.getTableName()+"` MODIFY COLUMN ");
            //字段名&类型&长度
            addFieldSentence.append("`")
                    .append(field.getFieldName())
                    .append("`")
                    .append(" ")
                    .append(field.getType())
                    .append("(")
                    .append(field.getLength());
            if(null == field.getDecimals()){
                addFieldSentence.append(")");
            }else{
                //小数位
                addFieldSentence.append(",").append(field.getDecimals()).append(")");
            }
            //非空
            if(field.getNotNull()){
                addFieldSentence.append(" ")
                        .append("NOT NULL");
            }
            //自增
            if(field.getAutoIncrement()){
                addFieldSentence.append(" ")
                        .append("AUTO_INCREMENT");
            }
            //唯一索引
            if(field.getUnique()){
                addFieldSentence.append(" ")
                        .append("UNIQUE");
            }
            //描述
            if(null != field.getDescribe() && !"".equals(field.getDescribe())){
                addFieldSentence.append(" ").append("COMMENT '").append(field.getDescribe()).append("'");
            }
            addFieldSentence.append(";");
            addFieldSentences.append(addFieldSentence);
            //更新字段名
            if(null != field.getOriginalFieldName() && !"".equals(field.getOriginalFieldName())){
                addFieldSentences.append("ALTER TABLE `")
                        .append(table.getTableName())
                        .append("` CHANGE `")
                        .append(field.getOriginalFieldName())
                        .append("` `")
                        .append(field.getFieldName())
                        .append("` ");
                //字段名&类型&长度
                addFieldSentences.append(field.getType())
                        .append("(")
                        .append(field.getLength());
                if(null == field.getDecimals()){
                    addFieldSentence.append(")");
                }else{
                    //小数位
                    addFieldSentence.append(",").append(field.getDecimals()).append(");");
                }
            }
        }
        return executeSQL(addFieldSentences.toString());
    }

    private static TableExecuteResult executeSQL(String sql){
        //运行建表语句
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        try {
            Class.forName(driver);
            connection = DriverManager.getConnection(url, user, passwd);
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.execute();
        } catch (SQLException se) {
            return new TableExecuteResult(false, se.getErrorCode(), se.getMessage());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != connection) {
                    connection.close();
                }
                if (null != preparedStatement) {
                    preparedStatement.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return new TableExecuteResult(true, 0, null);
    }
}

Table

package com.example.hutool;

import java.util.List;

public class Table {

    //表名
    private String tableName;
    //存储引擎
    private String engine = "InnoDB";
    //编码方式
    private String charset = "utf8";
    //排序方式
    private String collate = "utf8_unicode_ci";
    //字段
    private List<Field> fields;

    public String getTableName() {
        return tableName;
    }

    public void setTableName(String tableName) {
        this.tableName = tableName;
    }

    public String getEngine() {
        return engine;
    }

    public void setEngine(String engine) {
        this.engine = engine;
    }

    public String getCharset() {
        return charset;
    }

    public void setCharset(String charset) {
        this.charset = charset;
    }

    public String getCollate() {
        return collate;
    }

    public void setCollate(String collate) {
        this.collate = collate;
    }

    public List<Field> getFields() {
        return fields;
    }

    public void setFields(List<Field> fields) {
        this.fields = fields;
    }

}

Field

package com.example.hutool;

import java.util.HashSet;
import java.util.Set;

public class Field {

    private static final Set<String> floatNumType = new HashSet<>();

    //字段名
    private String fieldName;
    //原字段名
    private String originalFieldName;
    //主键
    private Boolean primaryKey = false;
    //自增
    private Boolean autoIncrement = false;
    //非空约束
    private Boolean notNull = false;
    //唯一约束
    private Boolean unique = false;
    //数据类型
    private String type;
    //长度
    private Integer length = 0;
    //小数位
    private Integer decimals;
    //说明
    private String describe;

    static {
        floatNumType.add("float");
        floatNumType.add("double");
        floatNumType.add("decimal");
    }

    public Field() {
        correctParameters();
    }

    public Field(String fieldName, String originalFieldName, Boolean primaryKey, Boolean autoIncrement, Boolean notNull, Boolean unique, String type, Integer length, Integer decimals, String describe) {
        this.fieldName = fieldName;
        this.originalFieldName = originalFieldName;
        this.primaryKey = primaryKey;
        this.autoIncrement = autoIncrement;
        this.notNull = notNull;
        this.unique = unique;
        this.type = type;
        this.length = length;
        this.decimals = decimals;
        this.describe = describe;
        correctParameters();
    }

    //验证有无错误参数并纠正
    private void correctParameters(){
        String type = getType();
        if(floatNumType.contains(type)){
            //浮点数小数位默认0
            if(null == getDecimals()){
                setDecimals(0);
            }
        }else{
            //数据类型为浮点数的情况下才能有小数位
            if(null != getDecimals()){
                setDecimals(null);
            }
        }

    }

    public Boolean getPrimaryKey() {
        return primaryKey;
    }

    public void setPrimaryKey(Boolean primaryKey) {
        this.primaryKey = primaryKey;
    }

    public Boolean getAutoIncrement() {
        return autoIncrement;
    }

    public void setAutoIncrement(Boolean autoIncrement) {
        this.autoIncrement = autoIncrement;
    }

    public String getFieldName() {
        return fieldName;
    }

    public void setFieldName(String fieldName) {
        this.fieldName = fieldName;
    }

    public Boolean getNotNull() {
        return notNull;
    }

    public void setNotNull(Boolean notNull) {
        this.notNull = notNull;
    }

    public Boolean getUnique() {
        return unique;
    }

    public void setUnique(Boolean unique) {
        this.unique = unique;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public Integer getLength() {
        return length;
    }

    public void setLength(Integer length) {
        this.length = length;
    }

    public Integer getDecimals() {
        return decimals;
    }

    public void setDecimals(Integer decimals) {
        this.decimals = decimals;
    }

    public String getDescribe() {
        return describe;
    }

    public void setDescribe(String describe) {
        this.describe = describe;
    }

    public String getOriginalFieldName() {
        return originalFieldName;
    }

    public void setOriginalFieldName(String originalFieldName) {
        this.originalFieldName = originalFieldName;
    }
}

TableExecuteResult

package com.example.hutool;

import java.util.List;
import java.util.Map;

class TableExecuteResult {
    private Boolean success;
    private int errCode;
    private String reason;

    public TableExecuteResult() {
    }

    public TableExecuteResult(Boolean success, int errCode, String reason) {
        this.success = success;
        this.errCode = errCode;
        this.reason = reason;
    }

    public Boolean getSuccess() {
        return success;
    }

    public void setSuccess(Boolean success) {
        this.success = success;
    }

    public int getErrCode() {
        return errCode;
    }

    public void setErrCode(int errCode) {
        this.errCode = errCode;
    }

    public String getReason() {
        return reason;
    }

    public void setReason(String reason) {
        this.reason = reason;
    }

}

procedure.properties

url=jdbc:mysql://192.168.0.106:3306/ccgc?characterEncoding=utf8&useOldAliasMetadataBehavior=true&allowMultiQueries=true
user=root
passwd=root
driver=com.mysql.jdbc.Driver

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值