新的Java訪問mysql數(shù)據(jù)庫工具類的操作代碼
這是之前軟工課設(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ū)動(dòng),只需一次 */ 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); //對占位符進(jìn)行賦值 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中的占位符進(jìn)行賦值 setPreparedStatement(params); preparedStatement.execute(); }catch (Exception e){ System.err.println("查詢失敗!"); e.printStackTrace(); } finally { close(); } } /** * 對sql語句中的占位符進(jìn)行賦值 * @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中運(yùn)行hello world
本文的內(nèi)容非常的簡單,跟隨世界潮流,第一個(gè)Java程序輸出“Hell World!”。希望大家能夠喜歡2016-05-05郵件的組織結(jié)構(gòu)介紹 郵件實(shí)現(xiàn)詳解(三)
這篇文章主要為大家詳細(xì)介紹了郵件的組織結(jié)構(gòu),郵件內(nèi)容的基本格式和具體細(xì)節(jié),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10詳解spring boot使用@Retryable來進(jìn)行重處理
本篇文章主要介紹了詳解spring boot使用@Retryable來進(jìn)行重處理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06SpringBoot JavaMailSender發(fā)送郵件功能
這篇文章主要為大家詳細(xì)介紹了SpringBoot JavaMailSender發(fā)送郵件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04詳解在Spring中如何自動(dòng)創(chuàng)建代理
這篇文章主要介紹了詳解在Spring中如何自動(dòng)創(chuàng)建代理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07java基于線程池和反射機(jī)制實(shí)現(xiàn)定時(shí)任務(wù)完整實(shí)例
這篇文章主要介紹了java基于線程池和反射機(jī)制實(shí)現(xiàn)定時(shí)任務(wù)的方法,以完整實(shí)例形式較為詳細(xì)的分析了Java定時(shí)任務(wù)的功能原理與實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11