- - PR -
MySQLにbyte[]のデータを入れたい。
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-03-26 12:47
こんにちはナスティキャットです。
MySQLにbyte配列のデータを入れたいのですが、どのようにすれば良いのでしょうか? 現在はこのようにしていますがエラーが出てしまいます。
SQLの書き方が稚拙ですいません。 データベースに登録するクラスは、String型でSQL文を受け取ってDBに書き込む形になっています。そこに送るSQLですがどのようにしたら良いのでしょうか? | ||||||||
|
投稿日時: 2004-03-26 13:08
JavaでDBにバイナリ−を登録する場合は、
Statementではなくて、PreparedStatementを使用するのではないでしょうか? 少なくとも、私はStatementでバイナリを登録するSQLを書けません。 | ||||||||
|
投稿日時: 2004-03-26 13:48
takuさん返信ありがとうございます。
と現在のexecuteUpdateメソッドを使っていますが、PreparedStatementを使用する場合、SQLを送った後に、setStringメソッドやsetBinaryStreamをやらなければなりませんよね? これをやるためにはDBにアクセスするクラスにConnectionを確立して返すメソッドを作ったほうが良いのでしょうか?このメソッド自体を書き換えたほうが良いのでしょうか? どちらのほうが効率が良いのでしょう? | ||||||||
|
投稿日時: 2004-03-26 13:52
こんなんでどうですか?
〔追記〕 ご理解されていたようで・・・。 失礼致しました。 [ メッセージ編集済み 編集者: でゅうく 編集日時 2004-03-26 13:55 ] | ||||||||
|
投稿日時: 2004-03-26 14:29
「Connectionを確立して返すメゾット」と今回の件と無関係な気が・・・。 まあ、私はそういったメゾットを用意してますけど。 少なくとも、私ならPreparedStatementを使用する場合、 SQLをセットするメゾットと、SQLを実行するメゾットを一緒にはしません。 こうしてしまうと、PreparedStatementを使用する意味が減ります。 | ||||||||
|
投稿日時: 2004-03-26 14:49
永井です。
素朴な疑問なんですが、仮に上手く展開してSQL文にバイナリを貼り付けられたと仮定して、それってDBの接続部分で文字コード変換フィルタが悪さしないでしょうか? 個人的には、普通にStreamから流し込む方が安定な気がします……。 #今のDBアクセスクラスの方針をあまり変えたくないのであれば、SQLと一緒にバイナリデータへの参照を渡せるようなインターフェースを追加して、その内部でバインド&流し込みを行うとかでしょう <追記> 何が何でも全部#setXXXで値を渡さなければいけないというわけでもないですから、バイナリを渡したい場合だけ当該部分を「?」にしておいて、受け側で流し込み用のStreamだけをバインドするというような方向性でいいのではないかと思います。 #で、基本的には動的SQL生成と </追記> --- 以下、余談。(最近余談ばっかだ……) ナスティキャットさんのコード、ずいぶんとCライクな書き方ですね、はこの際置いておくとして。
このコードは、どちらのSQL文が使われるんでしょう? #たまたまどちらも同じ文字列への参照を渡しているので気になってないのかも知れませんが…… [ メッセージ編集済み 編集者: 永井和彦 編集日時 2004-03-26 14:54 ] | ||||||||
|
投稿日時: 2004-03-26 18:20
すいません。コードに一部誤りがありました。
は実際には
となっていました。 余談:Cライクなのは、初めて触った言語がCだったためと思われます。 | ||||||||
|
投稿日時: 2004-03-28 23:40
はじめまして。
どうしても文字列としてSQLを組み立てたいなら、MySQLの場合 「"0x" + 16進ダンプ」の形式でバイナリデータを埋め込めます。 とはいうものの、MySQLへの依存度が高くなりますので、 特に理由が無ければPreparedStatementを使用する方をお勧めします。 ちなみに現行の安定版MySQLはサーバサイドでのSQLのプリコンパイルは、 まだサポートしていません。(α版ではサポート。) con.prepareStatement(), setXXX()はJDBCドライバ内で完結した処理、 ということになります。 | ||||||||
