我正在尝试查询我在本地机器上设置的postgres数据库。
我已经创建了一个文件
(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中)查询数据库
(jdbc/query database ["SELECT * FROM table"])我得到错误ConnectException Connection refused java.net.PlainSocketImpl.socketConnect (PlainSocketImpl.java:-2)
注意,我希望数据库是空的,因为我还没有向数据库中输入任何信息
我在定义数据库时犯了什么错误?
要插入用户,请执行以下操作:
(defn register-user! [db name]
(jdbc/insert! db :user {:name name}))发布于 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。
在您的情况下,它可能是:
{:dbtype "postgresql")
:dbname "mydb"
:host "127.0.0.1"
:port 5432
:user "admin"
:password "secret"}发布于 2017-02-19 01:42:25
您的配置很好,当我使用我自己的本地postgres db时,它对我很有效,尽管在另一个答案中给出的配置更清晰。
进行此类操作时,最好的方法是能够使用第三方客户端与数据库对话,然后再尝试以编程方式执行此操作。
假设您使用的是*nix OS,您应该能够使用psql来管理数据库。创建您的角色、分配密码、创建数据库、创建表,然后在表中插入一两行。在postgres配置中,关闭ssl,以保持它的简单性,直到您让它工作,然后添加它,如果您需要它。
最困难的部分就是让postgres配置正确。一旦验证了对psql的访问和使用,clojure部分就变得微不足道了。
您应该拥有的FWIW、工作和最新版本的依赖项包括:
[org.clojure/java.jdbc "0.7.0-alpha1"]
[postgresql/postgresql "9.3-1102.jdbc41"]https://stackoverflow.com/questions/42316970
复制相似问题