日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

ORACLE自帶的JDBC源代碼解析

瀏覽:23日期:2024-07-06 15:41:56
大凡使用過JDBC連Oracle的人都會知道這樣一個事實:我們需要的庫文件classes12.zip存在于$ORACLE_HOME/jdbc/lib目錄下(但仍有部分菜鳥每每在論壇上求此庫文件, 真是辛勞);但很少有人知道ORACLE還為我們預備了使用jdbc的示例,它存在于 $ORACLE_HOME/jdbc/demo/demo.zip 中。 前一段時間,我學習ORACLE的OOP技術,很受觸動。當時我想:JDBC中一定存在某些OO技術以支持它。很久都沒有找到合適的例子,最后在ORACLE的安裝目錄下找到它。真可謂是:踏破鐵鞋無覓處,得來全不費工夫。 約定: 1、假如出現 Java.lang.UnsatisfiedLinkError: do_open,則你需要把 DriverManager.getConnection() 方法的 url 修改成 jdbc:oracle:thin:@127.0.0.1:1521:oradb,具體原因未知; 2、假如出現 java.sql.SQLException: 不支持的字符集: oracle-character-set-852,則你需要把 nls_charset12.zip加入你的工程中(此文件與 classes12.zip 同目錄); 下面我就把文件夾 amplesoci8object-samples下的文件做一個具體的功能描述: 1、PersonObject.java 這個例子演示了表 people 中存在ADT字段 empid,其類型為 PERSON,而且類型 PERSON中存在ADT字段 home,其類型為 ADDRESS,而且類型 ADDRESS是一個ADT。 假如使用常規SQL語句,其插入語句與在sql/plus中無異,即:使用構造函數嵌套構造。 另有一種方法,使用 STRUCT 的構造函數 STRUCT(StructDescriptor, Connection, Object[]) 構造出一個STRUCT對象,即一個ADT對象。同時,假如有嵌套則需要嵌套構造ADT對象。最后通過 PreparedStatement的 setObject方法指定ADT對象即可。 讀取數據時則采用與上述方法相逆的辦法:假如是簡單類型,則直接讀取;假如是ADT,則使用ResultSet的getObject(),再強制轉換成STRUCT,然后調用STRUCT的getAttributes()方法取得 Object[] 類型數據,如是遞歸。 2、SQLDataExample.java與EmployeeObj.java 此例與1中相似,也是對ADT的處理,不同的是類型沒有嵌套。 比較而言,2比1的代碼簡潔了很多,不過也是付出了代價:為類型 EMPLOYEE 抽象出一個類EmployeeObj,它實現了SQLData接口,并重寫了三個方法(必須的)。 前臺的調用比1中的第二種方法簡潔了很多,只需要直接使用PreparedStatement的 setObject方法指定ADT對象即可(不過需要指定其類型為OracleTypes.STRUCT)。讀取時也可直接使用OracleResultSet的getObject()并強制轉換成EmployeeObj對象即可。 真可謂是:有得必有失!! 另,此例中有幾處需要注重的地方: 2.1 EmployeeObj.java中的 import oracle.jdbc2.*; 改成 import oracle.jdbc.*; 原因未知; 2.2 SQLDataExample.java 中的 Dictionary map = conn.getTypeMap(); 改成 java.util.Map map = conn.getTypeMap(); 原因:NOTE: ;This class(指的是Dictionary) is obsolete. New implementations should implement the Map interface, rather than extendidng this class.(來源:javadoc); 2.3 SQLDataExample.java 中的 pstmt.executeQuery(); 改成 pstmt.executeUpdate(); 更合理些,因為這是更新而非查詢(不改也不會影響功能,只是建議); 3、CustomDatumExample.java與Employee.java 此例與2完全相同。 不同的是采用了另外一種抽象技術,并實現了接口CustomDatum 與 CustomDatumFactory,并重寫了二個方法toDatum()與create()。在前臺訪問數據時亦有少許不同:采用了OracleResultSet的getCustomDatum()方法并把它強制轉換成Employee。從外觀上看,2中SQLData接口存在于 java.sql.* 包中;而接口CustomDatum 與 CustomDatumFactory則存在于oracle.sql.*包中,可以認為是Oracle公司對自己產品的專門實現。或許有更高的性能、更小的開銷?不過3不如2來得直接,個人認為。 4、ArrayExample.java 從文件名可看出,此示例演示的是VARRAY類型。 同1,插入亦有兩種方法。一種可直接使用SQL;另外,可使用OraclePreparedStatement的setARRAY方法,構造ARRAY的過程與構造 STRUCT 無異。數據的讀取過程與此相反:先使用OracleResultSet的getARRAY()方法取得ARRAY對象,再調用此對象的getArray()方法并強制轉換成對象數組,然后對此數組操作即可。 5、PersonRef.java與StudentRef.java 不知是不是ORACLE與我們開玩笑,這兩個文件除了類名不同外,其余一切相同。 這個例子給我們演示的是對象表的概念。對象表的插入與普通表沒有任何不同,數據的讀取首先體現在其SQL上,需要使用REF函數,然后調用ResultSet的getObject()方法并強制轉換成REF對象,再利用此對象的getValue()并轉換成STRUCT對象,再利用此對象 的getAttributes()方法得到Object[],然后對此數組操作即可。 6、RefClient.java與GenREF.java This sample demonstrates using REF over two different Sessions. 類GenREF用來封裝REF對象所指向的類型及其二進制內容。程序先Materialize into GenREF,然后在另一會話中De-materialize REF from GenREF,下面就與處理REF相同:利用此對象的getValue()并轉換成STRUCT對象,再利用此對象 的getAttributes()方法得到Object[],然后對此數組操作即可。 7、FileExample.java與PLSQL_FileExample.java 此示例使用 BFILE 數據類型,Contains a locator(定位器) to a large binary file stored outside the database。數據插入時需要使用函數 bfilename,這個函數需要目錄對象,此對象需要使用create Directory mydir來創建(此用戶需具有CREATE ANY DIRECTORY系統權限)。我曾在這個地方有個大教訓:按著步驟做,可在讀取時總是提示我沒有此目錄!!最后,我把BFILENAME函數的第一個參數(即目錄名)大寫就好了。原因:目錄名在函數中區分大小寫,雖然我們創建它時用的是小寫,可到了數據庫中后就自動變成了大寫。 讀取BFILE類型的數據時,首先通過其getBinaryStream()方法得到二進制的輸入流,然后操作這個輸入流就可以了。The limitation is your imagination。 PLSQL_FileExample.java實現的功能與上述的相同,只不過所有針對BFILE的操作都是通過調用pl/sql匿名塊來完成的,并使用了OracleCallableStatement。假如沒有必要,使用前者即可。 8、LobExample.java與PLSQL_LobExample.java 此示例使用了CLOB和BLOB數據類型。 插入數據時,需要分別通過getBinaryOutputStream()和getCharacterOutputStream()得到二進制輸出流和字符輸出流,然后就是針對此輸出流的操作了,與傳統的 java I/O 相同。 讀取數據時,需要分別通過getBinaryStream()和getCharacterStream()得到二進制輸入流和字符輸入流,然后就是針對此輸入流的操作了,與傳統的 java I/O 相同。 PLSQL_LobExample.java實現的功能與上述的相同,只不過所有針對CLOB和BLOB的操作都是通過調用pl/sql匿名塊來完成的,并使用了OracleCallableStatement。 假如沒有必要,使用前者即可。 注:7、8的第二個示例中均使用到了dbms_lob程序包。 上面我僅對ORACLE給我們提供的demo的極小的一部分給出了解釋,并加入我自己的看法。我也是想通過這篇文章,起到拋磚引玉的作用,希望廣大網友多對產品的示例進行分析,從而得到最原汁原味的代碼。 你的意見,我愿意聽!! email:zbdlmxc@163.com
標簽: JDBC
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
激情欧美一区二区三区| 免费美女久久99| 日本91福利区| 色8久久久久| 亚洲一区二区免费看| 性一交一乱一区二区洋洋av| 久久国产精品久久w女人spa| 久久亚洲不卡| 亚洲精品护士| 国产精品婷婷| 中文一区一区三区免费在线观 | 欧美日韩一区二区国产| 亚洲作爱视频| 丝瓜av网站精品一区二区| 视频一区免费在线观看| 综合一区av| 91亚洲无吗| 美女国产精品久久久| 91一区二区三区四区| 亚洲国产专区校园欧美| 久久www成人_看片免费不卡| 日韩av中文字幕一区二区三区| 国产精品丝袜在线播放| 久久精品一区| 亚洲国产专区| 中文字幕一区二区三区日韩精品| 亚洲精品成人一区| 欧美日韩一区二区高清| 国内自拍视频一区二区三区| 久久久成人网| 免费在线观看日韩欧美| 国产美女亚洲精品7777| 国产美女高潮在线| 红桃视频亚洲| 久久精品av麻豆的观看方式| 国产精品久久观看| 免费视频久久| 老司机精品视频网| 999久久久亚洲| 日韩精品午夜视频| 亚洲理论在线| 日韩电影在线视频| 亚洲www啪成人一区二区| 国产亚洲亚洲| 久久99影视| 欧美 日韩 国产一区二区在线视频| 中文字幕中文字幕精品| 97精品一区| 蜜桃久久久久久久| 国产一区二区三区四区五区传媒| 亚洲欧美日韩在线观看a三区| 国产精品久久久久久久久久妞妞| 欧美中文一区二区| 久久精品99国产精品日本| 视频小说一区二区| 国产亚洲一区二区三区不卡| 婷婷激情久久| 日韩精品成人| 久久中文视频| 国产精品sss在线观看av| 欧美日韩国产欧| 免费精品一区| 一区二区三区四区在线观看国产日韩| 捆绑调教美女网站视频一区| 在线亚洲一区| 精品一区二区三区中文字幕 | 91视频一区| 日韩一区二区三区高清在线观看| 免费精品视频在线| 日韩精品亚洲专区在线观看| 99精品电影| 国产伦精品一区二区三区在线播放| 亚洲午夜电影| 九九久久国产| 亚洲日本在线观看视频| 99久久精品网站| 国产精品一区毛片| 日韩精品一级中文字幕精品视频免费观看 | 亚洲免费黄色| 国产激情精品一区二区三区| 一本综合精品| 欧美aa国产视频| 国产精品99视频| 欧美日韩亚洲一区| 亚洲天堂日韩在线| 日韩一区二区三区免费播放| 国产精品蜜月aⅴ在线| 老色鬼久久亚洲一区二区| 国产日产高清欧美一区二区三区| 国产欧美日韩精品一区二区三区| 国产精品88久久久久久| 精品欠久久久中文字幕加勒比| 四虎精品一区二区免费| 尤物精品在线| 少妇精品导航| 国产精品福利在线观看播放| 国产精品一区亚洲| 亚洲综合婷婷| 在线视频免费在线观看一区二区| 日韩在线观看一区| 欧美天堂在线| 亚洲91网站| 巨乳诱惑日韩免费av| 国产在线不卡| 久久精品国产www456c0m| 中文在线а√天堂| 成人在线免费观看91| 久久99久久人婷婷精品综合| 日产欧产美韩系列久久99| 黑丝一区二区三区| 国产韩日影视精品| 欧美日韩三区| 黄色av日韩| 在线综合亚洲| 男人天堂欧美日韩| 九九综合九九| 欧美精选一区二区三区| 欧美午夜精品一区二区三区电影| 九九精品调教| 久久九九精品| 久久91导航| 91亚洲精品在看在线观看高清| 麻豆亚洲精品| 亚洲一区中文| 亚洲在线一区| 99国产成+人+综合+亚洲欧美| 欧美成人精品| 伊人久久婷婷| 久久亚洲不卡| 亚洲bt欧美bt精品777| 国产手机视频一区二区| 天堂成人免费av电影一区| 自拍自偷一区二区三区| 婷婷综合电影| 国产亚洲精品精品国产亚洲综合| 国产日产精品_国产精品毛片| 欧美日本不卡高清| 麻豆高清免费国产一区| 国产夫妻在线| 日韩精品午夜| 伊人久久亚洲影院| 亚洲人成精品久久久| 欧美久久精品| 丰满少妇一区| 亚洲成人精品| 亚洲黄页一区| 日韩美女国产精品| 狂野欧美性猛交xxxx| 成人午夜精品| 99精品99| 久久国产人妖系列| zzzwww在线看片免费| 欧美日韩水蜜桃| 亚洲专区欧美专区| 日韩欧美自拍| 视频一区在线视频| 日韩激情啪啪| 精品在线网站观看| 99视频精品全国免费| 视频在线在亚洲| 亚久久调教视频| 国产精品黄色| 亚洲国产福利| 国产精品社区| 国产精品久久久久久久久久妞妞| 国产精品精品国产一区二区| 亚洲女同一区| 欧美亚洲综合视频| 国产精品麻豆久久| 亚洲欧美激情诱惑| 国产福利一区二区三区在线播放| 9999国产精品| 免费成人在线影院| 国产精品99精品一区二区三区∴| 亚洲天堂免费电影| 免费看日韩精品| 国产中文字幕一区二区三区| 欧美日韩国产一区精品一区| 欧美一级网站| 久久狠狠婷婷| 亚洲bt欧美bt精品777| 高清一区二区| 丝袜美腿亚洲一区二区图片| 欧美精品二区| 国产精品丝袜xxxxxxx| 精品美女久久| 蜜桃视频在线观看一区二区| www.51av欧美视频| 亚洲+小说+欧美+激情+另类| 亚洲精品88| 综合亚洲自拍| 风间由美中文字幕在线看视频国产欧美| 国产欧美日韩一区二区三区四区| 久久爱www成人| 日韩一级欧洲| 久久精品国产免费| 免费人成黄页网站在线一区二区 | 日韩精品五月天| 日本免费一区二区三区四区| 日本a级不卡|