新的Java訪問(wèn)mysql數(shù)據(jù)庫(kù)工具類的操作代碼
這是之前軟工課設(shè)我寫的java訪問(wèn)mysql工具類,它經(jīng)過(guò)了多輪的測(cè)試,應(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 來(lái)代替Statement
* 這樣可以防止sql注入
*/
private static PreparedStatement preparedStatement = null;
private static ResultSet resultSet = null;
/**
* 連接數(shù)據(jù)庫(kù)參數(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("連接失敗,請(qǐng)檢查連接參數(shù)");
e.printStackTrace();
}
}
/**
* 獲取數(shù)據(jù)庫(kù)連接
*
* @return 返回Connection
*/
private static Connection getConnection() {
try {
connection = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
JOptionPane.showConfirmDialog(null , "獲取連接失敗,請(qǐng)檢查網(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語(yǔ)句
* @param sql sql語(yǔ)句
* @param params 占位符參數(shù)數(shù)組
* @return 返回bool值,表示是否成功
*/
public boolean execute(String sql, Object ...params){
try {
//獲取連接
connection = getConnection();
preparedStatement = connection.prepareStatement(sql);
//對(duì)占位符進(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);
//對(duì)sql中的占位符進(jìn)行賦值
setPreparedStatement(params);
preparedStatement.execute();
}catch (Exception e){
System.err.println("查詢失敗!");
e.printStackTrace();
} finally {
close();
}
}
/**
* 對(duì)sql語(yǔ)句中的占位符進(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訪問(wèn)mysql數(shù)據(jù)庫(kù)工具類的文章就介紹到這了,更多相關(guān)Java mysql數(shù)據(jù)庫(kù)工具類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何用Java結(jié)合經(jīng)緯度位置計(jì)算目標(biāo)點(diǎn)的日出日落時(shí)間詳解
這篇文章主詳細(xì)講解了如何基于目標(biāo)點(diǎn)的經(jīng)緯度計(jì)算日出日落時(shí)間,提供了在線API和Java庫(kù)兩種計(jì)算方法,并通過(guò)實(shí)際案例展示了其應(yīng)用,需要的朋友可以參考下2025-01-01
SpringBoot+Redis實(shí)現(xiàn)分布式緩存的方法步驟
在高并發(fā)的分布式的系統(tǒng)中,緩存是提升系統(tǒng)性能的重要手段,本文主要介紹了SpringBoot+Redis實(shí)現(xiàn)分布式緩存的方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
Java中controller層如何接收帶參數(shù)的查詢
本文主要介紹了Java中controller層如何接收帶參數(shù)的查詢,在控制器層接收帶參數(shù)的查詢可以通過(guò)多種方式實(shí)現(xiàn),下面就詳細(xì)的介紹一下,感興趣的可以了解一下2023-08-08
Java中避免NullPointerException的方法總結(jié)
這篇文章主要介紹了Java中避免NullPointerException的方法總結(jié)的相關(guān)資料,需要的朋友可以參考下2017-07-07
Spring?中的?Service?有多個(gè)實(shí)現(xiàn)類如何注入(多種方式)
這篇文章主要介紹了Spring?中的?Service?有多個(gè)實(shí)現(xiàn)類如何注入,本文通過(guò)多種方式結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
springboot實(shí)現(xiàn)全局異常處理及自定義異常類
這篇文章主要介紹了springboot實(shí)現(xiàn)全局異常處理及自定義異常類,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
IDEA插件開(kāi)發(fā)注冊(cè)菜單之向主菜單注冊(cè)菜單項(xiàng)目
這篇文章主要介紹了IDEA插件開(kāi)發(fā)注冊(cè)菜單之向主菜單注冊(cè)菜單項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
Java快速實(shí)現(xiàn)PDF轉(zhuǎn)圖片功能實(shí)例代碼
PDFBox是一個(gè)開(kāi)源Java類庫(kù),用于讀取和創(chuàng)建PDF文檔,它支持文本提取、表單處理、文檔加密解密、合并分割、內(nèi)容覆蓋追加、文檔打印和轉(zhuǎn)換等功能,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09
Java使用Jdbc連接Oracle執(zhí)行簡(jiǎn)單查詢操作示例
這篇文章主要介紹了Java使用Jdbc連接Oracle執(zhí)行簡(jiǎn)單查詢操作,結(jié)合實(shí)例形式詳細(xì)分析了java基于jdbc實(shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)的連接與查詢相關(guān)操作技巧,需要的朋友可以參考下2019-09-09

