Добавление таблиц в базу данных SQLite с помощью Slick и Scala

Итак, у меня есть база данных SQLite, использующая Slick, и я хочу добавлять и удалять из нее таблицы. Вот что у меня есть сейчас:

Вот класс элемента базы данных:

class Data(tag: Tag)
  extends Table[(Int, String)](tag, "myDB") {
  // This is the primary key column:
  def id = column[Int]("ID", O.PrimaryKey)
  def name = column[String]("NAME")
  // Every table needs a * projection with the same type as the table's type parameter
  def * : ProvenShape[(Int, String)] = (id, name)
}

Мне нужно иметь возможность создавать несколько таблиц, используя класс выше. Что-то вроде этого:

def addTable(name:String){
  db withSession { implicit session =>
    val newTable = TableQuery[Data]
    newTable.ddl.create
  }
}

Проблема в том, что я не могу создать новую таблицу, потому что она уже существует с именем «myDB». Я попытался добавить параметр для имени таблицы в данные класса следующим образом:

class Data(tag: Tag,tableName:String)

Но тогда я вообще не смог создать таблицу и получил ошибку

unspecified value parameter tableName

И как я могу запросить конкретную таблицу из базы данных по имени таблицы? Я попытался реализовать это, используя карту с именем таблицы, указывающим на таблицу, но это не работает, потому что карта нигде не сохраняется и сбрасывается каждый раз при запуске программы.

Это то, что у меня было для запроса таблицы:

def getDataFromTable(tableName:String)
{
  var res = ""
  db withSession { implicit session =>
    tables(tableName) foreach{
      case (id,name)=>
        res += id + " " + name + " "
    }
  }
  res
}

Любая помощь приветствуется!

Спасибо!


person Ou Tsei    schedule 08.01.2015    source источник


Ответы (1)


Определение

class Data(tag: Tag, tableName: String)
  extends Table[(Int, String)](tag, tableName){

...

использование

(new TableQuery(Data(_,"table_1"))).ddl.create
(new TableQuery(Data(_,"table_2"))).ddl.create
...
person cvogt    schedule 08.01.2015