Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jdbc Clojure:将ragtime与sqlite3一起使用_Jdbc_Clojure_Sqlite - Fatal编程技术网

Jdbc Clojure:将ragtime与sqlite3一起使用

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

我想用它来管理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-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提供绝对路径会产生完全相同的错误。