MySQLデータベースに接続し、クエリ操作を実行するためのIDEAの完全なコード

MySQLデータベースに接続し、クエリ操作を実行するためのIDEAの完全なコード

1.まずMysqlリンク設定ページを書く

パッケージ com.wretchant.fredis.menu.mysql;

com.intellij.notification.NotificationType をインポートします。
com.intellij.openapi.actionSystem.AnAction をインポートします。
com.intellij.openapi.actionSystem.AnActionEvent をインポートします。
com.wretchant.fredis.gui.dialog.TableDialog をインポートします。
com.wretchant.fredis.util.NotifyUtils をインポートします。
com.wretchant.fredis.util.PropertiesUtils をインポートします。
org.jetbrains.annotations.NotNull をインポートします。

javax.swing.* をインポートします。
java.util.Map をインポートします。
java.util.Properties をインポートします。

/**
 * @author Tan Jian によって 2020/8/26 水曜日 15:24 に作成されました。
 * © 無断転載を禁じます。
 */
パブリッククラスMysqlConfigはAnActionを拡張します{

    @オーバーライド
    パブリック void actionPerformed(@NotNull AnActionEvent イベント) {

        プロパティ properties = PropertiesUtils.readFromSystem();
        プロパティが null の場合
            TableDialog.TableField ビルド = TableDialog.TableField.build(properties.stringPropertyNames());
            TableDialog ダイアログ = new TableDialog("Mysql 接続構成", ビルド);
            (int i = 0; i < dialog.getLabels().size(); i++) {
                JLabel ラベル = dialog.getLabels().get(i);
                JTextField テキストフィールド = dialog.getInputs().get(i);
                文字列プロパティ = properties.getProperty(label.getText());
                textField.setText(プロパティ);
            }
            ダイアログを表示します。
            ダイアログがOKの場合
                Map<String, String> valueMap = dialog.getValueMap();
                valueMap.forEach(プロパティ::setProperty);
                PropertiesUtils.write2System(プロパティ);
            }
        } それ以外 {
            NotificationUtils.notifyUser(event.getProject(), "構成ファイルの読み取りに失敗しました。構成ファイルが存在しません", NotificationType.ERROR);
        }
    }

} 

2. 次に、データベースを操作するためのJDBCサポートクラスを作成します。

パッケージ com.wretchant.fredis.support;

cn.hutool.core.util.StrUtil をインポートします。
com.intellij.notification.NotificationType をインポートします。
com.intellij.openapi.actionSystem.AnActionEvent をインポートします。
com.intellij.openapi.actionSystem.PlatformDataKeys をインポートします。
com.intellij.openapi.editor.SelectionModel をインポートします。
com.wretchant.fredis.util.ClipboardUtils をインポートします。
com.wretchant.fredis.util.NotifyUtils をインポートします。
com.wretchant.fredis.util.PropertiesUtils をインポートします。
com.wretchant.fredis.value.StringValue をインポートします。
org.apache.commons.lang.StringUtils をインポートします。
org.jetbrains.annotations.NotNull をインポートします。

java.sql.* をインポートします。
java.util.* をインポートします。

/**
 * @author Tan Jian によって 2020/8/12 水曜日 17:42 に作成されました。
 * © 無断転載を禁じます。
 */
