;; jdbc/connect-auth only for conveniance
(define (jdbc/connect-auth jdbc-datasource user pass)
(get-connection (java-null <java.sql.driver-manager>) (->jstring jdbc-datasource) (->jstring user) (->jstring pass)))
#;> (let* ((conn (jdbc/connect-auth "jdbc:postgresql:traffic_nrw_0_3_0" "olsim" ""))
(stmt (jdbc/prepare-statement conn
"select * from vrz_verfuegbarkeit(NULL)"
'(|Statement.NO_GENERATED_KEYS|)))
(res (jdbc/execute-query stmt)))
(jdbc/close conn)
res)
Error: attempt to apply non-procedure '#<java java.lang.Class java.sq...'.
---------------------------
file:/home/johannes/sisc/contrib/pure-scheme/jdbc.scm:91:28: <indeterminate call>
---------------------------
console:82:88: <from call to @jdbc::jdbc/prepare-statement>
#;> (let* ((conn (jdbc/connect-auth "jdbc:postgresql:traffic_nrw_0_3_0" "olsim" ""))
(stmt (jdbc/prepare-statement conn
"select * from vrz_verfuegbarkeit(NULL)"))
(res (jdbc/execute-query stmt)))
(jdbc/close conn) res)
Error in cdr: expected type pair, got '#f'.
---------------------------
file:/home/johannes/sisc/contrib/pure-scheme/jdbc.scm:63:32: <from call to cdr>
---------------------------
file:/home/johannes/sisc/contrib/pure-scheme/jdbc.scm:62:25: <from call to map>
---------------------------
console:83:165: <from call to @jdbc::jdbc/execute-query>
#;> (load "/home/johannes/sisc/contrib/pure-scheme/streams.scm")
#;> (load "/home/johannes/sisc/contrib/pure-scheme/jdbc.scm")
#;> (import jdbc)
#;> (let* ((conn (jdbc/connect-auth "jdbc:postgresql:traffic_nrw_0_3_0" "olsim" ""))
(stmt (jdbc/prepare-statement conn
"select * from vrz_verfuegbarkeit(NULL)"
(list (access-constant java-class '|Statement.NO_GENERATED_KEYS|))))
(res (jdbc/execute-query stmt)))
(jdbc/close conn) res)
Error in java/null: expected type java class, got '#<procedure |@s2j::java-class|...'.
---------------------------
file:/home/johannes/sisc/contrib/pure-scheme/jdbc.scm:45:42: <from call to @s2j::java-null>
---------------------------
console:109:164: <from call to @jdbc::access-constant>
#;> (let* ((conn (jdbc/connect-auth "jdbc:postgresql:traffic_nrw_0_3_0" "olsim" ""))
(stmt (jdbc/prepare-statement conn
"select * from vrz_verfuegbarkeit(NULL)"))
(res (jdbc/execute-query stmt)))
(jdbc/close conn) res)
Error in cdr: expected type pair, got '#f'.
---------------------------
file:/home/johannes/sisc/contrib/pure-scheme/jdbc.scm:63:32: <from call to cdr>
---------------------------
file:/home/johannes/sisc/contrib/pure-scheme/jdbc.scm:62:25: <from call to map>
---------------------------
console:114:165: <from call to @jdbc::jdbc/execute-query>
;; even changing the jdbc/prepare-statement into
;; the following doesn't change situation
(define (jdbc/prepare-statement connection query . updatable)
(if (and (not (null? updatable)) (car updatable))
(prepare-statement connection (->jstring query)
(access-constant <java.sql.result-set> '|TYPE_FORWARD_ONLY|)
(access-constant <java.sql.result-set> '|CONCUR_UPDATABLE|))
(prepare-statement connection (->jstring query))))
Logged In: YES
user_id=722618
Originator: NO
Parts of this bug report are bogus, however the real bug in jdbc.scm is described in the last paragraph... ACCESS-CONSTANT was missing from the first arm of the if statement in jdbc/prepare-statement
Logged In: NO
;;; ok that works for me[tm]:
(define (jdbc/prepare-statement connection query . updatable)
(if (and (not (null? updatable)) (car updatable))
(prepare-statement connection (->jstring query)
(access-constant <java.sql.result-set> '|TYPE_FORWARD_ONLY|)
(access-constant <java.sql.result-set> '|CONCUR_UPDATABLE|))
(prepare-statement connection (->jstring query))))
;; add an entry for '|SMALLINT|
(set! type-conversions
`((,(->number (access-constant <java.sql.Types> '|SMALLINT|)) . (,get-int . ,->number))
(,(->number (access-constant <java.sql.Types> '|INTEGER|)) . (,get-int . ,->number))
(,(->number (access-constant <java.sql.Types> '|FLOAT|)) . (,get-float . ,->number))
(,(->number (access-constant <java.sql.Types> '|DOUBLE|)) . (,get-double . ,->number))
(,(->number (access-constant <java.sql.Types> '|DECIMAL|)) . (,get-double . ,->number))
(,(->number (access-constant <java.sql.Types> '|NUMERIC|)) . (,get-double . ,->number))
(,(->number (access-constant <java.sql.Types> '|REAL|)) . (,get-float . ,->number))
(,(->number (access-constant <java.sql.Types> '|VARCHAR|)) . (,get-string . ,->string))
(,(->number (access-constant <java.sql.Types> '|CHAR|)) . (,get-string . ,->string))))