评论

收藏

[MySQL] IDEA 链接Mysql数据库并执行查询操作的完整代码

数据库 数据库 发布于:2021-06-26 10:51 | 阅读数:311 | 评论:0

  1、先写个 Mysql 的链接设置页面
package com.wretchant.fredis.menu.mysql;
import com.intellij.notification.NotificationType;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.wretchant.fredis.gui.dialog.TableDialog;
import com.wretchant.fredis.util.NotifyUtils;
import com.wretchant.fredis.util.PropertiesUtils;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.util.Map;
import java.util.Properties;
/**
 * @author Created by 谭健 on 2020/8/26. 星期三. 15:24.
 * © All Rights Reserved.
 */
public class MysqlConfig extends AnAction {
  @Override
  public void actionPerformed(@NotNull AnActionEvent event) {
    Properties properties = PropertiesUtils.readFromSystem();
    if (properties != null) {
      TableDialog.TableField build = TableDialog.TableField.build(properties.stringPropertyNames());
      TableDialog dialog = new TableDialog("Mysql 连接配置", build);
      for (int i = 0; i < dialog.getLabels().size(); i++) {
        JLabel label = dialog.getLabels().get(i);
        JTextField textField = dialog.getInputs().get(i);
        String property = properties.getProperty(label.getText());
        textField.setText(property);
      }
      dialog.show();
      if (dialog.isOK()) {
        Map<String, String> valueMap = dialog.getValueMap();
        valueMap.forEach(properties::setProperty);
        PropertiesUtils.write2System(properties);
      }
    } else {
      NotifyUtils.notifyUser(event.getProject(), "读取配置文件失败,配置文件不存在", NotificationType.ERROR);
    }
  }
}
DSC0000.jpg

  2、然后简单的写个 JDBC 操作数据库的支持类
package com.wretchant.fredis.support;
import cn.hutool.core.util.StrUtil;
import com.intellij.notification.NotificationType;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.editor.SelectionModel;
import com.wretchant.fredis.util.ClipboardUtils;
import com.wretchant.fredis.util.NotifyUtils;
import com.wretchant.fredis.util.PropertiesUtils;
import com.wretchant.fredis.value.StringValue;
import org.apache.commons.lang.StringUtils;
import org.jetbrains.annotations.NotNull;
import java.sql.*;
import java.util.*;
/**
 * @author Created by 谭健 on 2020/8/12. 星期三. 17:42.
 * &copy; All Rights Reserved.
 */
public class Mysql {

  /**
   * 执行查询语句的返回结果
   */
  public static class Rs {
    public Rs(List<Map<String, Object>> r) {
      this.r = r;
      this.count = r.size();
    }
    private List<Map<String, Object>> r = new ArrayList<>();
    private int count;
    public List<Map<String, Object>> getR() {
      return r;
    }
    public void setR(List<Map<String, Object>> r) {
      this.r = r;
    }
    public int getCount() {
      return count;
    }
    public void setCount(int count) {
      this.count = count;
    }
    public Map<String, Object> one() {
      if (Objects.isNull(r) || r.isEmpty()) {
        return null;
      }
      return r.get(0);
    }

    public Object oneGet(String key) {
      return one().get(key);
    }
  }

  // 参考: https://www.cnblogs.com/jyroy/p/9637149.html
  public static class JDBCUtil {

    /**
     * 执行sql 并返回 map 数据
     *
     * @param sql
     * @return
     */
    public static Rs rs(String sql) {
      Connection connection = null;
      Statement statement = null;
      ResultSet resultSet = null;
      List<Map<String, Object>> r = new ArrayList<>();
      try {
        connection = Mysql.DatabaseUtils.getConnection();
        statement = connection.createStatement();
        resultSet = statement.executeQuery(sql);
        // 基础信息
        ResultSetMetaData metaData = resultSet.getMetaData();
        // 返回了多少个字段
        int columnCount = metaData.getColumnCount();

        while (resultSet.next()) {
          Map<String, Object> valueMap = new LinkedHashMap<>();
          for (int i = 0; i < columnCount; i++) {
            // 这个字段是什么数据类型
            String columnClassName = metaData.getColumnClassName(i);
            // 字段名称
            String columnName = metaData.getColumnName(i);
            Object value = resultSet.getObject(columnName);
            valueMap.put(columnName, value);
          }
          r.add(valueMap);
        }
      } catch (Exception e1) {
        NotifyUtils.notifyUser(null, "error", NotificationType.ERROR);
        e1.printStackTrace();
      } finally {
        release(connection, statement, resultSet);
      }
      return new Rs(r);
    }
    public static ResultSet es(String sql) {
      Connection connection;
      Statement statement;
      ResultSet resultSet = null;
      try {
        connection = Mysql.DatabaseUtils.getConnection();
        statement = connection.createStatement();
        resultSet = statement.executeQuery(sql);
      } catch (Exception e1) {
        NotifyUtils.notifyUser(null, "error", NotificationType.ERROR);
        e1.printStackTrace();
      }
      return resultSet;
    }