パブリッククラスMysql {


    /**
     * クエリステートメントを実行して結果を返します */
    パブリック静的クラス Rs {

        パブリック Rs(リスト<マップ<文字列、オブジェクト>> r) {
            r を次のように記述します。
            r.size を 0 に設定します。
        }

        プライベートList<Map<String, Object>> r = new ArrayList<>();

        プライベート int カウント;

        パブリックリスト<Map<文字列、オブジェクト>> getR() {
            r を返します。
        }

        パブリック void setR(List<Map<String, Object>> r) {
            r を次のように記述します。
        }

        パブリック int getCount() {
            カウントを返します。
        }

        パブリック void setCount(int count) {
            this.count = カウント;
        }

        パブリックマップ<String, Object> one() {
            (Objects.isNull(r) || r.isEmpty()) の場合 {
                null を返します。
            }
            r.get(0) を返します。
        }


        パブリックオブジェクトoneGet(文字列キー) {
            one() を返します。get(key);
        }
    }


    // 参考: https://www.cnblogs.com/jyroy/p/9637149.html

    パブリック静的クラスJDBCUtil {


        /**
         * SQLを実行し、マップデータを返します *
         * @param sql
         * @戻る
         */
        パブリック静的 Rs rs(String sql) {
            接続 connection = null;
            ステートメント statement = null;
            結果セット resultSet = null;
            List<Map<String, Object>> r = new ArrayList<>();
            試す {
                接続 = Mysql.DatabaseUtils.getConnection();
                ステートメント = connection.createStatement();
                結果セット = ステートメント.executeQuery(sql);

                // 基本情報 ResultSetMetaData metaData = resultSet.getMetaData();
                // 返されるフィールドの数 int columnCount = metaData.getColumnCount();


                (resultSet.next()) の間 {
                    Map<String, Object> valueMap = 新しい LinkedHashMap<>();
                    (int i = 0; i < 列数; i++) {
                        // このフィールドのデータ型は何ですか? String columnClassName = metaData.getColumnClassName(i);
                        //フィールド名 String columnName = metaData.getColumnName(i);
                        オブジェクト値 = resultSet.getObject(columnName);
                        valueMap.put(列名、値);
                    }
                    r.add(値マップ);
                }
            } キャッチ (例外 e1) {
                通知ユーティリティ。通知ユーザーを null にします。通知タイプ。
                e1.printStackTrace();
            ついに
                解放(接続、ステートメント、結果セット);
            }
            新しいRs(r)を返します。
        }

        パブリック静的ResultSet es(String sql) {
            接続接続;
            声明文;
            結果セット resultSet = null;
            試す {
                接続 = Mysql.DatabaseUtils.getConnection();
                ステートメント = connection.createStatement();
                結果セット = ステートメント.executeQuery(sql);
            } キャッチ (例外 e1) {
                通知ユーティリティ。通知ユーザーを null にします。通知タイプ。
                e1.printStackTrace();
            }
            結果セットを返します。
        }


        パブリック静的voidリリース(接続接続、ステートメントst、結果セットrs) {
            closeConn(接続);
            クローズRs(rs);
            閉じるSt(st);
        }

        パブリック静的void closeRs(ResultSet rs) {
            試す {
                rs != null の場合 {
                    rs.close();
                }
            } キャッチ (SQLException e) {
                e.printStackTrace();
            ついに
                rs = null;
            }
        }

        プライベート静的void closeSt(ステートメントst) {
            試す {
                st != null の場合 {
                    st.close();
                }
            } キャッチ (SQLException e) {
                e.printStackTrace();
            ついに
                st = null;
            }
        }

        プライベート静的void closeConn(接続接続) {
            試す {
                if (接続 != null) {
                    接続を閉じます。
                }
            } キャッチ (SQLException e) {
                e.printStackTrace();
            ついに
                接続 = null;
            }
        }

    }

    パブリック静的クラスDatabaseUtils {
        プライベート静的接続 connection = null;

        静的{
            プロパティ properties = PropertiesUtils.readFromSystem();
            試す {
                プロパティが null の場合
                    クラス.forName("com.mysql.cj.jdbc.Driver");
                    接続 = DriverManager.getConnection(
                            プロパティ.getProperty("mysql.url"),
                            properties.getProperty("mysql.username"),
                            properties.getProperty("mysql.password")
                    );
                    NotificationUtils.notifyUser(null, "データベース接続に成功しました", NotificationType.INFORMATION);
                }
            } キャッチ (例外 e) {
                NotificationUtils.notifyUser(null, "データベース接続に失敗しました", NotificationType.ERROR);
                e.printStackTrace();
            }
        }

        パブリック静的接続getConnection() {
            接続を返します。
        }
    }


    パブリック静的 void exec(@NotNull AnActionEvent イベント、テンプレート テンプレート) {
        文字列値 stringValue = 新しい文字列値(template.getDefaultValue());
        オプション。ofNullable(event.getData(PlatformDataKeys.EDITOR))。
                ifPresent(エディター -> {
                    選択モデル selectionModel = editor.getSelectionModel();
                    文字列 selectedText = selectionModel.getSelectedText();
                    StringUtils.isNotBlank(選択されたテキスト)の場合
                        文字列値を設定します(StrUtil.format(template.getDynamicValue(), selectedText));
                    }
                });
        ClipboardUtils.clipboard(文字列値.getValue());
        通知ユーザーを通知します。
    }

    /**
     * SQL ステートメント テンプレート */
    パブリック列挙型テンプレート {

        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 "、"delete ステートメント")、
        INSERT("INSERT INTO * (x) VALUES (x) ", "INSERT INTO {} (x) VALUES (x) ", "新しいステートメント"),
        ;

        テンプレート(文字列 defaultValue、文字列 dynamicValue、文字列 describe) {
            this.defaultValue = デフォルト値;
            this.dynamicValue = dynamicValue;
            this.describe = 記述します。
        }

        パブリック文字列 getDynamicValue() {
            動的値を返します。
        }

        パブリック文字列 getDefaultValue() {
            デフォルト値を返します。
        }

        パブリック文字列 getDescribe() {
            記述を返します。
        }

        /**
         * テンプレートの内容: デフォルト値*/
        プライベート最終文字列デフォルト値;
        /**
         * 動的コンテンツ */
        プライベート最終文字列 dynamicValue;
        /**
         * 説明 */
        プライベート最終文字列を記述します。


    }

}

3. mysqlが正常に接続できるかどうかをテストするためのテスト接続クラスを作成します。

パッケージ com.wretchant.fredis.menu.mysql;

