新しくブログを開設しました。

Webエンジニアがデザイナーになってみる。


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

新しくブログを開設しました。

Webエンジニアがデザイナーになってみる。


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されるみたいです。


しょぼーん。


スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

<<javascriptのめも | ホーム | JDBC経由によるVARCHARへのINSERTの文字数制限>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://kanamehackday.blog17.fc2.com/tb.php/97-57656c3b
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。