1

以下の sql ステートメントを実行するpsqlと正常に動作しますが、同じクエリを で構築して実行しようとするpreparedstatementと失敗します。

INSERT INTO Hvbp 
  (provider_number, weighted_clinical_process, 
   weighted_patience_experience, total_performance_score, 
   coordinates, latitude, longitude, address, city, state, zip) 
VALUES 
('010092', 43.909090909091, 13.5, 57.409090909091, 
 'POINT(33.206201 -87.525480)', 33.206200613000476, 
 -87.52548020899968, '809 UNIVERSITY BOULEVARD EAST', 'TUSCALOOSA', 'AL', '');

私が取得し続けるエラーは

org.postgresql.util.PSQLException: ERROR: column "coordinates" is of type geography but expression is of type character varying
  Hint: You will need to rewrite or cast the expression.
  Position: 203

coordinates列のタイプですGEOGRAPHY(POINT)

4

2 に答える 2

1

これが古い問題であることはわかっていますが、ほとんどの時間を同じ基本的な問題のデバッグに費やし、最終的に修正を見つけました

あなたがやろうとしているのは、POINTusing WKT を提供し、サーバーにそれを自動的にGeometry.

また、SQL の本体内に WKT を含めると機能しますが、準備されたステートメントでパラメーターを使用すると失敗します。

それを修正するための 3 つのオプションがあります。

  1. 次のように SQL で st_GeographyFromText を使用します。

    INSERT INTO Hvbp(coordinates) VALUES( st_GeographyFromText(?) ) 
    

    次に、パラメーターを で WKT として設定しますsetString
    関連するフレームワークによっては、それができない場合があります。

  2. setObjectの代わりに、preparedStatement で使用しsetStringます。例えば:

    ps.setObject(1, "POINT(33.206201 -87.525480)", java.sql.Types.OTHER )
    
  3. 文字列を型として送信するように JDBC ドライバーの設定を変更するunspecifiedと、サーバーが型変換を行います。そのためには、JDBC URL を次のように変更します。

    "jdbc:postgresql:my_db?stringtype=unspecified"
    
于 2014-10-16T02:59:52.697 に答える
0

@Tim - 同様の問題についてご協力いただきありがとうございます - ST_GeometryFromText をデータベースに書き込む必要があり、JDBC ドライバーは @Hanks と同様の例外をスローしました。

他の人のためのさらなる参照と明確化のために-これはJDBCでJavaを使用した私の結果です:

INSERT INTO streets.points ( point_id, the_geom ) 
        VALUES( ?, ST_GeomFromText( ? , 25832)  );

挿入された Geometry-String は次のようになります。

POINT(33.206201 -87.525480)
于 2015-03-25T14:40:09.963 に答える