球拍的 MySQL 之旅~~~
drracket吧
全部回复
仅看楼主
level 11
带度娘周游SQL啦~~~[太开心]
2014年04月15日 14点04分 1
level 11
用 racket 建立于 MySQL 数据库的连接,并进行操作。
就像其他程序语言一样,racket也只是实现了于数据库的接口程序,然后使用接口访问数据库而已。其中的操作不过是熟悉一下,racket的接口函数和命令语法,其余的都是数据库语言了。
2014年04月16日 06点04分 3
level 11
;;;第一次简单实践
;;;数据库操作库
(require db)
;;;建立数据库连接
(define ms (mysql-connect #:server "127.0.0.1"
#:port 3306
#:database ""
#:user "名字"
#:password "密码"))
#|
;;;创建一个racket数据库
(query
ms
"CREATE DATABASE racket")
;;;创建the_numbers表格
(query
ms
"CREATE TABLE racket.the_numbers
(
n integer,
d varchar(20)
)"
;;;数据库插入操作
(query
ms
"INSERT INTO racket.the_numbers VALUES (0, 'nothing')")
;;;同上
(query
ms
"INSERT INTO racket.the_numbers VALUES (1, 'the loneliest number')")
;;;使用带参数的方式
(query ms
"insert into racket.the_numbers values (?, ?)"
(+ 1 1)
"company")
;;;插入数据
(query
ms
"INSERT INTO racket.the_numbers VALUES (3, 'a crowd')")
;;;选择数据
(query
ms
"SELECT n, d FROM racket.the_numbers WHERE n%2=0")
;;;把显示的数据以多行形式陈列
(query-rows
ms
"SELECT n,d FROM racket.the_numbers WHERE n%2=0")
;;;如果只有一行恢复,可以使用单行
(query-row
ms
"SELECT * FROM racket.the_numbers WHERE n=0")
;;;一类元素组成列表
(query-list
ms
"SELECT d FROM racket.the_numbers ORDER BY n")
;;;仅仅显示一个值
(query-value
ms
"SELECT count(*) FROM racket.the_numbers")
;;;当值不存在的时候返回 #f 否则返回值
(query-maybe-value
ms
"SELECT d FROM racket.the_numbers WHERE n=5")
;;;产生 序列 并用序列函数显示
(for (((n d) (in-query
ms
"SELECT * FROM racket.the_numbers WHERE n<4")))
(printf "~a: ~a\n" n d))
;;;序列求和
(for/fold ((sum 0))
((n (in-query
ms
"SELECT n FROM racket.the_numbers")))
(+ sum n))
;;;对错误做出反应
(begin (with-handlers ((exn:fail?
(lambda (e)
(printf "~a~n" (exn-message e)))))
(query-value
ms
"SELECT NoSuchField FROM NoSuchTable"))
(query-value
ms
"SELECT 'okay to proceed!'"))
;;;
(query-value
ms
"SELECT d FROM racket.the_numbers WHERE n=?" 2)
;;;
(query-list
ms
"SELECT n FROM racket.the_numbers WHERE n>? and n<?"
0 3)
;;;预定义一些操作,可以日后使用。当然可以直接定义字符串,不过这里大概还有安全性的考虑。
(define get-less-than-pst
(prepare
ms
"SELECT n FROM racket.the_numbers WHERE n<?"))
;;;使用预定义操作
(query-list
ms
get-less-than-pst 1)
;;;使用预定义操作
(query-list
ms
(bind-prepared-statement get-less-than-pst '(2)))
;;;另一种参数形式,避免了不同数据库参数符不同的问题
(query-rows
ms
(format
"SELECT * FROM racket.the_numbers
WHERE n<~a"
3))
;;;断开连接
(disconnect ms)
|#
2014年04月16日 06点04分 4
level 2
求问下Racket 从MySQL 查到Latin-1编码,咋转换为UTF-8呢,按照它的文档来搞不定,LZ搞定了告诉一声啊
2014年04月16日 12点04分 5
> (define b (bytes->string/latin-1 (bytes 254 211 209 165))) > (string->bytes/latin-1 b)#"\376\323\321\245" > (bytes->string/latin-1 (string->bytes/latin-1 b))"þÓÑ¥"
2014年04月17日 01点04分
bytes->string/latin-1 racketstring->bytes/latin-1 provided from racket/base; latin-1-codec provided from rnrs/io/ports-6 文档里查到的,具体怎么用,你自己试试吧
2014年04月17日 01点04分
level 7
其实我有点好奇,数据库这东西真的必要吗,在语言内置了丰富数据类型的前提下,直接操作数据结构不是更简单?
2014年05月09日 11点05分 6
1