欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

新的Java訪問mysql數(shù)據(jù)庫工具類的操作代碼

 更新時間:2021年12月10日 10:20:27   作者:popozyl  
本文通過實例代碼給大家介紹新的Java訪問mysql數(shù)據(jù)庫工具類的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧

這是之前軟工課設(shè)我寫的java訪問mysql工具類,它經(jīng)過了多輪的測試,應(yīng)該能夠適應(yīng)大多數(shù)的操作需求。比之前大二寫的更魯棒,更易用。

package util;

import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.swing.JOptionPane;

public class JdbcUtilV2 {
    /**
     * 定義需要的變量
     */
    private static Connection connection = null;
    /**
     * 在大多情況下,我們使用的是PrepardStatement 來代替Statement
     * 這樣可以防止sql注入
     */
    private static PreparedStatement preparedStatement = null;
    private static ResultSet resultSet = null;

    /**
     * 連接數(shù)據(jù)庫參數(shù)
     */
    private static String username = "";
    private static String password = "";
    private static String driver = "";
    private static String url = "";

    /**
     * 加載驅(qū)動,只需一次
     */
    public JdbcUtilV2(String dr, String ur,String user, String passwd) {
        try {
        	username = user;
        	password = passwd;
            driver = dr;
            url = ur;
            Class.forName(driver);
        } catch (Exception e) {
            System.err.println("連接失敗,請檢查連接參數(shù)");
            e.printStackTrace();
        }
    }

    /**
     * 獲取數(shù)據(jù)庫連接
     *
     * @return 返回Connection
     */
    private static Connection getConnection() {
        try {
            connection = DriverManager.getConnection(url, username, password);
        } catch (Exception e) {
        	JOptionPane.showConfirmDialog(null , "獲取連接失敗,請檢查網(wǎng)絡(luò)是否連通", "系統(tǒng)消息", JOptionPane.CLOSED_OPTION);
            e.printStackTrace();
        }
        return connection;
    }
    
    /**
     *  查詢表
     *  @return 返回查詢結(jié)果的List
     */

    public ArrayList<HashMap<String, Object>> query(String sql, Object ...params){
        try {
            connection = getConnection();
            preparedStatement = connection.prepareStatement(sql);
            setPreparedStatement(params);
            resultSet = preparedStatement.executeQuery();
            ResultSetMetaData metaData = resultSet.getMetaData(); // key name
            int columnCount = metaData.getColumnCount(); // column count
            
            ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
            while(resultSet.next()) {
            	HashMap<String, Object> rowData = new HashMap<String, Object>();
            	for(int i = 1; i <= columnCount; ++i) {
            		rowData.put(metaData.getColumnName(i), resultSet.getObject(i));
            	}
            	list.add(rowData);
            }
            return list;
        }catch (Exception e){
            System.err.println("查詢失??!");
            e.printStackTrace();
        } finally {
            close();
        }
        return null;
    }
    
    public boolean exists(String sql, Object ...params) {
        try {
            connection = getConnection();
            preparedStatement = connection.prepareStatement(sql);
            setPreparedStatement(params);
            resultSet = preparedStatement.executeQuery();
            return resultSet.next();
        }catch (Exception e){
            System.err.println("查詢失敗!");
            e.printStackTrace();
        } finally {
            close();
        }
        return false;
    }
    /**
     * 可處理insert/delete/update語句
     * @param sql sql語句
     * @param params 占位符參數(shù)數(shù)組
     * @return 返回bool值,表示是否成功
     */
    public boolean execute(String sql, Object ...params){
        try {
            //獲取連接
            connection = getConnection();
            preparedStatement = connection.prepareStatement(sql);
            //對占位符進行賦值
            setPreparedStatement(params);
            //提交sql
            preparedStatement.executeUpdate();
            return true;
        } catch (Exception e){
            System.err.println("表更新失敗!");
            e.printStackTrace();
        } finally {
            close();
        }
        return false;
    }
    
