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

首頁 > 學院 > 開發(fā)設計 > 正文

JDBC day02

2019-11-11 07:05:19
字體:
供稿:網(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, "張無忌");		ps.setInt(2, 1000);		ResultSet rs = ps.executeQuery();		if (!rs.next()) {			throw new RuntimeException("親,你的余額不足!");		}		// 扣除張無忌的1000		sql = "UPDATE account SET balance = balance - ? WHERE name = ?";		ps = conn.prepareStatement(sql);		ps.setInt(1, 1000);		ps.setString(2, "張無忌");		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();			//取消事務的自動提交			conn.setAutoCommit(false);						ps = conn.prepareStatement(sql);			ps.setString(1, "張無忌");			ps.setInt(2, 1000);			rs = ps.executeQuery();			if (!rs.next()) {				throw new RuntimeException("親,你的余額不足!");			}			// 扣除張無忌的1000			sql = "UPDATE account SET balance = balance - ? WHERE name = ?";			ps = conn.prepareStatement(sql);			ps.setInt(1, 1000);			ps.setString(2, "張無忌");			ps.executeUpdate();			// 趙敏增加1000			sql = "UPDATE account SET balance = balance + ? WHERE name = ?";			ps = conn.prepareStatement(sql);			ps.setInt(1, 1000);			ps.setString(2, "趙敏");			ps.executeUpdate();			//提交事務			conn.commit();		} catch (Exception e) {			e.printStackTrace();						try {				//回滾事務				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í)行批量語句				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吧!

獲取自動生成的主鍵

  在注冊頁面的時候,一開始只需要賬戶和密碼,點擊注冊后會讓你更新資料,這個時候就需要獲取自動生成的主鍵了

連接池思想

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

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

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

    數(shù)據(jù)庫的連接資源并沒有得到很好的重復利用.若同時有幾百人甚至幾千人在線,頻繁的進行數(shù)據(jù)庫連接操作將占用很多的系統(tǒng)資源,嚴重的甚至會造成服務器的崩潰

dbcp連接池


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜州市| 南通市| 渝北区| 通城县| 于都县| 眉山市| 进贤县| 婺源县| 牙克石市| 尉氏县| 定结县| 延寿县| 秭归县| 七台河市| 曲麻莱县| 绥滨县| 龙江县| 华池县| 永靖县| 合阳县| 分宜县| 嘉兴市| 繁峙县| 玉屏| 自贡市| 兴宁市| 镇赉县| 石楼县| 嘉鱼县| 铁力市| 浦城县| 江永县| 浪卡子县| 青州市| 法库县| 民和| 平山县| 东源县| 浑源县| 昌吉市| 咸丰县|