新的Java訪(fǎng)問(wèn)mysql數(shù)據(jù)庫(kù)工具類(lèi)的操作代碼
這是之前軟工課設(shè)我寫(xiě)的java訪(fǎng)問(wèn)mysql工具類(lèi),它經(jīng)過(guò)了多輪的測(cè)試,應(yīng)該能夠適應(yīng)大多數(shù)的操作需求。比之前大二寫(xiě)的更魯棒,更易用。
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;
}
/**
* 查詢(xún)表
* @return 返回查詢(xún)結(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("查詢(xún)失敗!");
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("查詢(xún)失??!");
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("查詢(xún)失?。?);
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訪(fǎng)問(wèn)mysql數(shù)據(jù)庫(kù)工具類(lèi)的文章就介紹到這了,更多相關(guān)Java mysql數(shù)據(jù)庫(kù)工具類(lèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Rxjava2_Flowable_Sqlite_Android數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)實(shí)例
- 詳解JavaEE 使用 Redis 數(shù)據(jù)庫(kù)進(jìn)行內(nèi)容緩存和高訪(fǎng)問(wèn)負(fù)載
- 如何在Java程序中訪(fǎng)問(wèn)mysql數(shù)據(jù)庫(kù)中的數(shù)據(jù)并進(jìn)行簡(jiǎn)單的操作
- 封裝了一個(gè)Java數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)管理類(lèi)
- Java訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)實(shí)例詳解
相關(guān)文章
J2SE基礎(chǔ)之在Eclipse中運(yùn)行hello world
本文的內(nèi)容非常的簡(jiǎn)單,跟隨世界潮流,第一個(gè)Java程序輸出“Hell World!”。希望大家能夠喜歡2016-05-05
mybatis?plus中如何編寫(xiě)sql語(yǔ)句
這篇文章主要介紹了mybatis?plus中如何編寫(xiě)sql語(yǔ)句,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
郵件的組織結(jié)構(gòu)介紹 郵件實(shí)現(xiàn)詳解(三)
這篇文章主要為大家詳細(xì)介紹了郵件的組織結(jié)構(gòu),郵件內(nèi)容的基本格式和具體細(xì)節(jié),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
詳解spring boot使用@Retryable來(lái)進(jìn)行重處理
本篇文章主要介紹了詳解spring boot使用@Retryable來(lái)進(jìn)行重處理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
SpringBoot JavaMailSender發(fā)送郵件功能
這篇文章主要為大家詳細(xì)介紹了SpringBoot JavaMailSender發(fā)送郵件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
詳解在Spring中如何自動(dòng)創(chuàng)建代理
這篇文章主要介紹了詳解在Spring中如何自動(dòng)創(chuàng)建代理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
java基于線(xiàn)程池和反射機(jī)制實(shí)現(xiàn)定時(shí)任務(wù)完整實(shí)例
這篇文章主要介紹了java基于線(xiàn)程池和反射機(jī)制實(shí)現(xiàn)定時(shí)任務(wù)的方法,以完整實(shí)例形式較為詳細(xì)的分析了Java定時(shí)任務(wù)的功能原理與實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11

