2017-03-29 11 views
1

postgreSQL DBインスタンスに「指定」としてタイプがあります。 私は、 '指定'タイプの列 '指定'を持つ 'Prof'という名前のテーブルを持っています。 javaを使用してこの列に値を挿入したいとします。java apiを使用してpostgresカスタムビルド型フィールドに値を挿入

コードスニペット:

insProf.setInt(1, id); 
insProf.setInt(2, univ_id); 
insProf.setString(3, desg); 
int rs_insProf = insProf.executeUpdate(); 

出力誤差:

Enter designation: org.postgresql.util.PSQLException: ERROR: invalid input value for enum designation: "" 

構文をして助けてください、私はこれを扱うことができる最善の方法を把握することはできませんよ。

+0

あなたのクエリはどのように見えますか? –

+0

'insProf.setObject(3、desg、Types.OTHER)'を使用しようとします。 – AKSW

+0

'指定 'タイプが空の文字列'' ''を受け入れることは確かですか? (定義内で*列挙されていればそれを受け入れるだけです)。空文字列の代わりに 'NULL'を使用することができます。 – pozs

答えて

1

setObject()メソッドとgetObject()メソッドを使用できます。

https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#setObject(int,%20java.lang.Object)

は、setObjectメソッド()とのgetObject()を見てみましょう。

マニュアルに従って、「オブジェクトがインタフェースSQLDataを実装するクラスの場合、JDBCドライバは、SQLデータストリームに書き込みSQLData.writeSQLメソッドを呼び出す必要があります。」

ますので、SQLDataインタフェースを実装するカスタムクラスを作成することで、独自の型を作成することができます。

プラス、ドライバの型マップにカスタムタイプを登録することを忘れないでください。

チュートリアルがあまりにもあります:https://docs.oracle.com/javase/tutorial/jdbc/basics/sqlcustommapping.html

0

列挙型を挿入するには、次の構文を使用する必要があります。

あなたは型式指定のあなたのケースで、配列を使用することができます
INSERT INTO Prof (id, unit_id, designation) VALUES(?, ?, {?, ?, ?}); 
//-------------------------------------------------------^-------^ 

それとも

このように:

INSERT INTO Prof (id, unit_id, designation) VALUES(?, ?, ARRAY[?]::designation[]); 
//-------------------------------------------------------------^ 

複数を設定するには、複数の列挙型を持つ場合など、ループを使用して列挙型を埋めることができます。

関連する問題