なんか見慣れないクラスがあるなってことで使ってみた。
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経由でないとダメらしい。