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


Posted in MySQL onMay 20, 2021

 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);
        }
    }

}

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

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.
 * © 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.
 * © 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);
        }
    }
}

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

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

MySQL 相关文章推荐
Idea连接MySQL数据库出现中文乱码的问题
Apr 14 MySQL
MySQL性能压力基准测试工具sysbench的使用简介
Apr 21 MySQL
虚拟机linux端mysql数据库无法远程访问的解决办法
May 26 MySQL
MySQL注入基础练习
May 30 MySQL
Mysql 设置boolean类型的操作
Jun 04 MySQL
Mysql中调试存储过程最简单的方法
Jun 30 MySQL
Node-Red实现MySQL数据库连接的方法
Aug 07 MySQL
MySQL令人大跌眼镜的隐式转换
Aug 23 MySQL
mysql中int(3)和int(10)的数值范围是否相同
Oct 16 MySQL
Mysql外键约束的创建与删除的使用
Mar 03 MySQL
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
Mar 23 MySQL
MySQL 字符集 character
May 04 MySQL
MySQL 覆盖索引的优点
May 19 #MySQL
MySQL 视图(View)原理解析
超详细教你怎么升级Mysql的版本
详解mysql三值逻辑与NULL
MySQL时间盲注的五种延时方法实现
分析MySQL抛出异常的几种常见解决方式
详解MySQL数据库千万级数据查询和存储
May 18 #MySQL
You might like
php面向对象全攻略 (十五) 多态的应用
2009/09/30 PHP
PHP新手用的Insert和Update语句构造类
2012/03/31 PHP
洪恩在线成语词典小偷程序php版
2012/04/20 PHP
php统计数组元素个数的方法
2015/07/02 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
laravel中短信发送验证码的实现方法
2018/04/25 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
2011/06/28 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
2013/02/26 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
node.js的事件机制
2017/02/08 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
2017/02/20 Javascript
ES6新特性之解构、参数、模块和记号用法示例
2017/04/01 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
2017/10/11 Javascript
微信小程序自定义tabBar组件开发详解
2020/09/24 Javascript
微信小程序云开发 搭建一个管理小程序
2019/05/17 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
[10:21]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster 选手采访
2021/03/11 DOTA
python实现划词翻译
2020/04/23 Python
python的正则表达式re模块的常用方法
2013/03/09 Python
在Python中使用全局日志时需要注意的问题
2015/05/06 Python
Python快速从注释生成文档的方法
2016/12/26 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
2019/08/23 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
2016/12/20 HTML / CSS
HTML5适合的情人节礼物有纪念日期功能
2021/01/25 HTML / CSS
交通安全标语
2014/06/06 职场文书
Java实现简易的分词器功能
2021/06/15 Java/Android
delete in子查询不走索引问题分析
2022/07/07 MySQL