Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Racket 如何连接打字拍子中的db?_Racket_Typed Racket - Fatal编程技术网

Racket 如何连接打字拍子中的db?

Racket 如何连接打字拍子中的db?,racket,typed-racket,Racket,Typed Racket,据介绍,通过网络连接postgresql非常方便 (require db) (define pgc (postgresql-connect #:user "example" #:database "exampledb" #:password "password")) 但是,这在键入的Racket中不起作用(我有(需要键入/db)): postgresql connect:中的模块中的未绑定标识符: po

据介绍,通过网络连接postgresql非常方便

(require db)
(define pgc
  (postgresql-connect #:user "example"
                      #:database "exampledb"
                      #:password "password"))
但是,这在键入的Racket中不起作用(我有
(需要键入/db)
):

postgresql connect:中的模块中的未绑定标识符: postgresql连接


对。。。事实证明,typed/db只用于sqlite3。下面是一些适合我的代码的示例:

#lang typed/racket

(require/typed
 db
 [#:opaque Connection connection?]
 [postgresql-connect
  (#:port Number #:user String #:database String #:password String
   -> Connection)]
 [query-rows
  (Connection String Any * -> (Listof (Vectorof Any)))]
 [query-list
  (Connection String Any * -> (Listof Any))])

(define conn
    (postgresql-connect #:port 13432
                        #:user db-username
                        #:database "scheduling"
                        #:password db-password))
(define rows
  (query-rows
   conn
   (~a "SELECT * FROM course_mappings")))

注意,我只为我想要使用的函数提供了类型。要使用,例如,
queryexec
,您需要为此提供一个单独的类型。

谢谢,我似乎应该将
查询值
作为
(连接字符串Any*->Any)
,因为在某些情况下我必须查询一些
字符串
,而在某些情况下我必须查询一些
整数
。但是如果我以
Any
的形式提供它,我必须进行它的每个函数调用,类型为
Any
。例如,
(:getadd(->Integer Any))
。实际上,我希望这个函数返回
字符串
。我不完全清楚您是希望更改查询值的输入参数还是输出参数。如果是输出,那么肯定需要一个cast;TR无法保证从数据库返回的值在没有运行时检查的情况下是所需的类型。要将值
v
转换为字符串,只需使用
(转换为v字符串)
。这将执行运行时检查,结果表达式的类型为
String