IDEA 鏈接Mysql數(shù)據(jù)庫并執(zhí)行查詢操作的完整代碼
1、先寫個 Mysql 的鏈接設(shè)置頁面
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);} }}
2、然后簡單的寫個 JDBC 操作數(shù)據(jù)庫的支持類
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 { /** * 執(zhí)行查詢語句的返回結(jié)果 */ 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 {/** * 執(zhí)行sql 并返回 map 數(shù)據(jù) * * @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);// 基礎(chǔ)信息ResultSetMetaData metaData = resultSet.getMetaData();// 返回了多少個字段int columnCount = metaData.getColumnCount();while (resultSet.next()) { Map<String, Object> valueMap = new LinkedHashMap<>(); for (int i = 0; i < columnCount; i++) {// 這個字段是什么數(shù)據(jù)類型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, '數(shù)據(jù)庫連接成功', NotificationType.INFORMATION);} } catch (Exception e) {NotifyUtils.notifyUser(null, '數(shù)據(jù)庫連接失敗', 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;}/** * 模版內(nèi)容:默認值 */private final String defaultValue;/** * 動態(tài)內(nèi)容 */private final String dynamicValue;/** * 內(nèi)容描述 */private final String describe; }}
3、寫個測試連接的類,測試一下 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數(shù)據(jù)庫并執(zhí)行查詢操作的完整代碼的詳細內(nèi)容,更多關(guān)于IDEA 鏈接Mysql執(zhí)行查詢操作 的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. SQL server 危險存儲過程刪除與恢復(fù)2. 應(yīng)用經(jīng)驗:關(guān)于IBM DB2數(shù)據(jù)庫的注意事項3. Oracle 10g中SCN與TimeStamp的斗轉(zhuǎn)星移4. 傳 Oracle 欲 收購金蝶?5. VS自帶的SQL server修改密碼并連接使用6. 基于mybatis batch實現(xiàn)批量提交大量數(shù)據(jù)7. 數(shù)據(jù)庫Oracle9i的企業(yè)管理器簡介8. Access數(shù)據(jù)庫出現(xiàn)“無法保存;正被別的用戶鎖定”的原因9. 快速掌握重啟Oracle數(shù)據(jù)庫的操作步驟10. MySQL算術(shù)/比較/邏輯/位/運算符與正則舉例詳解
