2016-06-14 13 views
1

SparkとH2データベースとSql2oライブラリを使用してJava Mavenを使用してAPIを作成します。Java、Spark、Sql2o、H2:DataSourceからの接続を取得できませんでした - IO例外

これは、完全なエラーメッセージです:

Exceptionorg.sql2o.Sql2oException: データソースから接続を取得できませんでした - IO例外:「にjava.io.IOException:ファイル名、 ディレクトリ名、またはをボリュームラベルの構文が正しくありません "; "C:¥Users¥Claudiu/reviews.db:INIT = RUNSCRIPT from 'classpath:db/init.sql.mv.db" [90031-191] [qtp1133151800-16]エラーspark.webserver.MatcherFilter - ro.sparkmaven.exc.DaoException:ro.sparkmaven.dao.Sql2oCourseDao.add(Sql2oCourseDao.java:28)にコース を追加する際の問題 at ro.sparkmaven.App.lambda $ 0(App.java:37) at ro。 sparkmaven.App $$ラムダ$ 1/1607460018.handle(不明なソース)

これは、メインクラスです:

public class App 
{ 
    public static void main(String[] args) {   
     String connectionString= "jdbc:h2:~/reviews.db:INIT=RUNSCRIPT from 'classpath:db/init.sql";  
     Sql2o sql2o = new Sql2o(connectionString, "", ""); 
     CourseDao courseDao = new Sql2oCourseDao(sql2o); 
     Gson gson = new Gson(); 

     post("/courses", "application/json", (req, res) -> { 
      Course course = gson.fromJson(req.body(), Course.class); 
      courseDao.add(course); 
      res.status(201); 
      res.type("application/json"); 
      return null; 
     } , gson::toJson); 

     get("/courses", "application/json", (req, res) -> courseDao.findAll(), gson::toJson); 

     get("/courses/:id", "application/json", (req, res) -> { 
      int id; 
      id = Integer.parseInt(req.params("id")); 
      //TO DO: What if this not found 
      Course course = courseDao.findById(id); 

      return null; 
     }); 

     after((req,res)->{ 
      res.type("application/json"); 
     }); 
    } 
} 

これはinit.sqlです:事前に

CREATE TABLE IF NOT EXISTS courses (
    id int PRIMARY KEY auto_increment, 
    name VARCHAR, 
    url VARCHAR 
); 

CREATE TABLE IF NOT EXISTS reviews (
    id INTEGER PRIMARY KEY auto_increment, 
    course_id INTEGER, 
    rating INTEGER, 
    comment VARCHAR, 
    FOREIGN KEY(course_id) REFERENCES public.courses(id) 
); 

ありがとう!

答えて

0

例外メッセージに記載されているとおり、URLのフォーマットが正しくありません。 INITの前にコロンの代わりにセミコロンを使用してください。最後の'も欠落しています。試してください:

String connectionString = 
    "jdbc:h2:~/reviews.db;INIT=RUNSCRIPT from 'classpath:db/init.sql'"; 
+0

ありがとうございます!親切な卿:D –

関連する問題