Jdbc Clojure:将ragtime与sqlite3一起使用
我想用它来管理SQLite数据库上的迁移。根据,我在REPL中尝试了以下操作:Jdbc Clojure:将ragtime与sqlite3一起使用,jdbc,clojure,sqlite,Jdbc,Clojure,Sqlite,我想用它来管理SQLite数据库上的迁移。根据,我在REPL中尝试了以下操作: (require '[ragtime.jdbc :as jdbc] '[ragtime.repl :as repl]) (def config {:datastore (jdbc/sql-database {:connection-uri "jdbc:sqlite:resources/db.sqlite3"}) :migrations (jdbc/load-resource
(require '[ragtime.jdbc :as jdbc]
'[ragtime.repl :as repl])
(def config
{:datastore (jdbc/sql-database {:connection-uri "jdbc:sqlite:resources/db.sqlite3"})
:migrations (jdbc/load-resources "migrations")})
(repl/migrate config)
我得到的只是以下错误:
ClassCastException clojure.lang.PersistentVector cannot be cast to clojure.lang.Named clojure.core/name (core.clj:1546)
数据库文件存在于resources/db.sqlite3
中。我尝试过跟踪异常(如果需要,我可以添加堆栈跟踪),但它似乎发生在clojure.java.jdbc
的深处
由于我是JVM和JDBC的新手,我也不确定是否正确指定了:连接uri
;我试过几种变体,但似乎都不起作用
任何帮助都将不胜感激
编辑:堆栈跟踪:
java.lang.ClassCastException: clojure.lang.PersistentVector cannot be cast to clojure.lang.Named
at clojure.core$name.invokeStatic (core.clj:1546)
clojure.core$name.invoke (core.clj:1540)
clojure.java.jdbc$as_sql_name.invokeStatic (jdbc.clj:67)
clojure.java.jdbc$as_sql_name.invoke (jdbc.clj:56)
clojure.java.jdbc$create_table_ddl$spec_to_string__2511.invoke (jdbc.clj:1052)
clojure.core$map$fn__4785.invoke (core.clj:2646)
clojure.lang.LazySeq.sval (LazySeq.java:40)
clojure.lang.LazySeq.seq (LazySeq.java:49)
clojure.lang.LazySeq.first (LazySeq.java:71)
clojure.lang.RT.first (RT.java:667)
clojure.core$first__4339.invokeStatic (core.clj:55)
clojure.string$join.invokeStatic (string.clj:180)
clojure.string$join.invoke (string.clj:180)
clojure.java.jdbc$create_table_ddl.invokeStatic (jdbc.clj:1056)
clojure.java.jdbc$create_table_ddl.doInvoke (jdbc.clj:1041)
clojure.lang.RestFn.invoke (RestFn.java:423)
ragtime.jdbc$migrations_table_ddl.invokeStatic (jdbc.clj:16)
ragtime.jdbc$migrations_table_ddl.invoke (jdbc.clj:15)
ragtime.jdbc$ensure_migrations_table_exists.invokeStatic (jdbc.clj:22)
ragtime.jdbc$ensure_migrations_table_exists.invoke (jdbc.clj:20)
ragtime.jdbc.SqlDatabase.applied_migration_ids (jdbc.clj:42)
ragtime.core$migrate_all.invokeStatic (core.clj:43)
ragtime.core$migrate_all.invoke (core.clj:32)
ragtime.repl$migrate.invokeStatic (repl.clj:49)
ragtime.repl$migrate.invoke (repl.clj:34)
thulium.core$eval8407.invokeStatic (form-init2686611279014890656.clj:1)
(the rest is REPL and compiler calls)
以及两个迁移文件,resources/migrations/001 initial.up.sql
:
CREATE TABLE tests (
id INTEGER PRIMARY KEY AUTOINCREMENT
);
DROP TABLE tests;
和resources/migrations/001 initial.down.sql
:
CREATE TABLE tests (
id INTEGER PRIMARY KEY AUTOINCREMENT
);
DROP TABLE tests;
使用以下版本试一试:
[org.clojure/java.jdbc "0.6.1"]
[org.xerial/sqlite-jdbc "3.8.7"]
完整的堆栈跟踪可能有助于跟踪这一点。此外,您可能需要sqlite db的绝对路径。我还建议发布迁移文件的内容。为db提供绝对路径会产生完全相同的错误。