新的Java訪問mysql數(shù)據(jù)庫工具類的操作代碼
更新時間:2021年12月10日 10:20:27 作者:popozyl
本文通過實例代碼給大家介紹新的Java訪問mysql數(shù)據(jù)庫工具類的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
這是之前軟工課設我寫的java訪問mysql工具類,它經(jī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 = "";
/**
* 加載驅動,只需一次
*/
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)絡是否連通", "系統(tǒng)消息", JOptionPane.CLOSED_OPTION);
e.printStackTrace();
}
return connection;
}
/**
* 查詢表
* @return 返回查詢結果的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]);
}
}
}
}
/**
* 關閉資源的函數(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;
}
}
}
到此這篇關于新的Java訪問mysql數(shù)據(jù)庫工具類的文章就介紹到這了,更多相關Java mysql數(shù)據(jù)庫工具類內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解spring boot使用@Retryable來進行重處理
本篇文章主要介紹了詳解spring boot使用@Retryable來進行重處理,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
SpringBoot JavaMailSender發(fā)送郵件功能
這篇文章主要為大家詳細介紹了SpringBoot JavaMailSender發(fā)送郵件功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-04-04
java基于線程池和反射機制實現(xiàn)定時任務完整實例
這篇文章主要介紹了java基于線程池和反射機制實現(xiàn)定時任務的方法,以完整實例形式較為詳細的分析了Java定時任務的功能原理與實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-11-11

