我正在尝试将我的Clojure程序连接到PostgreSQL数据库。我有所需的依赖项。这是我的repository.clj文件。
(ns webdev.repository
(:require [clojure.java.jdbc :as db] ))
(defn create-tables [db]
(db/execute! db ["create table if not exists movies(id serial not null,
name varchar not null, primary key (id));"])
(db/execute! db ["create table if not exists users(id varchar not null,
f_name varchar not null, l_name varchar not null, primary key(id));"])
)
这是我的core.clj文件的一部分。
(ns webdev.core
(:require [webdev.repository :as repo])
(:require [ring.adapter.jetty :as jetty]
[ring.middleware.reload :refer [wrap-reload]]
[compojure.core :refer [defroutes GET]]
[compojure.route :refer [not-found]]
[ring.handler.dump :refer [handle-dump]]
))
(def db "postgresql://localhost:5432/webdev")
(repo/create-tables db) ;;call to create the tables
...
...
当我运行这个程序时,会出现一个错误,提示:
Caused by: org.postgresql.util.PSQLException: This ResultSet is closed.
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.checkClosed(AbstractJdbc2ResultSet.java:2654)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.setFetchSize(AbstractJdbc2ResultSet.java:1771)
at org.postgresql.jdbc4.Jdbc4Statement.createResultSet(Jdbc4Statement.java:39)
at org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler.handleResultRows(AbstractJdbc2Statement.java:211)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1773)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)
无法找出我做错了什么。编辑
选择语句似乎可以工作。但是插入和创建表格语句会出现“此结果集已关闭”的错误。
-main中调用该函数,并在开发过程中从 repl 调用。 - cfrick