首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询Postgres数据库- Clojure

查询Postgres数据库- Clojure
EN

Stack Overflow用户
提问于 2017-02-18 23:19:36
回答 2查看 1.3K关注 0票数 3

我正在尝试查询我在本地机器上设置的postgres数据库。

我已经创建了一个文件

代码语言:javascript
复制
(ns website.db
  (:require [clojure.java.jdbc :as jdbc]))

(def database
  {:classname "com.postgres.jdbc.Driver"
   :subprotocol "postgres"
   :subname "mydb" ; In the guide this was //127.0.0.1:3306/mydb. Is the first part my computer IP address?
   :user "admin"
   :password "secret"})

如果我随后尝试使用(在REPL中)查询数据库

代码语言:javascript
复制
(jdbc/query database ["SELECT * FROM table"])

我得到错误ConnectException Connection refused java.net.PlainSocketImpl.socketConnect (PlainSocketImpl.java:-2)

注意,我希望数据库是空的,因为我还没有向数据库中输入任何信息

我在定义数据库时犯了什么错误?

要插入用户,请执行以下操作:

代码语言:javascript
复制
(defn register-user! [db name]
  (jdbc/insert! db :user {:name name}))
EN

回答 2

Stack Overflow用户

发布于 2017-02-18 23:56:16

clojure.java.jdbc文档站点没有涵盖所有的可能性,也没有太多的细节。

我会向你指出the doc of get-connection函数,它是相当广泛的:

(...)db-spec通常是包含连接参数的映射,但也可以是URI或字符串。下面描述各种可能性: DriverManager (首选)::dbtype (必需)字符串、数据库类型(JDBC子协议) :dbname (必需)字符串、数据库名称:host (可选)字符串、数据库的主机名/IP(缺省为127.0.0.1) :port (可选) Long、数据库的端口( mysql默认为3306,mssql/jtds默认为1433,否则为nil) (其他)(可选)作为属性传递给驱动程序。Raw:: connection -uri (必需)直接传递到DriverManager/getConnection的字符串其他接受的格式: existing Connection::connection (必需)可以使用但不能关闭的现有打开连接(只有父连接才能关闭) DriverManager (备用/传统样式)::subprotocol (必需)字符串,jdbc subprotocol :子名(必需)字符串,jdbc子名:classname (可选)字符串,作为属性传递给驱动程序的jdbc驱动程序类名(其他)(可选)。Factory::factory (必需)一个参数的函数,在映射中传递给工厂函数的参数(其他)(可选)的映射DataSource::datasource (必需) javax.sql.DataSource :用户名(可选)字符串:用户(可选)字符串-替换别名:用户名(添加在0.3.0-beta2之后以保持一致性JDBC-74):密码(可选)字符串,如果:username被提供JNDI::name (必需)一个字符串或javax.naming.Name :environment (可选)一个java.util.Map java.net.URI: Parsed JDBC连接字符串(参见下面的java.lang.String格式) java.lang.String: subprotocol://user:password@host:post/subname允许一个可选的前缀jdbc:“

最新的clojure.java.jdbc版本还包括Clojure specs for db-spec map

在您的情况下,它可能是:

代码语言:javascript
复制
{:dbtype "postgresql")
 :dbname "mydb"
 :host "127.0.0.1"
 :port 5432
 :user "admin"
 :password "secret"}
票数 2
EN

Stack Overflow用户

发布于 2017-02-19 01:42:25

您的配置很好,当我使用我自己的本地postgres db时,它对我很有效,尽管在另一个答案中给出的配置更清晰。

进行此类操作时,最好的方法是能够使用第三方客户端与数据库对话,然后再尝试以编程方式执行此操作。

假设您使用的是*nix OS,您应该能够使用psql来管理数据库。创建您的角色、分配密码、创建数据库、创建表,然后在表中插入一两行。在postgres配置中,关闭ssl,以保持它的简单性,直到您让它工作,然后添加它,如果您需要它。

最困难的部分就是让postgres配置正确。一旦验证了对psql的访问和使用,clojure部分就变得微不足道了。

您应该拥有的FWIW、工作和最新版本的依赖项包括:

代码语言:javascript
复制
[org.clojure/java.jdbc "0.7.0-alpha1"]
[postgresql/postgresql "9.3-1102.jdbc41"]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42316970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档