2017-07-04 6 views
0

私はClojureには新しく、POSTGRESデータベースでClojure、Compojure、およびjava.jdbcを使用して小さなWeb APIを作成しています。Jdbc4ArrayからClojure vecを抽出する

私のテーブルの一つは、その列の一つとして、整数の配列が含まれ、そのように定義されています

    (sql/create-table-ddl 
        :games 
        [:id :serial "PRIMARY KEY"] 
        [:active :BOOLEAN "NOT NULL"] 
        [:players "integer[]" "DEFAULT array[]::integer[]"] 
        [:player_order "integer[]" "DEFAULT array[]::integer[]"] 
        [:created_at :timestamp 
         "NOT NULL" "DEFAULT CURRENT_TIMESTAMP"]) 

私は、次のような[]整数の1を照会しようとしています:

(sql/query postgres [(str "SELECT * FROM games WHERE id=" game-id)]) 

しかし、Postgresは(代わりに、VECの)Jdbc4Arrayを返します。

:player_order #<Jdbc4Array {1,2,3,4} 
org.postgresql.jdbc4.Jdbc4Array 

私はO把握するように見えることはできませんこれをClojure vecに変える方法。私はいくつかの例を見てきましたが、私はそうではないストリームを使用しているようです。このクエリを間違って実行していますか?私はこれをClojure vecにどのように変換しますか?

+0

あなたがデータにアクセスしてみましたがへの呼び出しで返さ'getResultSet'?これを行うには、Java interopを使用します。 –

+0

@ChrisMurphyアイデアをありがとう。私は '.getResultSet'と' .getJavaArray'を試しましたが、私はこのエラーを受け取ります: 'org.postgresql.util.PSQLException:この接続は閉じました。 – Mike2012

答えて

1

Jdbc4Arrayjava.sql.Array;私はPGのデータベースを持っているか、手にコードを呼び出すが、java.sql.Arrayのためのドキュメントによると、あなたが呼び出すことができる必要がありません。

(into [] (.getArray your-val)) 

しかし、あなたのコード全体で手動で行う必要はありません。 プロトコルをjava.sql.Arrayに拡張すると、どこでも自動的にJdbc4ArrayからVectorへの変換を行うことができます。

これはすでにStackOverflowの上ここに実証されている:

https://stackoverflow.com/a/25786990/152739

(!私はそのままその男の答えをコピーしたくない)

関連する問題