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 アニメーション効果の適用

推薦する

MySQLサービスの自動停止の解決策

この記事では主に、MySQL サービスの自動停止の解決策を紹介し、参考と学習のために共有します。一緒...

macOS での MySQL 8.0.16 のインストールと設定のグラフィック チュートリアル

この記事では、macOSでのMySQL 8.0.16のインストールと設定のチュートリアルを参考までに...

Web インタビュー: MVC と MVVM の違いと、Vue が MVVM に完全に準拠していない理由

目次MVCとMVVMの違い前述のMVCC の概要長所と短所MVVM概要MVVM 実装者 — Vue ...

iframeノードの初期化の問題に関する議論

今日、ふとリッチテキストエディタの制作原理を見直してみようと思いました。それで、彼は何も言わずにそれ...

1 つの記事で Apache Avro データを解析する

概要: この記事では、Avro データをシリアル化して生成し、FlinkSQL を使用して解析する方...

XHTMLはHTMLのいくつかの廃止された要素を使用しなくなりました

CSS ウェブページレイアウトを行う場合、XHTML1.0 仕様に準拠する必要があることは誰もが知っ...

いくつかの面接の質問を使ってJavaScriptの実行メカニズムを調べる

目次前の単語同期と非同期前菜プレートを追加マクロタスク マイクロタスク約束しましょうタイマーを追加す...

Mysql を 5.7 にアップグレードした後のグループ クエリの問題を解決する

問題を見つける最近MySQLをMySQL 5.7にアップグレードした後、次のようなクエリでグループ化...

CentOS7.8 に mysql 8.0.20 をインストールするための詳細なチュートリアル

1. MySQLソフトウェアをインストールするMySQL 公式 Yum リポジトリ、MySQL バー...

Linux でファイルの権限 (所有権) を変更する

Linux と Unix はマルチユーザー オペレーティング システムであるため、ファイルの権限と所...

vitrualBox+ubuntu16.04 python3.6 最新チュートリアルと詳細な手順のインストール

最近ディープラーニングを学ぶためにUbuntu+Python 3.6バージョンを使う必要があるため、...

2 つの Linux サーバー間の自動ファイル同期

サーバーB(172.17.166.11)の電源がオンまたは再起動されると、サーバーA(172.17....

Mysql の追加、削除、変更、クエリステートメントのシンプルな実装

Mysql の追加、削除、変更、クエリステートメントのシンプルな実装追加されたレコード: テーブル名...

Vueのミックスインと継承について詳しく説明します

目次序文ミキシンMixin ノート (重複名)ローカルミックスイングローバル ミックスイン継承するミ...

ブリージングカルーセルを実装するネイティブJS

今日は、ネイティブ JS で実装されたブリージング カルーセルを紹介します。効果は次のとおりです。 ...