7

Postgresqlにテーブルがあります

DROP TABLE xml_docs;
CREATE TABLE xml_docs(
id serial PRIMARY KEY,
cad_number character(50),
gkuzu_name character(50),
gkuzu xml,
rreq_name character(50),
rreq xml
)

データベース接続にはJDBCを使用しています。そして、xmlドキュメント全体をテーブルに挿入したいと思います。
どうすればこれを作ることができますか?

アップデート

オーケー。やってみます

  String sql = "INSERT INTO xml_docs(cad_number,gkuzu_name,gkuzu,rreq_name,rreq) VALUES(?,?,?,?,?)";
  PreparedStatement stmt = ce.prepareStatement(sql);
  stmt.setString(1, "11:33:5464563");
  stmt.setString(2, xml_gkuzu.getName());
  stmt.setString(3, xml_gkuzu.toString());
  stmt.setString(4, xml_rreq.getName());
  stmt.setString(5, xml_rreq.toString());
  stmt.executeQuery();
ce.close();
  se.close();

と例外を取得します

Exception in thread "main" org.postgresql.util.PSQLException: ERROR: column "gkuzu" is of type xml but expression is of type character varying
Подсказка: You will need to rewrite or cast the expression.

どうしたの?

更新2

私がこれをしようとすると

 String sql1 = "INSERT INTO xml_docs(cad_number,gkuzu_name,gkuzu,rreq_name,rreq) VALUES(11335464563,"+xml_gkuzu.getName()+",XMLPARSE("+xml_gkuzu.toString()+"),"+xml_rreq.getName()+",XMLPARSE("+xml_rreq.toString()+"))";

私は例外を得る

Exception in thread "main" org.postgresql.util.PSQLException: ERROR: syntax error at or near "bf48e000b0"
4

4 に答える 4

8

よくわかりませんが、これを試してください:

まず、XMLをJava文字列に変換します。次に、挿入ステートメントを作成し、PostgreSQLのXMLPARSEメソッドを使用して、値をPostgreSQLのxmlタイプに変換します。

INSERT INTO xml_docs(id, gkuzu) VALUES (1, XMLPARSE('<foo><bar>Hello</bar></foo>'));

参照:http ://wiki.postgresql.org/wiki/XML_Support

アップデート:

Javaコード例:

String sql = "INSERT INTO xml_docs(id, gkuzu) VALUES (?, XMLPARSE(?))";
[...]
stmt.setString(2, "<foo>Hello World!</foo>");

これにより、次のステートメントが作成されます。

INSERT INTO xml_docs(id, gkuzu) VALUES (1, XMLPARSE('<foo>Hello World!</foo>'));
于 2012-08-21T08:53:06.253 に答える
4

PostgreSQL独自の構文を使用して挿入ステートメントを書き直す代わりに、JDBC4SQLXMLを使用できます。

String xml = xml_gkuzu.toString();

SQLXML sqlxml = connection.createSQLXML();
sqlxml.setString(xml);
stmt.setSQLXML(3, sqlxml);
于 2014-11-25T15:45:42.567 に答える
3

libxmlサポートを使用してPostgresをビルドしていない場合の、受け入れられた回答の更新:

Javaコード例:

String sql = "INSERT INTO xml_docs(id, gkuzu) VALUES (?, XML(?))";
[...]
stmt.setString(2, "<foo>Hello World!</foo>");

これにより、次のステートメントが作成されます。

INSERT INTO xml_docs(id, gkuzu) VALUES (1, XML('<foo>Hello World!</foo>'));

XMLPARSEしたがって、バージョン9.0以降では、 ==>に切り替えることをお勧めしますXML。それ以外の場合は、特別なサポートが必要になりますXMLPARSE

Postgresのドキュメントから

xml型との間で変換するための関数のような式xmlparseおよびxmlserializeは、ここでは繰り返されません。これらの関数のほとんどを使用するには、configure--with-libxmlを使用してインストールをビルドする必要があります。

于 2013-03-25T13:14:22.840 に答える
2

postgresにはネイティブがありますがXML Data type、Javaの終わりから、プレーン文字列で処理できます。
xmlドキュメントを文字列に変換して挿入できます。動作するはずです。

アップデート:

エラーを確認した後、ドライバーURLを介してサーバーに追加の変数を渡す必要があります。

jdbc:postgresql://localhost/test?stringtype=unspecified
or
jdbc:postgresql://localhost/test?user=user&password=pass&stringtype=unspecified

追加のパラメータstringtype=unspecifiedは、入力文字列の型チェックを削除します。

于 2012-08-21T08:41:12.233 に答える