how to use sqlite3 added by eesslan on Tue Mar 18 15:58:07 2014
(use sqlite3) (define (read-csv fn port #!key (delim ",") (skip 0) (n #f)) ;; skip first 'skip' lines (let loop ((i skip)) (unless (zero? i) (read-line port) (loop (sub1 i)))) (let ((splitter (lambda (x) (string-split x delim #t)))) (if n ;; read at most n lines after 'skip' lines (let loop ((line (read-line port)) (n n)) (unless (or (zero? n) (eof-object? line)) (fn (splitter line)) (loop (read-line port) (sub1 n)))) (let loop ((line (read-line port))) (unless (eof-object? line) (fn (splitter line)) (loop (read-line port))))))) (let ((db (open-database "sample.db"))) (call-with-input-file "bookvalue.csv" (lambda (iport) (dynamic-wind (lambda () #f) (lambda () (with-transaction db (lambda () (execute db "drop table if exists bookvalue") (execute db "create table bookvalue (date int, firm text, bookval real)") (let ((istmt (prepare db (format "insert into bookvalue values (?,?,?)")))) ;; insert all rows to a table named 'bookvalue' (read-csv (lambda (line) (apply execute istmt line)) iport skip: 1)) ;; print 10 rows (for-each-row (lambda (d f v) (print (list d f v))) db "select * from bookvalue limit 10")))) (lambda () (finalize! db #t))))))