LoginSignup
6
1

More than 5 years have passed since last update.

H2DBで Table not found になって困ってたら大文字小文字の違いが原因だった⇒DATABASE_TO_UPPER=false を指定して解決

Posted at

掲題で嵌ったので、取り急ぎ記録しておきます。

本番は mysql ですが、DBにアクセスするコードのテストは H2DB(in memory) を使用して書いています。

以下では、本番の mysql には sakanasakana テーブルが存在するとします。

テスト用の H2DB のセットアップは、 URL に INIT=RUNSCRIPT FROM 'schema.sql' として初期化処理を shema.sql に記述します。schema.sql ではテーブルの作成とテストデータの読み込みを行います。

schema.sql
DROP TABLE IF EXISTS sakanasakana;
CREATE TABLE `sakanasakana` (
  `sakana` varchar(10) NOT NULL,
  `atama` varchar(10) NOT NULL,
  `yokunaru` double DEFAULT NULL
);

insert into sakanasakana select * from csvread('resources/sakanasakana .csv');

Query は slick 記法に則ります。そのため、Table を定義します。

Tables.scala(一部です)
  class SakanasakanaTable(tag: Tag) extends Table[Sakanasakana] (tag, "sakanasakana") {
    def sakana          = column[String]("sakana")

こうして sakanasakana テーブルを参照するテストコードを書くと、Table not found になります。上記の (tag, "sakanasakana") を (tag, "SAKANASAKANA") というように大文字に変更するとテーブルを参照できるようになりますが、本番の mysql のテーブル名と異なるので、本番でエラーになってしまいます。

解決策ですが、
H2DB の URL に DATABASE_TO_UPPER=false; を追加したところ、参照できました。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1