2

プリペアドステートメントを使用して、データベースに配列を挿入しています

PreparedStatement pstmt = conn.prepareStatement("INSERT INTO TABLE(stringArray) VALUES (?)");
String[] arr = { "a", " b", "c" };
pstmt.setObject(1, arr);

例に従ってsetObjectを使用していますが、setArrayが解決されず、setBlobも機能しません。

今、私がそれを読むようになったとき、配列値を取り戻すために私のオブジェクトをどうするべきかわかりません!

PreparedStatement pstmt = conn.prepareStatement("SELECT stringArray FROM TABLE WHERE id = 1");
ResultSet rs = pstmt.executeQuery();
rs.next();
Object object = rs.getObject(1);
System.out.println(object.toString());

出力するだけ

[B@45d0e784

object.toStringを実行していて、配列が必要なことはわかっていますが、どうすればよいですか?挿入時にバイトなどとして設定する必要がありますか?

ご協力いただきありがとうございます

4

2 に答える 2

2

PreparedStatement#setArrayメソッドはjava.sql.Array引数として取ります。試す -

PreparedStatement pstmt = conn.prepareStatement("INSERT INTO TABLE(stringArray) VALUES (?)");
String[] arr = { "a", " b", "c" };
Array a = conn.createArrayOf("marksArray", arr);
pstmt.setArray(1, arr);

ご了承ください -

JDBC ドライバーは、オブジェクトの指定されたクラスの java.sql.Types で定義されたデフォルトの JDBC SQL 型に要素のオブジェクト配列をマッピングする役割を果たします。デフォルトのマッピングは、JDBC 仕様の付録 B で指定されています。結果の JDBC 型が指定された typeName に適した型でない場合、SQLException がスローされるか、ドライバーが結果の変換をサポートするかは、実装によって定義されます。

于 2013-01-28T18:09:37.423 に答える
0

setArray関数を動作させることができませんでした。毎回エラーが発生しました。したがって、私は独自のシリアル化を実装することにしました。

forループを使用して、カンマ区切りを含む文字列を作成しました。次に、データベースから行を取得するときに、コンマで分割し、配列を再形成します。

プリペアドステートメントで使用されるシリアル化は、ユーザー定義オブジェクトの方がはるかに便利だと思いますが、私の文字列配列では、わざわざする価値はありませんでした。

于 2013-01-29T17:49:32.490 に答える