1

APPLICATION.rktで生成されたHTMLページにDBから値を出力しようとしています

しかし、これは私が以下のコードを実行したときに私が見るものです

&createstring;&db-conn;SELECT * from students

これが私が実行しようとしていることです:

#langラケット
(dbが必要)
(Webサーバー/サーブレットが必要)
(提供/契約(開始(要求?。->。応答?)))

(db-connを定義する
      (仮想接続
         (lambda()(mysql-connect#:server "localhost"
                 #:ポート8889
                 #:データベース「SOB」
                 #:user "root"
                 #:password "root")))))




(定義(開始要求)
  (define(createstring id name sid)
    (string-append "id is" id "and name is" name "and sid is" sid))
  (response / xexpr
   '(html
     (頭(タイトル「SOB」))
     (体
      、@(map(h1)(map createstring(in-query db-conn "SELECT * from Student"))))
     ))))


(web-server / servlet-envが必要です)
(サーブレット/サーブレット開始
               #:launch-browser?#f
               #:終了する?#f
               #:listen-ip #f
               #:ポート8080
               #:extra-files-paths
               (リスト(ビルドパス "/ Users / lalith / Documents / LALITH FILES / MDX / SOB /" "htmlfiles"))
               #:servlet-path
               "/servlets/APPLICATION.rkt")

私がwrnogをしていることについて何か提案はありますか?

4

1 に答える 1

3

いくつかの問題があります。

まず、代わりに;を使用quasiquote(または「バッククォート」) します。そうしないと、 (つまり、 )quoteでエスケープできません。つまり、変更,@unquote-splicing

'(html ___)

`(html ___)

次に、,@エスケープ内で、あなたmapの s が間違っていて、とにかくmap動作しませin-queryん。代わりに、おそらく次のようなものが必要です。

,@(for/list ([(id name sid)
              (in-query db-conn "SELECT id, name, sid from students")])
    `(h1 ,(createstring id name sid)))

またはそのようなもの。(上記のコードは、必要に応じて、テーブルの各行にレベル 1 ヘッダーを作成します。)


コメントに応じて編集:idデータベース内の数値列のようです。最近のバージョンの Racket をお持ちの場合は、 を使用することをお勧めし~aますstring-append。の定義を次のように変更しますcreatestring

(define (createstring id name sid)
  (~a "id is " id "and name is " name "and sid is "  sid))

Racket の古いバージョン ( より前~a) では、format代わりに を使用します (方法についてはドキュメントを参照してください)。

于 2012-12-03T01:49:10.233 に答える