介紹JSP數據庫高級操作
簡單介紹JSP數據庫操作的3個小技巧:數據排序,主/從表處理,事務處理。
1.數據排序
在JSP數據庫技術中,可以使用ORDER子句對查詢結果進行排序[ ORDER BY { order_by_exdivssion[ ASC | DESC]} [ ¸…n ] ],其中,order_by_exdivssion用來指定要排序的列;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.主/從表處理
實現主從表查詢主要通過IN子句和EXISTS子句為實現。
IN子句是通過IN(或NOT IN)連接起來的一種檢索數據的方法,其返回的結果集中可以包含零個或者多個值。
EXISTS子句是通過EXISTS(或NOT EXISTS)連接起來的一種檢索數據的方法,它的功能是判斷子查詢的結果集中是否有數據行返回,返回TRUE或FALSE,而不返回其他的實際數據。由于不需要在這種子查詢中返回具體值,這種子查詢的選擇列表經常使用“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.事務處理
事務是JSP數據庫理論中的核心概念之一。如果一組處理步驟或者全部發生或者一步也不執行,我們稱該組處理步驟為一個事務。當所有的步驟像一個操作一樣被完整地執行,我們稱該事務被提交。由于其中的一部分或多步執行失敗,導致沒有步驟被提交,則事務必須回滾(回到最初的系統狀態)。事務必須服從ISO/IEC所制定的ACID 原則。ACID是原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持久性(durability)的縮寫。事務的原子性表示事務執行過程中的任何失敗都將導致事務所做的任何修改失效。一致性表示當事務執行失敗時,所有被該事務影響的數據都應該恢復到事務執行前的狀態。隔離性表示在事務執行過程中對數據的修改,在事務提交之前對其他事務不可見。持久性表示已提交的數據在事務執行失敗時,數據的狀態都應該正確。
在JDBC中怎樣將多個SQL語句組合成一個事務呢?在JDBC中,打開一個連接對象Connection時,缺省是auto- commit模式,每個SQL語句都被當作一個事務,即每次執行一個語句,都會自動的得到事務確認。為了能將多個SQL語句組合成一個事務,要將 auto-commit模式屏蔽掉。在auto-commit模式屏蔽掉之后,如果不調用commit()方法,SQL語句不會得到事務確認。在最近一次 commit()方法調用之后的所有SQL會在方法commit()調用時得到確認。
- public int delete(int sID) {
- dbc = new DataBaseConnection();
- Connection con = dbc.getConnection();
- try {
- con.setAutoCommit(false);// 更改JDBC事務的默認提交方式
- 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事務
- con.setAutoCommit(true);// 恢復JDBC事務的默認提交方式
- dbc.close();
- return 1;
- }
- catch (Exception exc) {
- con.rollBack();//回滾JDBC事務
- exc.printStackTrace();
- dbc.close();
- return -1;
- }查看本文來源
【編輯推薦】