国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

JDBC day02

2019-11-11 06:32:00
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

package day02;import java.sql.Connection;import java.sql.PReparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import org.junit.Test;import smis.unit.JdbcUnit;public class SwTest {	@Test	public void testNoSW() throws Exception {		// 查詢是否有錢		String sql = "SELECT * FROM account WHERE name = ? and balance >= ?";		Connection conn = JdbcUnit.getConn();		PreparedStatement ps = conn.prepareStatement(sql);		ps.setString(1, "張無(wú)忌");		ps.setInt(2, 1000);		ResultSet rs = ps.executeQuery();		if (!rs.next()) {			throw new RuntimeException("親,你的余額不足!");		}		// 扣除張無(wú)忌的1000		sql = "UPDATE account SET balance = balance - ? WHERE name = ?";		ps = conn.prepareStatement(sql);		ps.setInt(1, 1000);		ps.setString(2, "張無(wú)忌");		ps.executeUpdate();		// 趙敏增加1000		sql = "UPDATE account SET balance = balance + ? WHERE name = ?";		ps = conn.prepareStatement(sql);		ps.setInt(1, 1000);		ps.setString(2, "趙敏");		ps.executeUpdate();		JdbcUnit.close(conn, ps, rs);	}	@Test	public void testSW() {		Connection conn = null;		PreparedStatement ps = null;		ResultSet rs = null;		try {			// 查詢是否有錢			String sql = "SELECT * FROM account WHERE name = ? and balance >= ?";			conn = JdbcUnit.getConn();			//取消事務(wù)的自動(dòng)提交			conn.setAutoCommit(false);						ps = conn.prepareStatement(sql);			ps.setString(1, "張無(wú)忌");			ps.setInt(2, 1000);			rs = ps.executeQuery();			if (!rs.next()) {				throw new RuntimeException("親,你的余額不足!");			}			// 扣除張無(wú)忌的1000			sql = "UPDATE account SET balance = balance - ? WHERE name = ?";			ps = conn.prepareStatement(sql);			ps.setInt(1, 1000);			ps.setString(2, "張無(wú)忌");			ps.executeUpdate();			// 趙敏增加1000			sql = "UPDATE account SET balance = balance + ? WHERE name = ?";			ps = conn.prepareStatement(sql);			ps.setInt(1, 1000);			ps.setString(2, "趙敏");			ps.executeUpdate();			//提交事務(wù)			conn.commit();		} catch (Exception e) {			e.printStackTrace();						try {				//回滾事務(wù)				conn.rollback();			} catch (SQLException e1) {				// TODO Auto-generated catch block				e1.printStackTrace();			}		} finally {			JdbcUnit.close(conn, ps, rs);		}	}}

批處理操作

package day02._02_batch;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.Statement;import org.junit.Test;import smis.unit.JdbcUnit;public class BatchTest {	/**	 * @param args	 */	@Test	//InnoDB 4443	//MyISAM 1220	public void testInsertByStatementBatch() throws Exception{		Connection conn = JdbcUnit.getConn();		Statement st = conn.createStatement();		long begin = System.currentTimeMillis();		for(int i=1;i<=1000;i++){			String sql = "INSERT INTO t_student (age) VALUES ("+i+")";			st.addBatch(sql);			if(i%200==0){				st.executeBatch();//執(zhí)行批量語(yǔ)句				st.clearBatch();//清理批處理中的緩存			}		}		System.out.println(System.currentTimeMillis() - begin);		JdbcUnit.close(conn, st, null);	}		//InnoDB 5308	//MyISAM 2570	public static void main(String[] args) throws Exception {		String sql = "INSERT INTO t_student (age) VALUES (?)";		Connection conn = JdbcUnit.getConn();		PreparedStatement ps = conn.prepareStatement(sql);		long begin = System.currentTimeMillis();		for(int i =0;i<=1000;i++){			ps.setInt(1, i);			ps.addBatch();			if(i%200 == 0){				ps.executeBatch();				ps.clearBatch();				ps.clearParameters(); // 這里和上面的Statement不一樣,需要清理參數(shù)			}		}				System.out.println(System.currentTimeMillis() - begin);		JdbcUnit.close(conn, ps, null);	}	}不知道為什么使用PreparedStatement Junit不行,于是乎直接main吧!

獲取自動(dòng)生成的主鍵

  在注冊(cè)頁(yè)面的時(shí)候,一開始只需要賬戶和密碼,點(diǎn)擊注冊(cè)后會(huì)讓你更新資料,這個(gè)時(shí)候就需要獲取自動(dòng)生成的主鍵了

連接池思想

為什么必須使用數(shù)據(jù)庫(kù)連接池:

    普通的JDBC數(shù)據(jù)庫(kù)連接(Connectiond對(duì)象)使用 DriverManager來(lái)獲取,每次向數(shù)據(jù)庫(kù)建立連接的時(shí)候都要將 Connection 加載到內(nèi)存中,再驗(yàn)證用戶名和密碼(得花費(fèi)0.05s~1s的時(shí)間),數(shù)據(jù)庫(kù)的連接是比較昂貴的(創(chuàng)建的成本比較大)。

   需要數(shù)據(jù)庫(kù)連接的時(shí)候,就向數(shù)據(jù)庫(kù)要求一個(gè),執(zhí)行完成后再斷開連接。這樣的方式將會(huì)消耗大量的資源和時(shí)間。

    數(shù)據(jù)庫(kù)的連接資源并沒有得到很好的重復(fù)利用.若同時(shí)有幾百人甚至幾千人在線,頻繁的進(jìn)行數(shù)據(jù)庫(kù)連接操作將占用很多的系統(tǒng)資源,嚴(yán)重的甚至?xí)斐煞?wù)器的崩潰

dbcp連接池


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 汾西县| 阜南县| 昌宁县| 新竹县| 柳河县| 阿拉尔市| 海晏县| 开平市| 于田县| 饶平县| 通辽市| 平潭县| 漳平市| 诸暨市| 鄂伦春自治旗| 西藏| 阿坝县| 东海县| 金平| 阳泉市| 双柏县| 阿克| 新乐市| 上杭县| 凤阳县| 克东县| 三门峡市| 延安市| 叶城县| 津南区| 金昌市| 商城县| 东源县| 黎城县| 年辖:市辖区| 奉新县| 永登县| 龙里县| 廊坊市| 东阳市| 鄂尔多斯市|