1. 程式人生 > >JDBC工具類(JDBC工具類,封裝方法(公共的、靜態的)進行與資料庫的連線及執行sql命令,在需要使用的類中直接呼叫。)

JDBC工具類(JDBC工具類,封裝方法(公共的、靜態的)進行與資料庫的連線及執行sql命令,在需要使用的類中直接呼叫。)

JDBC工具類,封裝方法(公共的、靜態的)進行與資料庫的連線及執行sql命令,在需要使用的類中直接呼叫。

package com.offcn.util;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class JDBCUtils {
	//定義四個與資料庫連線的引數,引數配置在src目錄下的jdbc.properties屬性檔案中
	private static String driver = "";
	private static String url = "";
	private static String user = "";
	private static String password = "";
	//將獲取資料庫引數的程式碼放在靜態程式碼塊中,類載入的時候就得到了引數。
	static{
		try {
			//獲得屬性檔案物件
			Properties pro = new Properties();
			//類載入器的getResourceAsStream()方法,得到InputStream
			InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
			//載入
			pro.load(is);
			//根據屬性檔案的名稱獲得值
			driver = pro.getProperty("driver");
			url = pro.getProperty("url");
			user = pro.getProperty("user");
			password = pro.getProperty("password");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//載入驅動獲取連線
	public static Connection getConnection() throws ClassNotFoundException, SQLException{
		Class.forName(driver);
		return DriverManager.getConnection(url, user, password);
	}
	
	//建立執行sql命令的語句物件
	public static Statement creatStatement(Connection con) throws SQLException{
		return con.createStatement();
	}
	
	//建立執行insert、update、delete的方法(只執行一條sql靜態命令),返回受影響的行的個數。
	public static int execUpdate(String sql) throws ClassNotFoundException, SQLException{
		Connection con = null;
		Statement st = null;
		
		con = getConnection();
		st = creatStatement(con);
		
		int iCount = st.executeUpdate(sql);
		closeConnection(con, st, null);
		return iCount;
	}
	
	//執行select命令的方法
	public static <T> List<T> ececQuery(String sql,Class clazz) throws ClassNotFoundException, SQLException{
		ResultSet rs = null;
		Connection con = null;
		Statement st = null;
		List<T> list = new ArrayList();
		
		try {
			con = getConnection();
			st = creatStatement(con);
			rs = st.executeQuery(sql);
			//得到結果集的資料表的欄位
			ResultSetMetaData rsmd = rs.getMetaData();
			
			//
			if(rs != null){
				//獲取物件的屬性為一個數組
				Field[] fields = clazz.getDeclaredFields();
				//rs.next()表示結果集的下一行,從表頭開始。
				while(rs.next()){
					//獲取泛型的例項
					T t = (T) clazz.newInstance();
					//結果集資料表的列號是從1開始
					for(int i =1 ;i<rsmd.getColumnCount();i++){
						for(int j = 0;j<fields.length;j++){
						//分別得到例項的屬性和結果集的欄位
							String fieldName = fields[j].getName();
							String colName = rsmd.getColumnName(i);
							//如果兩者相等,就將例項的屬性的私有屬性設定為公開,將從結果集得到的資料賦值給例項的屬性,然後將屬性的私有屬性恢復。
							if(fieldName.equals(colName)){
								boolean iRet = fields[j].isAccessible();
								fields[j].setAccessible(true);
								fields[j].set(t, rs.getObject(i));
								fields[j].setAccessible(iRet);
							}else{
								continue;
							}
						}
					}
					list.add(t);
				}
			}
			//呼叫方法,關閉連線釋放資源。
			closeConnection(con, st, rs);
		} catch (InstantiationException | IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			return list;
		}
	}
	
	//關閉連線釋放資源
	public static void closeConnection(Connection con ,Statement st ,ResultSet rs) throws SQLException{
	//關閉連線前,先判斷是否為空
		if(rs!=null){
			rs.close();
		}
		if(st!=null){
			st.close();
		}
		if(con!=null){
			con.close();
		}
	}
}

相關推薦

JDBC工具JDBC工具封裝方法公共靜態進行資料庫連線執行sql命令需要使用的直接呼叫

JDBC工具類,封裝方法(公共的、靜態的)進行與資料庫的連線及執行sql命令,在需要使用的類中直接呼叫。 package com.offcn.util; import java.io.IOException; import java.io.InputStrea

事務資料庫連線池DBCP和C3P0工具DBUtils

文章目錄 事務 使用命令列方式演示事務。 使用程式碼方式演示事務 事務的特性 事務的安全隱患 讀未提交 演示 讀已提交演示 可序列化

封裝一個數據庫連線工具(connectionthreadlocal資料庫連線池和事務)

package com.itheima.utils; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.St

winform執行cmd命令幫助提取有效輸出資料錯誤返回資料實時顯示命令輸出可傳參

寫的東西用到了執行cmd命令,於是自己擴充寫了個幫助類,實時顯示命令輸出可能對大家最為有用,此方法與網上流傳的不同點在於可以在命令輸出完成後回撥,可傳入一個object型別的引數。 程式碼: using System; using System.Collections.G

js數組轉數組的方法ArrayLike

個數 for alt 內部 argument rip 調用 轉換成 代碼 1. 什麽是類數組ArrayLike 擁有length屬性,其它屬性(索引)為非負整數(對象中的索引會被當做字符串來處理,這裏你可以當做是個非負整數串來理解) 不具有數組所具有的方法 //類

初始化和反初始化方法initdeinit

//: Playground - noun: a place where people can play // 1. init() 類的初始化(構造方法) // 使用預設的建構函式 class Student { // 類屬性 var n

Java虛擬機器學習8:檢視JVM引數值的命令工具

檢視JVM各個引數值方式 1. HotSpot vm中的各個globals.hpp檔案  檢視jvm初始的預設值及引數 2.-XX:+PrintFlagsInitial引數 顯示所有可設定引數及預設值,可結

java jdbc深入理解connectionthreadlocal資料庫連線池和事務實

1.jdbc連線資料庫,就這樣子Class.forName("com.mysql.jdbc.Driver"); java.sql.Connection conn = DriverManager.getConnection(jdbcUrl);2.通過傳入jdbc url用Drivermanager.getC

ElasticSearch最佳入門實踐四十八_filterquery深入對比解密:相關度效能

1、filter 與 query 示例 先構建兩條資料 搜尋請求:年齡必須大於等於30,同時join_date必須是2018-01-01 2、filter與query對比大解密 filter,僅僅只是按照搜尋條件過濾出需要的資料而已

設計模式2——建立型——工廠相關:簡單工廠Simple factory工廠方法Factory method抽象工廠Abstract factory

概要 這裡試圖描述23個設計模式中的兩個工廠(Factory)相關的設計模式:工廠方法(Factorymethod),抽象工廠(Abstract factory)。 注意點: 這兩個都屬於建立型設計模式。 由於這兩個設計模式都

JDBC配置問題資料庫連線測試

jdbc下載地址 jdbc下載: 開啟網址後拉到下面,可以看到下圖所示 然後選中紅色方框中的檔案下載 下載完後解壓,然後進入到該目錄 把這個檔案 “mysql-connector-java-8.0.12.jar” 複製到java的安裝目錄下的/jre/lib/ext 如下圖: 這是我

資料庫連線操作

using System.Configuration;//需要在“引用”中也新增 using System.Data.SqlClient;//SQL資料 using System.Data; using System; using System.Windows.Forms; namesp

java直接呼叫groovy的.

how  directly  call groovy class in java 如何在java中呼叫groovy的類. java和groovy如何互動,傳送資料. 類似: java 呼叫 python http://www.cnblogs.com/lmyhao/p/336

關於idea SpringBoot專案出現資料庫連線載入不到驅動異常

解決問題的關鍵看pom.xml是否配置,還有就是版本號要寫上,有些Mysql預設版本不被支援,我的Mysql就出現這個情況,配上version版本就好了看了半天部落格,不知道哪錯了,軟體解除安裝了又裝還是不行,結果一個Bug出現在沒配置版本號上,以後引以為戒!<depe

java執行Linux命令支援萬用字元*

java執行linux或者windows命令,這個需求比較常見。 但是若使用  Runtime.getRuntime().exec(cmd); 會發現,若cmd中含有萬用字元,則無法執行,如cp  /dira/*.txt /dirb 可用如下方式執行: String[]

基於C++11併發庫的執行緒池訊息佇列多執行緒框架——std::thread

1 前言  C++11標準在標準庫中為多執行緒提供了元件,這意味著使用C++編寫與平臺無關的多執行緒程式成為可能,而C++程式的可移植性也得到了有力的保證。    在之前我們主要使用的多執行緒庫要麼是屬於某個單獨平臺的,例如:POSIX執行緒庫(Linux),Windows

tcp 讀取plc下位機的簡單連線讀取修改方法 ASCII 碼方式

 //建立接收資訊的陣列和客戶端例項         private static byte[] result = new byte[1024];         IPAddress ip = IPAddress.Parse("192.168.1.11");        

FireBird資料庫和管理工具IBExpert執行sql語句

第一次接觸FireBird資料庫,今天下午測試連線了一下午都沒有連線上,每次用IBExpert登記一個數據庫的時候都沒登記上,提示firebird.msg沒有找到和Your user name and password are not defined. Ask your

Java學習篇之--用純Java的JDBC驅動程式實現資料庫連線

用純Java的JDBC驅動程式實現與資料庫連線         最近在研究JAVA中資料庫的連線,將知識整理一下分享給大家:         Java程式可以用純Java的JDBC驅動程式實現與資料庫連線。這種方法應用較廣泛,但是需要下載相應的驅動程式包,因為不同的資

老男孩教育每日一題-2017年5月7日-加餐-linux下面如何實現執行rm命令就顯示do not use rm command

linux別名 每日一題 1.題目-老男孩教育每日一題-2017年5月7日-加餐-linux下面如何實現,執行rm命令,就顯示do not use rm command2.要求結果[[email protected]/* */ ~]# rm do not use rm command3.答