Question

J'ai rencontré quelques problèmes lors de la configuration de Slick 2.0.2.Toute configuration que je fais au cours d'une session est perdue lors de la suivante.Par exemple, lors de la première session, je crée le tableau et j'ajoute trois personnes :

// H2 in-memory database
lazy val db = Database.forURL("jdbc:h2:mem:contacts", driver="org.h2.Driver")

// Contacts table
lazy val contacts = TableQuery[ContactsSchema]

// Initial session
db withSession { implicit session =>
  contacts.ddl.create

  // Inserts sample data
  contacts += Person("John", "123 Main street", 29)
  contacts += Person("Greg", "Neither here nor there", 40)
  contacts += Person("Michael", "Continental U.S.", 34)

  // Successfully retrieves data
  contacts foreach { person =>
    println(person)
  }
}

Tout va bien jusqu’à présent.La sortie répète les trois personnes que j'ai ajoutées.Lorsque je démarre une nouvelle session, je commence à rencontrer des problèmes.

// New session in which the previous data is lost
db withSession { implicit session =>
  contacts foreach { person =>
    println(person)
  }
}

Le bloc ci-dessus crée un org.h2.jdbc.JdbcSQLException: Table "CONTACTS" not found exception.Si je modifie comme suit

db withSession { implicit session =>
  contacts.ddl.create
  contacts foreach { person =>
    println(person)
  }
}

alors toutes les données sont effacées.

Je vois que le Guide Scalatra pour Slick utilise une configuration similaire à la mienne.Qu'est-ce que je fais mal?Comment dois-je faire en sorte que les données persistent entre les sessions ?Le fait que j'utilise une base de données en mémoire a-t-il quelque chose à voir avec cela ?

Était-ce utile?

La solution

Deux choix.

Soit créez une session et gardez-la ouverte.Cela peut être fait avec une portée withSession inférieure sur la pile d'appels ou db.createSession.

Ou ajouter ;DB_CLOSE_DELAY=-1 à l'URL de la base de données.Cela maintient la base de données en vie tant que la machine virtuelle s'exécute.

Voir http://www.h2database.com/html/features.html#in_memory_databases

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top