當(dāng)前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀]工具類BaseDao.javapackage?com.accp.jdbc; import?java.sql.Connection; import?java.sql.DriverManager; im

工具類BaseDao.java


package?com.accp.jdbc;

import?java.sql.Connection;
import?java.sql.DriverManager;
import?java.sql.PreparedStatement;
import?java.sql.ResultSet;
import?java.sql.ResultSetMetaData;
import?java.sql.SQLException;
import?java.util.ArrayList;
import?java.util.HashMap;
import?java.util.List;
import?java.util.Map;

import?org.apache.log4j.Logger;

public?class?BaseDao?{
	//?使用log4j記錄日志
	private?static?Logger?logger?=?Logger.getLogger(BaseDao.class);
	//?連接驅(qū)動
	private?static?final?String?DRIVER?=?"com.microsoft.sqlserver.jdbc.SQLServerDriver";
	//?連接路徑
	private?static?final?String?URL?=?"jdbc:sqlserver://localhost:1433;databaseName=test";
	//?用戶名
	private?static?final?String?USERNAME?=?"sa";
	//?密碼
	private?static?final?String?PASSWORD?=?"sa";
	
	//靜態(tài)代碼塊
	static?{
		try?{
			//?加載驅(qū)動
			Class.forName(DRIVER);
		}?catch?(ClassNotFoundException?e)?{
			e.printStackTrace();
			logger.error("加載驅(qū)動失敗",?e);
		}
	}

	/*
	?*?獲取數(shù)據(jù)庫連接
	?*/
	public?Connection?getConnection()?{
		Connection?conn?=?null;
		logger.debug("開始連接數(shù)據(jù)庫");
		try{
			//與數(shù)據(jù)庫建立連接
			conn=DriverManager.getConnection(URL,?USERNAME,?PASSWORD);
		}catch(SQLException?e){
			e.printStackTrace();
			logger.error("數(shù)據(jù)庫連接失??!",e);
		}
		logger.debug("數(shù)據(jù)庫連接成功");
		return?conn;
	}

	/*
	?*?關(guān)閉數(shù)據(jù)庫連接,注意關(guān)閉的順序
	?*/
	public?void?close(ResultSet?rs,?PreparedStatement?ps,?Connection?conn)?{
		//注意:最后打開的最先關(guān)閉
		if(rs!=null){
			try{
				rs.close();
				rs=null;
			}catch(SQLException?e){
				e.printStackTrace();
				logger.error("關(guān)閉ResultSet失敗",e);
			}
		}
		if(ps!=null){
			try{
				ps.close();
				ps=null;
			}catch(SQLException?e){
				e.printStackTrace();
				logger.error("關(guān)閉PreparedStatement失敗",e);
			}
		}
		if(conn!=null){
			try{
				conn.close();
				conn=null;
			}catch(SQLException?e){
				e.printStackTrace();
				logger.error("關(guān)閉Connection失敗",e);
			}
		}
	}
	
	/*
	?*?查詢多個對象的方法
	?*?
	?*?sql:?要執(zhí)行的sql語句
	?*?obj:可變參數(shù)列表
	?*/
	public?List<Map>?queryList(String?sql,Object...?obj){
		List<Map>?data=new?ArrayList<Map>();
		Connection?conn=getConnection();?//獲得連接
		PreparedStatement?ps=null;
		ResultSet?rs=null;
		try{
			//創(chuàng)建PreparedStatement對象
			ps=conn.prepareStatement(sql);
			//為查詢語句設(shè)置參數(shù)
			setParameter(ps,?obj);
			//獲得ResultSet結(jié)果集
			rs=ps.executeQuery();
			//獲得結(jié)果集信息
			ResultSetMetaData?rsmd=rs.getMetaData();
			//?獲得列的總數(shù)
			int?columnCount=rsmd.getColumnCount();
			Maprow=null;
			//?遍歷結(jié)果集,根據(jù)信息封裝成Map
			while(rs.next()){
				row=new?HashMap();
				for(int?i=0;i<columnCount;i++){
					String?columnLabel=rsmd.getColumnLabel(i+1);
					row.put(columnLabel,?rs.getObject(columnLabel));
				}
				data.add(row);
			}
		}catch(SQLException?e){
			e.printStackTrace();
			logger.error("數(shù)據(jù)庫操作異常",e);
		}finally{
			//關(guān)閉連接
			close(rs,ps,conn);
			logger.debug("釋放資源成功");
		}
		return?data;
	}
	
	/*
	?*?查詢一個對象的方法
	?*?
	?*?sql:?要執(zhí)行的sql語句
	?*?obj:可變參數(shù)列表
	?*/
	public?Mapquery(String?sql,Object...?obj){
		Mapdata=null;
		Connection?conn=getConnection();?//獲得連接
		PreparedStatement?ps=null;
		ResultSet?rs=null;
		try{
			//創(chuàng)建PreparedStatement對象
			ps=conn.prepareStatement(sql);
			//為查詢語句設(shè)置參數(shù)
			setParameter(ps,?obj);
			//獲得ResultSet結(jié)果集
			rs=ps.executeQuery();
			//獲得結(jié)果集信息
			ResultSetMetaData?rsmd=rs.getMetaData();
			//?獲得列的總數(shù)
			int?columnCount=rsmd.getColumnCount();
			//?遍歷結(jié)果集,根據(jù)信息封裝成Map
			while(rs.next()){
				data=new?HashMap();
				for(int?i=0;i0){
			//循環(huán)設(shè)置參數(shù)
			for?(int?i?=?0;?i?<?obj.length;?i++)?{
				ps.setObject(i+1,?obj[i]);
			}
		}
	}
}


操作類,進行增刪改查 UserDao.java



package?com.accp.jdbc;

import?java.sql.Connection;
import?java.sql.PreparedStatement;
import?java.sql.ResultSet;
import?java.sql.ResultSetMetaData;
import?java.sql.SQLException;
import?java.sql.Statement;
import?java.util.List;
import?java.util.Map;

import?com.accp.entity.User;

public?class?UserDao?extends?BaseDao?{
	public?static?void?main(String[]?args)?{
		UserDao?user=new?UserDao();
	/*??????//查詢id<20的數(shù)據(jù)
		user.queryUser();
		
		//查詢單條數(shù)據(jù)
		user.queryUserById(10);
		
		//更新數(shù)據(jù)
		User?u=new?User();
		u.setId(2);
		u.setName("張龍");
		u.setAge(22);
		System.out.println("更新"+user.updateUser(u)+"條數(shù)據(jù)");
		
		//刪除數(shù)據(jù)
		System.out.println("刪除"+user.deleteUser(15)+"條數(shù)據(jù)");
		
		//插入數(shù)據(jù)
		User?u1=new?User();
		u1.setName("張三");
		u1.setAge(18);
		user.insertUser(u1);??*/
	}
	
	//查詢多條信息
	public?void?queryUser(){
		List<Map>?dataUser=queryList("select?*?from?users?where?id<20");
		//遍歷結(jié)果集
		for(Mapu:dataUser){
			System.out.println(u);
		}
	}

	//查詢單條數(shù)據(jù)
	public?void?queryUserById(int?id){
		System.out.println(query("select?*?from?users?where?id=?",id));
	}
	
	//更新數(shù)據(jù)
	public?int?updateUser(User?user){
		String?sql="update?users?set?name=?,age=??where?id=?";
		return?update(sql,?user.getName(),user.getAge(),user.getId());
	}
	
	//刪除數(shù)據(jù)
	public?int?deleteUser(int?id){
		String?sql="delete?from?users?where?id=?";
		return?update(sql,id);
	}
	
	//插入數(shù)據(jù),并返回自動增長的的主鍵值
	public?void?insertUser(User?user){
		Connection?conn=getConnection();?//獲得連接
		PreparedStatement?ps=null;
		ResultSet?rs=null;
		String?sql="insert?into?users?values(?,?)";
		try{
			//?創(chuàng)建能返回自動生成的主鍵的值的預(yù)編譯對象
			ps=conn.prepareStatement(sql,?Statement.RETURN_GENERATED_KEYS);
			ps.setString(1,user.getName());
			ps.setInt(2,?user.getAge());
			int?rows=ps.executeUpdate();
			//?獲得自動增長的的主鍵值
			rs=ps.getGeneratedKeys();
			rs.next();
			//獲得id
			int?id=rs.getInt(1);
			System.out.println("成功添加:"+rows+"條數(shù)據(jù),id是:"+id);
		}catch(SQLException?e){
			e.printStackTrace();
		}finally{
			close(rs,ps,conn);
		}
	}
}


插入測試數(shù)據(jù) InsertTest.java



package?com.accp.jdbc;

import?java.sql.Connection;
import?java.sql.PreparedStatement;
import?java.sql.SQLException;

public?class?InsertTest?extends?BaseDao??{
	public?static?void?main(String[]?args)?{
		InsertTest?user=new?InsertTest();
		user.insertUser();
	}

	public?void?insertUser()?{
		String?sql?=?"insert?into?users?values(?,?)";
		Connection?conn?=?getConnection();
		PreparedStatement?ps?=?null;
		try?{
			//?禁止自動提交事務(wù)
			conn.setAutoCommit(false);
			//?創(chuàng)建能返回自動生成的主鍵的值的預(yù)編譯對象
			ps?=?conn.prepareStatement(sql);
			//開始時間的毫秒數(shù)
			Long?start=System.currentTimeMillis();
			for?(int?i?=?0;?i?<?10000;?i++)?{
				ps.setString(1,?i+"");
				ps.setInt(2,?22);
				ps.addBatch();//?添加到批處理命令中
			}
			ps.executeBatch();//?執(zhí)行批處理
			conn.commit();//?提交事務(wù)
			//結(jié)束時間的毫秒數(shù)
			Long?stop=System.currentTimeMillis();
			//得到總耗時
			Long?ms=stop-start;?
			System.out.println("插入一萬記錄耗時:"+ms+"毫秒");
		}?catch?(SQLException?e)?{
			e.printStackTrace();
			//取消事務(wù)
			try{
				conn.rollback();
			}catch(SQLException?ee){
				ee.printStackTrace();
			}
		}?finally?{
			//打開自動提交事務(wù)
			try?{
				conn.setAutoCommit(true);
			}?catch?(SQLException?e)?{
				e.printStackTrace();
			}
			close(null,?ps,?conn);
		}
	}

}





本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