com.intellij.notification.NotificationType をインポートします。
com.intellij.openapi.actionSystem.AnAction をインポートします。
com.intellij.openapi.actionSystem.AnActionEvent をインポートします。
com.wretchant.fredis.support.Mysql をインポートします。
com.wretchant.fredis.util.NotifyUtils をインポートします。
org.jetbrains.annotations.NotNull をインポートします。

java.sql.ResultSet をインポートします。

/**
 * @author Tan Jian によって 2020/9/15 火曜日 10:17 に作成されました。
 * © 無断転載を禁じます。
 */
パブリッククラスMysqlConnはAnActionを拡張します{


    @オーバーライド
    パブリック void actionPerformed(@NotNull AnActionEvent イベント) {
        試す {
            ResultSet es = Mysql.JDBCUtil.es("ct として 1 を選択");
            es.next();
            int ct = es.getInt("ct");
            ct == 1の場合{
                NotificationUtils.notifyUser(null, "接続は正常です", NotificationType.INFORMATION);
            } それ以外 {
                NotificationUtils.notifyUser(null, "接続が異常です", NotificationType.ERROR);
            }
            Mysql.JDBCUtil.closeRs(es);
        } キャッチ (例外 e1) {
            e1.printStackTrace();
            NotificationUtils.notifyUser(null, "接続が異常です", NotificationType.ERROR);
        }
    }
} 

上記は、IDEA が MySQL データベースに接続してクエリ操作を実行する完全なコードの詳細です。IDEA が MySQL に接続してクエリ操作を実行する詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Intellij IDEA を使用して Java ソースコードを表示するためのヒント
  • IntelliJ IDEA ブックマークの使用に関するヒント
  • IDEA で Maven を使用してプロジェクトを作成する際の一般的なエラーと使用上のヒントの詳細な説明 (推奨)
  • IntelliJ IDEA プラグイン EasyCode のインストール方法と使用上のヒント
  • IntellJ IDEA アーティファクトの使用に関するヒント (概要)
  • Intellij Ideaを使用してリモートサーバーに接続し、リモートアップロードとデプロイメント機能を実現します。
  • IDEA グラフィカル インターフェースを使用して Phoenix に素早く接続する方法
  • IDEAのエディタ左側の機能アイコンICONの操作方法(操作手順)
  • コード効率を向上させるために、これらのIDEA使用のヒントを強くお勧めします

<<:  JavaScriptの詳細な分析と方向の変更方法

>>:  アクティビティページでの CSS3 アニメーション効果の適用

推薦する

Windows で MySQL データベースを別のディスクに移動する

序文今日、MySQL をインストールしたところ、データベース ストレージがデフォルトで C ドライブ...

Docker プライベートリポジトリの管理とローカルリポジトリ内のイメージの削除

1: Dockerプライベートウェアハウスのインストール1. イメージリポジトリからイメージをダウン...

Vue3.0 における Ref と Reactive の違いの詳細な分析

目次参照と反応参照反応的RefとReactiveの違いshallowRef と shallowRea...

MySQL8 ベースの docker-compose デプロイメント プロジェクトの実装

1. まず、次のパスに従って対応するフォルダを作成します。 ローカルのdockerでmysqlを実行...

クラウドサーバーパゴダパネルの詳細なインストール手順

目次0x01. パゴダパネルをインストールする0x02. サーバーポートを開く0x03. ブラウザを...

JavaScript の条件付きアクセス属性と矢印関数の紹介

目次1. 条件付きアクセス属性2. アロー関数の紹介1. 条件付きアクセス属性?. は ES2020...

Reactは二次的連鎖効果(階段効果)を実現する

この記事では、二次リンク効果を実現するためのReactの具体的なコードを参考までに共有します。具体的...

Vue 親コンポーネントが子コンポーネント関数の実装を呼び出す

Vue親コンポーネントは子コンポーネントの関数を呼び出す親コンポーネントはイベントを通じて子コンポー...

MySQL 5.7を完全にアンインストールするための詳細な手順

この記事は主に、MySQLを再インストールする際のクリーンでないアンインストールのさまざまな問題をま...

dockerを使用してTomcatをデプロイし、Skywalkingに接続する

目次1. 概要2. dockerを使用してTomcatをデプロイし、Skywalkingに接続する要...

MySQL の分離レベル、ロック、MVCC の紹介

この記事の目的は、これらの概念とその機能の関係を明らかにすることです。 Mysql がトランザクショ...

MySQLクラスタのDockerデプロイメントの実装

シングルノードデータベースの欠点大規模なインターネットプログラムはユーザーベースが大きいため、アーキ...

ウェブページのグリッドデザインを考える

<br />元のアドレス: http://andymao.com/andy/post/8...

Javascriptジェネレータの紹介と使用

ジェネレータとは何ですか?ジェネレーターは関数内で実行されるコードです。値を返した後、一時停止し、呼...

HTML の基礎必読 - CSS スタイルシートの包括的な理解

CSS (カスケーディング スタイル シート) は、HTML Web ページを美しくするために使用さ...