    public void executeVoidProc(String sql, Object ...params){
        try {
            //獲取連接
            connection = getConnection();
            preparedStatement = connection.prepareStatement(sql);
            //對sql中的占位符進行賦值
            setPreparedStatement(params);
            
            preparedStatement.execute();
        }catch (Exception e){
            System.err.println("查詢失敗!");
            e.printStackTrace();
        } finally {
            close();
        }
    }
    /**
     * 對sql語句中的占位符進行賦值
     * @param params 參數(shù)值
     * @throws SQLException sql異常
     */
    private void setPreparedStatement(Object ... params) throws SQLException {
        if(params != null && params.length > 0){
            for(int i = 0; i < params.length; i++){
                if("null".equals(params[i])){
                    preparedStatement.setNull(i + 1, Types.NULL);
                }else{
                    preparedStatement.setObject(i + 1, params[i]);
                }
            }
        }
    }
    
 

    /**
     * 關(guān)閉資源的函數(shù)
     */
    private void close() {
        if(resultSet != null) {
            try {
                resultSet.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            resultSet = null;
        }
        if(preparedStatement != null) {
            try {
                preparedStatement.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            preparedStatement = null;
        }
        if(connection != null) {
            try {
                connection.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            connection = null;
        }
    }

}

到此這篇關(guān)于新的Java訪問mysql數(shù)據(jù)庫工具類的文章就介紹到這了,更多相關(guān)Java mysql數(shù)據(jù)庫工具類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • J2SE基礎(chǔ)之在Eclipse中運行hello world

    J2SE基礎(chǔ)之在Eclipse中運行hello world

    本文的內(nèi)容非常的簡單,跟隨世界潮流,第一個Java程序輸出“Hell World!”。希望大家能夠喜歡
    2016-05-05
  • Java中notify是順序喚醒還是隨機喚醒的

    Java中notify是順序喚醒還是隨機喚醒的

    這篇文章主要介紹了Java中notify是順序喚醒還是隨機喚醒的,有很多人會認(rèn)為?notify?是隨機喚醒的,但它真的是隨機喚醒的嗎?帶著疑問一起進入文章了解具體的內(nèi)容吧
    2022-05-05
  • java輸入字符串并將每個字符輸出的方法

    java輸入字符串并將每個字符輸出的方法

    今天小編就為大家分享一篇java輸入字符串并將每個字符輸出的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • mybatis?plus中如何編寫sql語句

    mybatis?plus中如何編寫sql語句

    這篇文章主要介紹了mybatis?plus中如何編寫sql語句,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 郵件的組織結(jié)構(gòu)介紹 郵件實現(xiàn)詳解(三)

    郵件的組織結(jié)構(gòu)介紹 郵件實現(xiàn)詳解(三)

    這篇文章主要為大家詳細(xì)介紹了郵件的組織結(jié)構(gòu),郵件內(nèi)容的基本格式和具體細(xì)節(jié),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 詳解spring boot使用@Retryable來進行重處理

    詳解spring boot使用@Retryable來進行重處理

    本篇文章主要介紹了詳解spring boot使用@Retryable來進行重處理,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • SpringBoot JavaMailSender發(fā)送郵件功能

    SpringBoot JavaMailSender發(fā)送郵件功能

    這篇文章主要為大家詳細(xì)介紹了SpringBoot JavaMailSender發(fā)送郵件功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 詳解在Spring中如何自動創(chuàng)建代理

    詳解在Spring中如何自動創(chuàng)建代理

    這篇文章主要介紹了詳解在Spring中如何自動創(chuàng)建代理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Mybatis延遲加載原理和延遲加載配置詳解

    Mybatis延遲加載原理和延遲加載配置詳解

    這篇文章主要介紹了Mybatis延遲加載原理和延遲加載配置詳解,MyBatis中的延遲加載,也稱為懶加載,是指在進行表的關(guān)聯(lián)查詢時,按照設(shè)置延遲規(guī)則推遲對關(guān)聯(lián)對象的select查詢,需要的朋友可以參考下
    2023-10-10
  • java基于線程池和反射機制實現(xiàn)定時任務(wù)完整實例

    java基于線程池和反射機制實現(xiàn)定時任務(wù)完整實例

    這篇文章主要介紹了java基于線程池和反射機制實現(xiàn)定時任務(wù)的方法,以完整實例形式較為詳細(xì)的分析了Java定時任務(wù)的功能原理與實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11

最新評論