回答編集履歴
2
追記
test
CHANGED
@@ -28,6 +28,44 @@
|
|
28
28
|
|
29
29
|
---
|
30
30
|
|
31
|
-
追記: ”画像のバイト配列(UTF-8)”という記述から推測するに、バイナリーデータを文字として扱えると思っておられるようですが、もしそうなら間違いです。バイナリーデータはUTF-8とかISO8859などのいわゆる文字のエンコーディングでは表現できません(してはなりません)。
|
31
|
+
追記1: ”画像のバイト配列(UTF-8)”という記述から推測するに、バイナリーデータを文字として扱えると思っておられるようですが、もしそうなら間違いです。バイナリーデータはUTF-8とかISO8859などのいわゆる文字のエンコーディングでは表現できません(してはなりません)。
|
32
32
|
|
33
33
|
|
34
|
+
|
35
|
+
---
|
36
|
+
|
37
|
+
追記2:回答コメントをよく見たら・・・文字列とbyte[]を連結してますね。Javaでは文字列と文字列以外を'+'で連結すると文字列以外のデータはString.valueOfで文字列へ変換されて連結されてしまいます。せっかくバイナリーデータをbyte[]として用意してもStringとして扱ってしまうと"[B@xxxxx"みたいな意味のない文字列へ変換されてしまいます。
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
追記1にも書いたのですが**バイナリーデータを文字列として扱ってはなりません**。明確に区別して処理するようにしてください。
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
自分はSpring frameworkを一度も使ったことがないのでJdbcTemplateを使ってBLOBを書き込むコードを知りません。素のJDBCとPreparedStatementを使うなら次のようにします。
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
```java
|
50
|
+
|
51
|
+
//カラム定義は id=INT, image=BLOBです
|
52
|
+
|
53
|
+
int id = ...;
|
54
|
+
|
55
|
+
byte[] bytes = ...;
|
56
|
+
|
57
|
+
...
|
58
|
+
|
59
|
+
String sql = "insert into image_table(id,image) values (?,?);";
|
60
|
+
|
61
|
+
PreparedStatement statement = connection.prepareStatement(sql);
|
62
|
+
|
63
|
+
statement.setInt(1, id); // 1番目のplace holderへintを設定
|
64
|
+
|
65
|
+
statement.setBytes(2, bytes); // 2番目のplace holderへbyte[](バイナリーデータ)を設定
|
66
|
+
|
67
|
+
statement.execute();
|
68
|
+
|
69
|
+
```
|
70
|
+
|
71
|
+
|
1
追記
test
CHANGED
@@ -23,3 +23,11 @@
|
|
23
23
|
|
24
24
|
|
25
25
|
と書かれていますが、上記のデータは`but.toString()`とした文字列データをISO8859エンコーディングしたバイト列に見えます。つまりDBからバイナリーデータを取り出した後bufへ正しくその内容を設定できていません。DB上にはBLOBとして格納しているかバイナリーをなんらかのエンコードで文字列へ変換したものを格納していると思います。そのデータの取り出し方に問題があるということだと思います。
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
---
|
30
|
+
|
31
|
+
追記: ”画像のバイト配列(UTF-8)”という記述から推測するに、バイナリーデータを文字として扱えると思っておられるようですが、もしそうなら間違いです。バイナリーデータはUTF-8とかISO8859などのいわゆる文字のエンコーディングでは表現できません(してはなりません)。
|
32
|
+
|
33
|
+
|