    public static void release(Connection connection, Statement st, ResultSet rs) {
      closeConn(connection);
      closeRs(rs);
      closeSt(st);
    }
    public static void closeRs(ResultSet rs) {
      try {
        if (rs != null) {
          rs.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      } finally {
        rs = null;
      }
    }
    private static void closeSt(Statement st) {
      try {
        if (st != null) {
          st.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      } finally {
        st = null;
      }
    }
    private static void closeConn(Connection connection) {
      try {
        if (connection != null) {
          connection.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      } finally {
        connection = null;
      }
    }
  }
  public static class DatabaseUtils {
    private static Connection connection = null;
    static {
      Properties properties = PropertiesUtils.readFromSystem();
      try {
        if (properties != null) {
          Class.forName("com.mysql.cj.jdbc.Driver");
          connection = DriverManager.getConnection(
              properties.getProperty("mysql.url"),
              properties.getProperty("mysql.username"),
              properties.getProperty("mysql.password")
          );
          NotifyUtils.notifyUser(null, "数据库连接成功", NotificationType.INFORMATION);
        }
      } catch (Exception e) {
        NotifyUtils.notifyUser(null, "数据库连接失败", NotificationType.ERROR);
        e.printStackTrace();
      }
    }
    public static Connection getConnection() {
      return connection;
    }
  }

  public static void exec(@NotNull AnActionEvent event, Template template) {
    StringValue stringValue = new StringValue(template.getDefaultValue());
    Optional.ofNullable(event.getData(PlatformDataKeys.EDITOR)).
        ifPresent(editor -> {
          SelectionModel selectionModel = editor.getSelectionModel();
          String selectedText = selectionModel.getSelectedText();
          if (StringUtils.isNotBlank(selectedText)) {
            stringValue.setValue(StrUtil.format(template.getDynamicValue(), selectedText));
          }
        });
    ClipboardUtils.clipboard(stringValue.getValue());
    NotifyUtils.notifyUser(event.getProject(), stringValue.getValue(), NotificationType.INFORMATION);
  }
  /**
   * sql 语句模版
   */
  public enum Template {
    SELECT("SELECT * FROM x WHERE 1 = 1 AND ", "SELECT * FROM {} WHERE 1 = 1 AND ", "查询语句"),
    UPDATE("UPDATE x SET x = x WHERE 1 = 1 AND ", "UPDATE {} SET x = x WHERE 1 = 1 AND ", "更新语句"),
    DELETE("DELETE FROM x WHERE 1 = 1 ", "DELETE FROM {} WHERE 1 = 1 ", "删除语句"),
    INSERT("INSERT INTO * (x) VALUES (x) ", "INSERT INTO {} (x) VALUES (x) ", "新增语句"),
    ;
    Template(String defaultValue, String dynamicValue, String describe) {
      this.defaultValue = defaultValue;
      this.dynamicValue = dynamicValue;
      this.describe = describe;
    }
    public String getDynamicValue() {
      return dynamicValue;
    }
    public String getDefaultValue() {
      return defaultValue;
    }
    public String getDescribe() {
      return describe;
    }
    /**
     * 模版内容:默认值
     */
    private final String defaultValue;
    /**
     * 动态内容
     */
    private final String dynamicValue;
    /**
     * 内容描述
     */
    private final String describe;

  }
}
  3、写个测试连接的类&#xff0c;测试一下 mysql 是否可以正常链接
package com.wretchant.fredis.menu.mysql;
import com.intellij.notification.NotificationType;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.wretchant.fredis.support.Mysql;
import com.wretchant.fredis.util.NotifyUtils;
import org.jetbrains.annotations.NotNull;
import java.sql.ResultSet;
/**
 * @author Created by 谭健 on 2020/9/15. 星期二. 10:17.
 * &copy; All Rights Reserved.
 */
public class MysqlConn extends AnAction {

  @Override
  public void actionPerformed(@NotNull AnActionEvent event) {
    try {
      ResultSet es = Mysql.JDBCUtil.es("select 1 as ct");
      es.next();
      int ct = es.getInt("ct");
      if (ct == 1) {
        NotifyUtils.notifyUser(null, "连接是正常的", NotificationType.INFORMATION);
      } else {
        NotifyUtils.notifyUser(null, "连接不正常", NotificationType.ERROR);
      }
      Mysql.JDBCUtil.closeRs(es);
    } catch (Exception e1) {
      e1.printStackTrace();
      NotifyUtils.notifyUser(null, "连接不正常", NotificationType.ERROR);
    }
  }
}
DSC0001.jpg

  以上就是IDEA 链接Mysql数据库并执行查询操作的完整代码的详细内容,更多关于IDEA 链接Mysql执行查询操作 的资料请关注脚本之家其它相关文章!

关注下面的标签,发现更多相似文章