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

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

JDBC之 自增長與事務(wù)

2019-11-14 22:11:00
字體:
供稿:網(wǎng)友
JDBC之 自增長與事務(wù)JDBC之 自增長與事務(wù)

1.自增長

有這樣一個現(xiàn)象:數(shù)據(jù)庫中有兩個表格 學生表(學生姓名,所在班級),班級表(班級號(自增長的主鍵),班級人數(shù))。

  現(xiàn)在我往班級表插入一條信息, 只提供班級人數(shù),班級號由自增長自動生成。然后我們插入一條學生信息入這個新的班,這就需要新增的班級的班級號,但是這個班級號由自增長自動生成,那么我們該如何正確把這個學生的信息插入呢?

  看下面代碼演示吧~

public class AutoIncrement {            Connection connection = null;        @Test    public void    TestAuto() throws Exception    {        //獲取連接        connection = sqlUtil.getconnection();                //準備SQL語句        String classSQL = "insert into class(ccount) values(?)";        String studentSQL = "insert into student values(?,?)";                 //獲取對象,先往CLASS表插入一條數(shù)據(jù),使用有兩個參數(shù)的方法。                //第二個參數(shù)Statement.RETURN_GENERATED_KEYS 可以獲得自增長的值        PReparedStatement preparedStatement =                 connection.prepareStatement(classSQL,Statement.RETURN_GENERATED_KEYS);                //設(shè)置參數(shù)        preparedStatement.setObject(1, 66);                //執(zhí)行        preparedStatement.executeUpdate();                //下面就來獲得這個自增長的ID值        Integer cid = null;        //使用getGeneratedKeys()獲得自增長參數(shù)的一個結(jié)果集        ResultSet res = preparedStatement.getGeneratedKeys();        //迭代得到該值,我這里只有一個自增長的參數(shù)        if(res.next())        {            cid = res.getInt(1);        }                //******得到該增長的值后,我們就 來插入員工信息********        preparedStatement=connection.prepareStatement(studentSQL);                //設(shè)置參數(shù),把獲取的自增長的值作為參數(shù)        preparedStatement.setObject(1, "張三");        preparedStatement.setObject(2, cid);                //執(zhí)行        preparedStatement.executeUpdate();                //關(guān)閉資源        sqlUtil.close(preparedStatement, connection);            }}

2.事務(wù)

  大家都知道,數(shù)據(jù)庫中常常會用到事務(wù),那么如何用java代碼來操作呢~看下面代碼和說明吧~

有一個表:bank(bname,money),用來記錄人物的姓名和金錢數(shù)

@Test    public void doCommit() throws Exception {        // 獲取連接        connection = sqlUtil.getconnection();        // Jack向Mark轉(zhuǎn)賬100元。        String sql1 = "update bank set money=money-100 where bname='Jack'";        // Mark的賬戶獲得100元        String sql2 = "update bank set money=money+100 where bname='Mark'";        // 開始事務(wù),false表示關(guān)閉自動提交,即開啟事務(wù)        // true 表示自動提交SQL        connection.setAutoCommit(false);        // Jack執(zhí)行轉(zhuǎn)賬100        PreparedStatement state = connection.prepareStatement(sql1);        state.executeUpdate();        // Mark獲得100        state = connection.prepareStatement(sql2);        state.executeUpdate();        // 提交事務(wù)        connection.commit();        // 關(guān)閉資源        sqlUtil.close(state, connection);    }

這樣就能創(chuàng)建和提交一個事務(wù)。

那么,如果在”Jack執(zhí)行轉(zhuǎn)賬100“ 這個操作執(zhí)行后,出現(xiàn)了異常,沒有執(zhí)行:sql2語句, 那兩個用戶豈不是都有損失? 這時候就體現(xiàn)出事務(wù)的重要性,事務(wù)還有一個功能:回滾

下面就故意制造一個異常,然后回滾事務(wù)吧~

public class CommitTest {    Connection connection = null;        @Test    public void doCommit()  {        // Jack執(zhí)行轉(zhuǎn)賬100        PreparedStatement state = null;        try {            // 獲取連接            connection = sqlUtil.getconnection();            // Jack向Mark轉(zhuǎn)賬100元。            String sql1 = "update bank set money=money-100 where bname='Jack'";            // Mark的賬戶獲得100元            String sql2 = "update bank set money=money+100 where bname='Mark'";            // 開始事務(wù),false表示關(guān)閉自動提交,即開啟事務(wù)            // true 表示自動提交SQL            connection.setAutoCommit(false);                        // Jack執(zhí)行轉(zhuǎn)賬100            state = connection.prepareStatement(sql1);            state.executeUpdate();                        //故意制造異常            int a = 1/0;                        // Mark獲得100            state = connection.prepareStatement(sql2);            state.executeUpdate();            // 提交事務(wù)            connection.commit();        } catch (SQLException e) {            e.printStackTrace();            try {                //遇到任何異常情況,回滾事務(wù)                connection.rollback();                            } catch (SQLException e1) {                e1.printStackTrace();                throw new RuntimeException(e);            }        }finally{            // 關(guān)閉資源            sqlUtil.close(state, connection);        }    }}

  


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 临沂市| 库尔勒市| 水城县| 张家港市| 承德县| 光山县| 翁源县| 卢龙县| 广南县| 多伦县| 平顺县| 宝山区| 安溪县| 青浦区| 大名县| 湖南省| 武功县| 莆田市| 辉南县| 南澳县| 六枝特区| 微博| 永年县| 健康| 湖北省| 庆阳市| 陇南市| 陕西省| 城口县| 贵州省| 合江县| 进贤县| 焉耆| 朔州市| 文安县| 济源市| 若尔盖县| 财经| 万荣县| 舟曲县| 舟曲县|