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 の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
>>: アクティビティページでの CSS3 アニメーション効果の適用
この記事では主に、MySQL サービスの自動停止の解決策を紹介し、参考と学習のために共有します。一緒...
この記事では、macOSでのMySQL 8.0.16のインストールと設定のチュートリアルを参考までに...
目次MVCとMVVMの違い前述のMVCC の概要長所と短所MVVM概要MVVM 実装者 — Vue ...
今日、ふとリッチテキストエディタの制作原理を見直してみようと思いました。それで、彼は何も言わずにそれ...
概要: この記事では、Avro データをシリアル化して生成し、FlinkSQL を使用して解析する方...
CSS ウェブページレイアウトを行う場合、XHTML1.0 仕様に準拠する必要があることは誰もが知っ...
目次前の単語同期と非同期前菜プレートを追加マクロタスク マイクロタスク約束しましょうタイマーを追加す...
問題を見つける最近MySQLをMySQL 5.7にアップグレードした後、次のようなクエリでグループ化...
1. MySQLソフトウェアをインストールするMySQL 公式 Yum リポジトリ、MySQL バー...
Linux と Unix はマルチユーザー オペレーティング システムであるため、ファイルの権限と所...
最近ディープラーニングを学ぶためにUbuntu+Python 3.6バージョンを使う必要があるため、...
サーバーB(172.17.166.11)の電源がオンまたは再起動されると、サーバーA(172.17....
Mysql の追加、削除、変更、クエリステートメントのシンプルな実装追加されたレコード: テーブル名...
目次序文ミキシンMixin ノート (重複名)ローカルミックスイングローバル ミックスイン継承するミ...
今日は、ネイティブ JS で実装されたブリージング カルーセルを紹介します。効果は次のとおりです。 ...