[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 メーリングリストの案内