最近寫程式已經很少直接用jdbc了,一直都是用hibernate來招呼,因為現在的整合框架已經很穩定了。不過對jdbc的直接使用還是不可以忽略的,jdbc3.0提供的n多的新特徵還是要熟悉了解的,以前學jdbc的時候就是上網找些demo和介紹來學,使用很單一,對jdbc3.0的好多新的特徵都忽略了,比如下面乙個例子:
statement stmt = con.createstatement();
resultset rs = stmt.executequery("select * from user where username='aa'");
stmt.executeupdate("update user set lastdatetime=now() where username='aa'");
這是乙個使用者登入時,經常用到的**,先是根據使用者名稱aa查詢該使用者的詳細資訊,然後再更新該使用者的最後登入時間(lastdatetime)。這這個裡面,我們用了兩個sql語句,這個是我一直用的方法,但是如果用jdbc2.0給我們提供的便利,我們只要寫一條sql就夠了,其他的都交給jdbc,看下面的**:
statement stmt2 = con.createstatement(resultset.type_scroll_sensitive,resultset.concur_updatable);
resultset rs2 = stmt.executequery("select * from user where username='aa'");
rs2.next();
rs2.updatedate("lastdatetime", new date(calendar.getinstance().gettimeinmillis()));
rs2.updaterow();
這裡面最主要的特徵就是resultset.type_forward_only和resultset.concur_updatable,通過初始化statement時傳不同的引數,可以對resultset進行不用的錯作限制。con.createstatement的時候,有三種可以掉用的函式:
1、createstatement();
2、createstatement(int resultsettype, int resultsetconcurrency)
3、createstatement(int resultsettype, int resultsetconcurrency, int resultsetholdability)
其中resultsettype可選值是:
1、resultset.type_forward_only 在resultset中只能先前移動游標,
2、resultset.type_scroll_insensitive 在resultset中可以隨心所欲的先前向後移動游標,
3、resultset.type_scroll_sensitive 在resultset中可以隨心所欲的先前向後移動游標,同時resultset的值有所改變的時候,他可以得到改變後的最新的值
其中resultsetconcurrency可選值是:
1、resultset.concur_read_only 在resultset中的資料記錄是唯讀的,可以修改
2、resultset.concur_updatable 在resultset中的資料記錄可以任意修改,然後更新會資料庫
其中resultsetholdability可選值是:
1、resultset.hold_cursors_over_commit 表示修改提交時,不關閉resultset的游標
2、resultset.close_cursors_at_commit 表示修改提交時,關閉resultset的游標
對於查詢操作第一種初始化方法createstatement(),相當於第二種方法的createstatement(resultset.type_forward_only, resultset.concur_read_only),第三種方法的createstatement(resultset.type_forward_only, resultset.concur_read_only, resultset.close_cursors_at_commit)
下面寫一段demo的**,我把一些特徵函式都用出來,但是只是用來查考和說明名靈活性的。
statement stmt2 = con.createstatement(resultset.type_scroll_sensitive,resultset.concur_updatable);
resultset rs2 = stmt.executequery("select * from user");
rs2.next();
rs2.updatedate("lastdatetime", new date(calendar.getinstance().gettimeinmillis()));
rs2.updaterow();
rs2.afterlast();
while(rs2.previous())
rs.beforefirst();
while(rs2.next())
rs.last();
rs.first();
rs.absolute(5);//游標移動到第5條
rs.absolute(-1); //游標移動到最後一條
rs.relative(-5); //游標向上移動5條
rs.relative(2); //游標向下移動2條
rs.deleterow();//刪除當前行
rs.last(); //游標移動到最後
rs.updatestring("summary", "this is ..."); //設定更新的字段值
rs.cancelrowupdates(); //取消剛才輸入的更新
rs.getrow(); //得到當前行號
rs.movetoinsertrow(); //游標移動到要新增的那條記錄上
rs.updateint("id", 1);
rs.updatestring(2, "my name");
rs.insertrow(); //插入新記錄
jdbc2.0提供的還有乙個功能就是資料庫的批量操作:
con.setautocommit(false);
statement stmt3 = con.createstatement();
stmt3.addbatch("insert .....");
stmt3.addbatch("insert .....");
int rows = stmt3.executebatch();
con.commit();
但是有一點要注意,stmt3.executebatch()他不會自動給你回滾資料操作,當你有5條update語句的時候,如果第三條發生錯誤,那麼將無法自動回滾前兩條update語句的影響,所以一定要自己手工進行事務管理
x230黑蘋果的一點經驗
最近換了個ssd硬碟,再裝了一次黑蘋果 總結點經驗 1.kext載入一次開機不要載入太多會卡死,建議載入一半驅動就重啟下 當然不影響開機的情況下,先別載入顯示卡,和e e吧 2.清空重建快取命令 sudo kextcache system prelinked kernel 可以檢視下是否順利重建快取...
特徵點提取演算法 01 特徵的定義基礎
前言 特徵提取 feature extraction 是計算機視覺和影象處理中的乙個概念。它指的是使用計算機提取影象資訊,決定每個影象的點是否屬於乙個影象特徵。特徵提取的結果是把影象上的點分為不同的子集,這些子集往往屬於孤立的點 連續的曲線或者連續的區域。案 理解特徵提取就是獲取依據需求,來獲取影象...
矩陣的特徵值和特徵向量 知識點
相似矩陣的特徵性質 特徵多項式的展開 幾何重數和代數重數 a aa是數域上的n nn級矩陣,若k nk n kn中有非零向量 alpha 使得a 0 0 k a alpha lambda 0 alpha,lambda 0 in k a 0 0 k則稱 0 lambda 0 0 是a aa的乙個特徵值...