kagamihogeの日記

kagamihogeの日記です。

java.sql.RowIdつかってみた

なんか見慣れないクラスがあるなってことで使ってみた。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.RowId;
import java.sql.SQLException;
import java.sql.Statement;

public class Hoge {

    public static void main(String[] args) throws SQLException {
        Connection connection = DriverManager.getConnection(
            "jdbc:oracle:thin:@localhost:1521:XE", "xxxx", "xxxx");
        System.out.println(connection);

        Statement s = connection.createStatement();
        ResultSet r = s.executeQuery("select rowid from dual");

        while (r.next()) {
            RowId rowId = r.getRowId(1);
            oracle.sql.ROWID rowId2 = (oracle.sql.ROWID)rowId;
            String rowIdString = new String(rowId.getBytes());
            
            System.out.println("ROWID(oracle)#stringValue:"+rowId2.stringValue());
            System.out.println("RowId#toString:" + rowId.toString());
            System.out.println("RowId#byteString:" + rowIdString);
        }
        r.close();
        s.close();
        
        connection.close();
    }

}


ROWID(oracle)#stringValue:AAAAB0AABAAAAOhAAA
RowId#toString:oracle.sql.ROWID@ae511
RowId#byteString:AAAAB0AABAAAAOhAAA

まぁホントーに使ってみただけなんですが。見たまんまのとおりRDBMS依存の行IDを示す型がJDBCのクラスとして表現できる。OracleではROWIDでお馴染みのヤツです。

toStringで文字列として取得できるのかと思いきや(javadocにはソレっぽい記述があるんだけども)getBytes経由でないとダメらしい。