<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    servlet學習筆記之四

    ——數據庫訪問

     1JDBC-ODBC橋,其本身也是一個驅動,利用這個驅動,我們可以使用JDBC API 通過ODBC去訪問數據庫。這種橋機制實際上是把標準的JDBC 調用轉換成相應的ODBC 調用,因此這種方式訪問數據庫效率是比較低。也有些數據庫沒有提供JDBC驅動,只有ODBC 驅動,比如訪問ms access數據庫就只能利用JDBC-ODBC 橋來訪問。

    2.建立到數據庫的連接

    DriverManager類的getConection()方法建立到數據庫的連接,返回一個Connection對象。在DriverManager類中提供了3個重載的getConnection()方法。

    ²        public static Connection getConnection(String url)throws SQLException

    給方法通過給出數據庫URL建立到數據庫的連接。比如:

    Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");

    con = DriverManager.getConnection ("jdbc:odbc:test");

    ²        public static Connection getConnection(String url,String user,String psw)throws SQLException

    給方法取得數據庫連接必須給出用戶名和密碼。如:

    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();

    conn = DriverManager.getConnection(urlname,user,pw);

    ²        public static Connection getConnection(String url,Properties info)throws SQLException

    其中info 鍵值對,一般需要給出用戶名和密碼。

     

    3.訪問數據庫

    數據庫連接被用于向數據庫服務器發送命令和SQL語句,在連接建立后,需要對數據庫進行訪問,執行SQL語句。在java.sql包中給我們提供了3個接口:Statement,PreparedStatement ,CallableStatement.

    Statement

    調用Connection對象的creatStatement()方法創建一個Statement對象。Statement對象用于執行靜態的SQL語句,返回執行的結果。

    Statement接口中定義了下列方法用于執行SQL語句。

    ResultSet executeQuery(String sql ) throws SQLException

    該方法執行sql語句,返回一個ResultSet對象。ResultSet對象用于查看執行的結果。

     

    int executeUpdate(String sql )throws SQLException

    該方法執行sql指定的insertupdate或者delete語句。另外,該方法也可以用于執行SQL DDL語句,例如:create table

     

    boolean executeString sqlthrows SQLException

    感覺模糊,我覺得還是不用比較好。

     

    連接數據庫中,getInitParameter(“url”);獲取的是web.xml的信息。

    <Servlet>

    <init-param>

           <param-name>url</param-name>

           <param-value>jdbc:mysql://localhost:3306/mysql</param- value >

    </init-param>

    <init-param>

           <param-name>user</param-name>

           <param-value>javahe</param- value >

    </init-param>

    </Servlet>

     

    PreparedStatement

     

    我們在程序中傳遞的SQL語句在執行前必須被預編譯,包括語句分析、代碼優化等,然后才能被數據庫引擎執行。如果重復執行只有參數不同的SQL語句,是比較低效的。如果要用不同的參數來多次執行同一個SQL語句,可以使用PreparedStatement的對象。PreparedStatement接口從Statement接口繼承而來,它的對象表示一條預編譯過的SQL語句。我們可以通過調用Connection對象的prepareStatement()方法而得到PreparedStatement對象。PreparedStatement對象所代表的SQL語句中的參數問號來表示,第一個參數從一開始。

    eg

    String sql = "delete from " + m_objTable + " where " + m_objFldTagId + "=?";

    PreparedStatement objStatement = m_objConnection.prepareStatement (sql);

    objStatement.setInt (1, objSms.id);

    objStatement. executeUpdate ();

     

    CallableStatement

     

    CallableStatement對象用于執行sql存儲過程。CallableStatement接口從PreparedStatement接口繼承而來,我們可以通過調用Connection對象的prepareCall()方法來得到CallableStatement對象。在執行存儲過程之前,凡是存儲過程中類型為OUT的參數必須被注冊,這可以通過CallableStatement對象的registerOutParameter()方法來完成。對于類型為IN類型的參數,可以利用setXXX()方法來設置參數的值。

    eg

    ……

    CallableStatement cstmt = conn.prepareCall(“call p_changesal(?,?)”);

    cstmt.registerOutParameter(2,java.sql.Types.INTEGER);

    cstmt.setInt(1,212212);

    cstmt.execute();

    int sal = cstmt.getInt(2);

                       

    元數據

     

    sql中,用于描述數據庫或者它的各個組成部分之一的數據稱為 元數據。

    可以調用ResultSet 對象的getMetaData()方法來得到ResultSetMetaDate對象,該對象有獲取元數據的方法(詳細方法請查api)。

     

    事務處理

     

    事務處理保證所有的事務都作為一個工作單元來執行,即使出現了硬件或者系統失靈,都不能改變這種執行方式。當在一個事務中執行多個操作時,要么所有的操作都被提交,要么整個事務回滾到最初的狀態。

     

    當一個連接建立時,默認情況下是設置為自動提交事務,這意味著每次執行一個sql語句時,如果執行成功,就會向數據庫自動提交,也就不能回滾了。為了將多個sql語句作為一個事務執行,可以調用Connection對象的setAutoCommit()方法,傳入false來取消自動提交事務,然后在所有的sql語句完成后,調用Connection對象的commit()方法來提交事務,或者在執行出錯時候調用Connection對象的rollback()方法來回滾事務。

     

    至于可滾動和可更新的結果集。我這里不做總結。日后寫翻頁程序基本就了解了。

    至于會話跟蹤,不多說。改天練習一個購物車程序。練習一個在線人數統計(無非就是在web服務端用了靜態Hash表存儲信息,每次用戶登錄就add進去)。

     

    轉入JSP學習中。

    posted on 2007-04-04 09:21 -274°C 閱讀(689) 評論(0)  編輯  收藏 所屬分類: JSP

    常用鏈接

    留言簿(21)

    隨筆分類(265)

    隨筆檔案(242)

    相冊

    JAVA網站

    關注的Blog

    搜索

    •  

    積分與排名

    • 積分 - 914507
    • 排名 - 40

    最新評論

    主站蜘蛛池模板: 日韩在线视精品在亚洲| 天天影视色香欲综合免费| 亚洲熟妇无码一区二区三区| 亚洲日韩乱码中文无码蜜桃臀网站| 成人免费午夜在线观看| 亚洲熟妇丰满多毛XXXX| 97碰公开在线观看免费视频| 中文字幕av免费专区| 麻豆va在线精品免费播放| 亚洲中文字幕一区精品自拍| 久久精品九九亚洲精品| 亚洲日韩欧洲无码av夜夜摸| 亚洲国产a级视频| 免费爱爱的视频太爽了 | 在线不卡免费视频| 日本成年免费网站| 中文字幕天天躁日日躁狠狠躁免费| igao激情在线视频免费| 亚洲aⅴ无码专区在线观看| 亚洲丰满熟女一区二区v| 77777_亚洲午夜久久多人| 亚洲gv白嫩小受在线观看| 亚洲精品无码专区在线在线播放| 国产免费午夜a无码v视频| 免费看大美女大黄大色| 大学生a级毛片免费观看 | 在线电影你懂的亚洲| 亚洲国产天堂久久综合网站| 亚洲精品字幕在线观看| 亚洲人成无码网站| 亚洲av午夜成人片精品网站| 亚洲αv久久久噜噜噜噜噜| 亚洲国产成人精品无码区在线观看| 中文字幕精品亚洲无线码二区| 国产啪亚洲国产精品无码 | 成全视频免费观看在线看| 成人影片一区免费观看| 一级毛片免费观看不卡的| 热re99久久6国产精品免费| 91在线老王精品免费播放| 91精品免费在线观看|