介紹JSP數(shù)據(jù)庫(kù)高級(jí)操作
簡(jiǎn)單介紹JSP數(shù)據(jù)庫(kù)操作的3個(gè)小技巧:數(shù)據(jù)排序,主/從表處理,事務(wù)處理。
1.數(shù)據(jù)排序
在JSP數(shù)據(jù)庫(kù)技術(shù)中,可以使用ORDER子句對(duì)查詢結(jié)果進(jìn)行排序[ ORDER BY { order_by_exdivssion[ ASC | DESC]} [ ¸…n ] ],其中,order_by_exdivssion用來(lái)指定要排序的列;ASC指定按遞增順序排列;DESC指定按遞減順序排序。
- Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver"
).new Instance( );- String url="jdbc:microsoft:sqlserver://localhost:1433;
DatabaseName=pubs";- String user="dxaw";
- String password="123";
- Connection conn=DriverManager.getConnection( url, user, password );
- Statement st=conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE,
- ResultSet.CONCUR_UPDATABLE );
- String sql="select * from tbl order by id desc";
- ResultSet rs=st.executeQuery( sql );
- while( rs.next )...{
- out.println( rs.getString( "..." ) );
- }
- rs.close( );
- st.close( );
- conn.close( );
2.主/從表處理
實(shí)現(xiàn)主從表查詢主要通過(guò)IN子句和EXISTS子句為實(shí)現(xiàn)。
IN子句是通過(guò)IN(或NOT IN)連接起來(lái)的一種檢索數(shù)據(jù)的方法,其返回的結(jié)果集中可以包含零個(gè)或者多個(gè)值。
EXISTS子句是通過(guò)EXISTS(或NOT EXISTS)連接起來(lái)的一種檢索數(shù)據(jù)的方法,它的功能是判斷子查詢的結(jié)果集中是否有數(shù)據(jù)行返回,返回TRUE或FALSE,而不返回其他的實(shí)際數(shù)據(jù)。由于不需要在這種子查詢中返回具體值,這種子查詢的選擇列表經(jīng)常使用“SELECT *”格式,其外層的WHERE子句也不需要指定列名。
- select au_id, au_name form authors where au_id IN (
- select au_id form titleauthor where title_id IN (
- select title_id form titles where type="business"
- )
- )
3.事務(wù)處理
事務(wù)是JSP數(shù)據(jù)庫(kù)理論中的核心概念之一。如果一組處理步驟或者全部發(fā)生或者一步也不執(zhí)行,我們稱該組處理步驟為一個(gè)事務(wù)。當(dāng)所有的步驟像一個(gè)操作一樣被完整地執(zhí)行,我們稱該事務(wù)被提交。由于其中的一部分或多步執(zhí)行失敗,導(dǎo)致沒(méi)有步驟被提交,則事務(wù)必須回滾(回到最初的系統(tǒng)狀態(tài))。事務(wù)必須服從ISO/IEC所制定的ACID 原則。ACID是原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持久性(durability)的縮寫。事務(wù)的原子性表示事務(wù)執(zhí)行過(guò)程中的任何失敗都將導(dǎo)致事務(wù)所做的任何修改失效。一致性表示當(dāng)事務(wù)執(zhí)行失敗時(shí),所有被該事務(wù)影響的數(shù)據(jù)都應(yīng)該恢復(fù)到事務(wù)執(zhí)行前的狀態(tài)。隔離性表示在事務(wù)執(zhí)行過(guò)程中對(duì)數(shù)據(jù)的修改,在事務(wù)提交之前對(duì)其他事務(wù)不可見(jiàn)。持久性表示已提交的數(shù)據(jù)在事務(wù)執(zhí)行失敗時(shí),數(shù)據(jù)的狀態(tài)都應(yīng)該正確。
在JDBC中怎樣將多個(gè)SQL語(yǔ)句組合成一個(gè)事務(wù)呢?在JDBC中,打開(kāi)一個(gè)連接對(duì)象Connection時(shí),缺省是auto- commit模式,每個(gè)SQL語(yǔ)句都被當(dāng)作一個(gè)事務(wù),即每次執(zhí)行一個(gè)語(yǔ)句,都會(huì)自動(dòng)的得到事務(wù)確認(rèn)。為了能將多個(gè)SQL語(yǔ)句組合成一個(gè)事務(wù),要將 auto-commit模式屏蔽掉。在auto-commit模式屏蔽掉之后,如果不調(diào)用commit()方法,SQL語(yǔ)句不會(huì)得到事務(wù)確認(rèn)。在最近一次 commit()方法調(diào)用之后的所有SQL會(huì)在方法commit()調(diào)用時(shí)得到確認(rèn)。
- public int delete(int sID) {
- dbc = new DataBaseConnection();
- Connection con = dbc.getConnection();
- try {
- con.setAutoCommit(false);// 更改JDBC事務(wù)的默認(rèn)提交方式
- dbc.executeUpdate("delete from tab1 where ID=" + sID);
- dbc.executeUpdate("delete from tab2 where ID=" + sID);
- dbc.executeUpdate("delete from tab3 where bylawid=" + sID);
- con.commit();//提交JDBC事務(wù)
- con.setAutoCommit(true);// 恢復(fù)JDBC事務(wù)的默認(rèn)提交方式
- dbc.close();
- return 1;
- }
- catch (Exception exc) {
- con.rollBack();//回滾JDBC事務(wù)
- exc.printStackTrace();
- dbc.close();
- return -1;
- }查看本文來(lái)源
【編輯推薦】