[Seasar-user:2796] Re: [S2DAO]OraceでのRAW型のデータ更新

J.r0ck j69
2005年 11月 9日 (水) 01:54:55 JST


J.r0ckです。

On Tue, 08 Nov 2005 19:22:14 +0900
sato <[E-MAIL ADDRESS DELETED]> wrote:

> NSQ@佐藤です。
> 
> その際、テーブルAのVARCHAR2のデータをテーブルBのRAW型のフィールドに格
> 納する必要がありS2DAOを使用して処理を行ったのですがINSERTが行われた際に
> 以下のようなエラーが発生しました。
> (テーブルBのBeanの型はStringにしてみたりByte[]にしてみたりしましたが、
> 結果は変わりませんでした)

> 1)S2DAOでOracle#RAW型は利用可能なのでしょうか?(Oracle version 8.1.7)
> 2)利用可能な場合、どのように利用すれば良いのでしょうか?

Oracle8iのデータ型とJDBC−Javaデータ型のマッピングは

Javaデータ型  	JDBCデータ型  	Oracle8i SQLデータ型
------------	------------	--------------------
String 	CHAR 	CHAR
String 	VARCHAR 	VARCHAR2
String 	LONGVARCHAR 	LONG
java.math.BigDecimal 	NUMERIC 	NUMBER
java.math.BigDecimal 	DECIMAL 	NUMBER
boolean 	BIT 	NUMBER
byte 	TINYINT 	NUMBER
short 	SMALLINT 	NUMBER
int 	INTEGER 	NUMBER
long 	BIGINT 	NUMBER
float 	REAL 	NUMBER
double 	FLOAT 	NUMBER
double 	DOUBLE 	NUMBER
byte[] 	BINARY 	RAW
byte[] 	VARBINARY 	RAW
byte[] 	LONGVARBINARY 	LONGRAW
java.sql.Date 	DATE 	DATE
java.sql.Time 	TIME 	DATE
javal.sql.Timestamp 	TIMESTAMP 	DATE

で、S2JDBCでは
	public static ValueType getValueType(int type) {
		(中略)
			case Types.BINARY :
			case Types.VARBINARY :
			case Types.LONGVARBINARY :
				return getValueType(BYTE_ARRAY_CLASS);
なので、試してませんが、Beanはbyte[]で問題ないような気がします。

> org.seasar.framework.exception.SQLRuntimeException: [ESSR0071]SQLで例外
> が発生しました。理由はjava.sql.SQLException: ORA-01465: 16進数の指定が無
> 効です。        at org.seasar.framework.util.PreparedStatementUtil.

ところで、発生しているエラーですが
---------------------------------------------------
ORA-01465 16 進数の指定が無効です。
原因: SELECT FOR UPDATE に続くUPDATE 文のROWID の一部に無効な文字が含ま
れています。ROWID は、予定される正しいフォーマットで、引用符で囲んで指定する
必要があります。
処置: SELECT FOR UPDATE の中で返されたとおりにROWID を入力してください。
---------------------------------------------------
...ということで、データのマッピングの問題ではなく、原因は別にあるので
はないでしょうか?
# また、トランザクションの問題かと。

以上

-- 
J.r0ck <[E-MAIL ADDRESS DELETED]>




Seasar-user メーリングリストの案内