国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
通過Java操控Oracle對象(1)

對象是用戶自定義的復(fù)合數(shù)據(jù), 它封裝了數(shù)據(jù)及操作數(shù)據(jù)的方法.
Oracle中也可以自定義對象, 但本文并不重點(diǎn)討論如何在Oracle中創(chuàng)建及操作對象,
我們只關(guān)注如何通過Java來操縱Oracle中的對象.

有兩種方式可能操縱Oracle 對象:
    1, 通過標(biāo)準(zhǔn)Java Struct對象;
    2, 通過Oracle STRUCT對象;

我們先簡單的從讀取Oracle對象入手, 初步了解一下Java是如何訪問Oracle對象的.

首先在DB中CREATE一個對象DEMO_TYPE:
CREATE TYPE DEMO_TYPE AS OBJECT
(
   ATOMIC_NUMBER         NUMBER,
   SYMBOL                VARCHAR2(2),
   NAME                  VARCHAR2(20),
   MASS                  NUMBER(5, 2)
);
/

接著我們創(chuàng)建一個TABLE DEMO_TABLE, 定義一個引用DEMO_TYPE的字段:
CREATE TABLE DEMO_TABLE
(
   PERIOD        NUMBER,
   COLUMN_GROUP  NUMBER,
   ELEMENT       DEMO_TYPE
);


INSERT INTO DEMO_TABLE
VALUES(1, 1, DEMO_TYPE(1, ‘H‘, ‘Hydrogen‘, 0.5));

INSERT INTO DEMO_TABLE
VALUES(1, 8, DEMO_TYPE(2, ‘He‘, ‘Helium‘, 5.89));

INSERT INTO DEMO_TABLE
VALUES(2, 1, DEMO_TYPE(3, ‘Li‘, ‘Lithium‘, 6.3));


下面看看Java Codes:
為了能利用標(biāo)準(zhǔn)Java Struct類操縱Oracle Object, 我們需要import java.sql.Struct這個class
現(xiàn)在我們讀出這個Object:
      ResultSet rs   = stmt.executeQuery("SELECT PERIOD, COLUMN_GROUP, ELEMENT FROM DEMO_TABLE");

前兩個Field(PERIOD 和 COLUMN_GROUP)都能用rs.getInt()方法讀取
重點(diǎn)關(guān)注一下ELEMENT這個Field, 它是對DEMO_TYPE的引用,在Java中, 我們用rs.getObject()方法記取它, 像下面這樣:
     Struct eleStruct = (Struct) rs.getObject(3);
至此, Java已經(jīng)取得了Oracle Object的引用, 那么我們?nèi)绾巫x取Object中的每一個具體屬性呢?利用Struct class中的getAttributes()方法:
     Object elementAttr[] = eleStruct.getAttributes();
把eleStruct中的每一個attribute寫入elementAttr 數(shù)組, 現(xiàn)在我們就可以自由讀取 ELEMENT Field中的每一個屬性了, 如下:
         int atomic_number = ((BigDecimal)elementAttr[0]).intValue();
         String symbol = (String) elementAttr[1];
         String name   = (String) elementAttr[2];
         float  mass   = ((BigDecimal) elementAttr[3]).floatValue();

注意對元素0和元素3的讀取方法.
先看看基本SQL數(shù)據(jù)類型與Java數(shù)據(jù)類型之間的映射關(guān)系:
Oracle SQL 數(shù)據(jù)類型               Java數(shù)據(jù)類型
VARCHAR2, CHAR                    String
NUMBER                                     BigDecimal
DATE                                            Date

由于"SYMBOL"和"NAME" 是VARCHAR2數(shù)據(jù)類型, 很容易轉(zhuǎn)換到String類型, 但對于NUMBER數(shù)據(jù), 為了能容納任何可能的NUMBER數(shù)值, 有必要先把NUMBER轉(zhuǎn)換為BigDecimal類型, 然后轉(zhuǎn)換成其它合適的類型.因此, 我們把元素0轉(zhuǎn)換成int類型,把元素3轉(zhuǎn)換成float類型, 只是為了保持與Oracle中的數(shù)據(jù)一致.

另外一個要注意的是:讀取出來的symbol和name有可能是形如"????"的亂碼, 出現(xiàn)這種情況, 你可能需要到OTN上下載一個nls_charset12.jar的文件,并在%CLASSPATH%中設(shè)置好其路徑.

下次, 我將講述對Oracle Object的更新.

附完整代碼如下:
import java.sql.*;
import java.math.BigDecimal;

public class testLob
{
   public static void main(String args[]) throws SQLException
   {
      DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
      Connection conn = DriverManager.getConnection
                        ("jdbc:oracle:thin:@localhost:1521:OEMREP", "scott", "tiger");
      Statement stmt = conn.createStatement();
      ResultSet rs   = stmt.executeQuery("SELECT PERIOD, COLUMN_GROUP, ELEMENT FROM DEMO_TABLE");

      while (rs.next()) {
         int period = rs.getInt(1);
         int group  = rs.getInt(2);

         Struct eleStruct = (Struct) rs.getObject(3);
         Object elementAttr[] = eleStruct.getAttributes();

         int atomic_number = ((BigDecimal)elementAttr[0]).intValue();
         String symbol = (String) elementAttr[1];
         String name   = (String) elementAttr[2];
         float  mass   = ((BigDecimal) elementAttr[3]).floatValue();

         System.out.println("atomic_number = " + atomic_number +
                            "\tsymbol = " + symbol +
                            "\tname   = " + name +
                            "\tmass   = " + mass);
        
      }

      rs.close();
      stmt.close();
      conn.close();
   }
}

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Struts2自定義類型轉(zhuǎn)換器配置
JdbcType類型和Java類型的對應(yīng)關(guān)系
java 科學(xué)計(jì)數(shù)法轉(zhuǎn)換
通過JMS監(jiān)聽Oracle AQ,在數(shù)據(jù)庫變化時觸發(fā)執(zhí)行Java程序(轉(zhuǎn)載)
十分有用的代碼:JDBC連接DB2、Oracle、MySQL、PostgreSQL,并取當(dāng)前時間
JAVA中讀取ORACLE的CLOB字段
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服