Java JDBC學習

來源:互聯網
上載者:User

    要串連資料庫,可以向java.sql.DriverManager要求並獲得java.sql.Connection對象,Connection是資料庫連接的具體代表對象,一個Connection對象就代表一個資料庫連接,可以使用DriverManager的getConnection方法,制定JDBC URL作為自變數並獲得Connection對象:

    String url ="jdbc:mysql://localhost:3306/demo?" +

                "user=root&password=123";

    Connection  conn = DriverManager.getConnection(url);

 

    可以將JDBC URL、使用者名稱稱與密碼等設定資訊編寫在一個屬性檔案中,由程式讀取這個屬性檔案中的資訊,如果需要變更資訊,則只需要修改屬性檔案,無需修改程式、重新編譯。在 Java SE中,屬性檔案的讀取可以交給java.util.Properties類。

 

    在資料庫應用程式中,資料庫連接的獲得是一個耗費時間與資源的操作,包括了建立 Socket connection 、交換資料(使用者密碼驗證、相關參數)、會話(Session)、日誌(Loggin)、分配進程(Process)等資源。

    如果資料庫的操作是很頻繁的動作,則要考慮到重複使用串連的需求,以節省在獲得串連時的時間與資源,通常會實現一個串連池,有需要串連時可以從池中獲得,不需要串連時就將串連放回池中,而不是直接關閉串連。

 

使用JDBC進行資料操作

    表資料操作的基本技術如下:

    1. Statement類用於執行靜態SQL語句並反悔它所產生結果的對象。一個Statement對象只能開啟一個ResultSet對象。

    2. Statement類的execute(String sql)方法執行給定的SQL語句,它的傳回值類型為boolean。標誌如果第一個結果為ResultSet對象,返回true,如果其為更新計數或不存在任何結果,返回false。

    3. Statement類的executeQuery(String sql)方法用於執行查詢SQL語句,返回查詢的結果集,一個ResultSet對象。

    4. ResultSet的next()方法的作用是將指標從當前位置向下移動一行。它的傳回值類型為boolean,表示如果新的當前行不為Null,則返回true,負責返回false,此方法通常用於while語句並作為判斷是否存在資料的依據。

    5. ResultSet的getString(String columnName)方法的作用是以字串的形式返回ResultSet對象的當前行中指定列名的值。

    6. Statement類的executeUpdate(String sql)方法用於執行更新SQL語句,包括插入、修改和刪除語句,返回一個int值,表示更新的行的計數。

    7. ResultSetMetaData介面的作用是擷取ResultSet對象中列的類型和屬性資訊。由於ResultSetMetaData是介面,所以沒有建構函式,所以不能使用new建立ResultSetMetaData對象,但是可以通過ResultSet的getMetaData()建立,如 

        String sql = "select ...";

        Statement sm = null;

        sm = con.getStatement();    

        ResultSet= sm.executeQuery(sql);

        ResultSetMetaData md = rs.getMetaData();

    8.ResultSetMetaData的getColumnName(int column)可以擷取指定列的名稱,其中column指的是列數。

    9. ResultSetMetaData的getColumnTypeName(int column)返回檢索指定列的資料庫特定的類型名稱,其中column指的是列數。

    10. ResultSetMetaData的isNullable(int column)的作用是說明指定列中的值是否可以為null,其中column指的是列數。

 

批處理:

    1. DatabaseMetaData介面是描述有關資料庫的整體綜合資訊,由於DatabaseMetaData是介面,所以沒有構造方法,故不能用new來建立DatabaseMetaData對象,但是可以通過Connection 的getMetaData()方法來建立。例如:

        DatabaseMetaData = con.getMetaData();

    2. DataBaseMetaData類的supportsBatchUpdates方法用於判斷此資料庫是否支援批次更新。其傳回值為boolean。

    3. Statement的addBatch(String sql)方法將給定的SQL命令添加至此Statement對象的當前命令列表中,此方法可多次調用。

    4. Statement的executeBatch()方法的作用是將一批命令提交給資料庫來執行,如果全部命令執行成功,則返回更新計數組成的數組。

    

        public static int[] startBatch(Connection con ,String[] sqls) throws Exception

        {

            if(sqls == null)    return null;

            Statement sm = con.createStatement();

            for(int i = 0 ; i<sqls.length; i++)

            {

                sm.addBatch(sqls[i]);

            }

            return sm.executeBatch();

        }

        函數調用結果:

        int[] results = startBatch(con,sqls);

        for(int i = 0;i<sqls.length ;i++)

        {

            if(results[i] >0 ) System.out.println("語句" + sqls[i] + "執行成功,影響了" +results[i] + "行資料");

            else if(results[i] == Statement.SUCCESS_NO_INFO) System...影響的函數未知;

            else if( results[i] == Statement.EXCUTE_FAILED)    執行失敗;

        }

 

交易處理:

    1. DatabaseMetaData的supportsTransactions()方法可以判斷資料庫是否支援事物。它的傳回值類型為boolean。

    2. 資料庫連接Connection對象預設是自動認可的。為了控制事務提交,則需在事務提交之前,調用Connection的setAutoCommit(boolean autoCommit)方法關閉資料庫連接的自動認可模式,其中參數autoCommit為true,表示啟用自動認可模式;為false,表示禁用該模式。以後只有調用Connection的commit方法,才會將所有的操作提交到資料庫。

    3. Connection的rollback方法,執行復原操作,其作用是如果一同進行操作的語句,有一條出現了錯誤,那麼其他的語句也會操作無效。使用此方法時,需要注意的是只能在setAutoCommit(false)的模式下使用。

 

     try

     {

        System.out.println("事物開始");

        con.setAutoCommit(false);

        sm = con.createStatement();

        for(int i = 0;i<sqls.length;i++)

        {

            sm.execute(sqls[i]);        //執行sql語句,但沒更新到資料庫

        }

        System.out.println("事物提交");

        con.commit();

        System.out.println("事物結束");

    }

    catch(SQLException e)

    {    

        con.rollback();        //出現異常時,進行復原操作,取消前面執行的操作。

    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.