2008年09月06日 09:40
おしゃれ雑貨ブログです↓
http://viealamode.blog46.fc2.com/
Oracle JDBCドライバでPreparedStatementインターフェースのsetString()メソッドを使用した場合、使用しているキャラクタ・セットによってより厳しいサイズ制限が課せられる
ということだが
対処方を探してみた。
正直Javaに詳しくないので難しい・・・
「PreparedStatementインターフェースのsetString()メソッドを使用した場合」と言っていたが、setStringを使用しなければバインドできるというわけではない。
用はsetStringはString型で渡しているからINSERTすることができないんだと思う。
そこでsetCharacterStream()を使用すればバインドできるという話があったのだ。
これはString型でなくLONGVARCHAR型でデータを送る事ができるからだ。
こちらでおくれば無事INSERTできるという。
しかし、ここで問題点が、先日も話したが
setCharacterStream()で送ればINSERTできるの
しかし1つのテーブルにつきLONG型は1つしか存在してはいけないらしく
2つ以上大量データの領域があるカラムが存在すると
正常にバインドされないという。
→ただし情報が古いようなので、現在では大丈夫かも!?
なので大量データカラムが2つ以上あるテーブルでは気をつけて実装しましょう。
と、まあここまでは先日の復習。
実は、今回実装している部分ではsetCharacterStream()が使用できない実装方法で
これが使用できないことがわかりました。
しかしStringで渡しているのでこのままではバインドできない
■対処法1
そこでもうひとつバインド関数で用意されていたのを発見した
それは引数にInputStreamが指定されており
これはLONGVARBINARY型でデータを送るため、解決できるのではないかと思った。
InputStreamにはバイト型変数を指定しなければならないため
例
String st = 'じゃばってめんどくせっここに2001バイト以上4000バイト以内のデータをいれるんだよ';
InputStream is = st.getBytes();
こんな感じ?(ちょっと違うかもねw)
これをバインド関数の引数に渡して
データをバインドしてみた。
結果
4000バイトまでINSERTできました!!
しかーし
バイトでINSERTされましたw
やっぱりバイナリでVARCHARに送るとそのままバイトでINSERTされるみたいです。
しょぼーん。
web開発支援サイト作ってます
http://smileboys.fc2web.com/WebUtility/index.html
http://viealamode.blog46.fc2.com/
Oracle JDBCドライバでPreparedStatementインターフェースのsetString()メソッドを使用した場合、使用しているキャラクタ・セットによってより厳しいサイズ制限が課せられる
ということだが
対処方を探してみた。
正直Javaに詳しくないので難しい・・・
「PreparedStatementインターフェースのsetString()メソッドを使用した場合」と言っていたが、setStringを使用しなければバインドできるというわけではない。
用はsetStringはString型で渡しているからINSERTすることができないんだと思う。
そこでsetCharacterStream()を使用すればバインドできるという話があったのだ。
これはString型でなくLONGVARCHAR型でデータを送る事ができるからだ。
こちらでおくれば無事INSERTできるという。
しかし、ここで問題点が、先日も話したが
setCharacterStream()で送ればINSERTできるの
しかし1つのテーブルにつきLONG型は1つしか存在してはいけないらしく
2つ以上大量データの領域があるカラムが存在すると
正常にバインドされないという。
→ただし情報が古いようなので、現在では大丈夫かも!?
なので大量データカラムが2つ以上あるテーブルでは気をつけて実装しましょう。
と、まあここまでは先日の復習。
実は、今回実装している部分ではsetCharacterStream()が使用できない実装方法で
これが使用できないことがわかりました。
しかしStringで渡しているのでこのままではバインドできない
■対処法1
そこでもうひとつバインド関数で用意されていたのを発見した
それは引数にInputStreamが指定されており
これはLONGVARBINARY型でデータを送るため、解決できるのではないかと思った。
InputStreamにはバイト型変数を指定しなければならないため
例
String st = 'じゃばってめんどくせっここに2001バイト以上4000バイト以内のデータをいれるんだよ';
InputStream is = st.getBytes();
こんな感じ?(ちょっと違うかもねw)
これをバインド関数の引数に渡して
データをバインドしてみた。
結果
4000バイトまでINSERTできました!!
しかーし
バイトでINSERTされましたw
やっぱりバイナリでVARCHARに送るとそのままバイトでINSERTされるみたいです。
しょぼーん。
web開発支援サイト作ってます
http://smileboys.fc2web.com/WebUtility/index.html

