この記事はJetBrainsIDE Advent Calendarの2日目の記事になりました。
TL;DR
JetBrains IDEはデータベース開発においてもとても便利だったので(ただしUltimateに限る)、ideaを使ったデータベース開発の流れをまとめます。
具体的には、データソースに接続し、クエリを実行する所までを解説します。おまけでDAO開発でも補完を使う方法に触れます。
データベースやテーブルは存在し、SQLを使う前提で話を進めます。
どの辺が便利?
コードだけでなく、テーブル・DB名にも補完が効いたり、複数のDBを切り替えながら開発したり、データベースツールウィンドウを見ながら直観的に開発できるのが便利です。
後、JetBrains IDE全般に言えることですが、これらの機能をプラットフォーム関係なく利用できるのが本当に素晴らしいです。
データソース/データベースへの接続環境を整える
データソースに接続する
View > Tool Windows > Database、もしくは右サイドバーのDatabaseタブを選択し、データベースツールウィンドウを表示します。
データベースツールウィンドウから左上の+を選び、接続するデータソースを選択します。今回はMySqlを選択します。
選択すると以下ようなの設定画面が出るので、適切な情報を設定し、Test Connectionが成功すればデータソースへの接続は完了です。
ここでDatabaseを設定してあると、クエリ実行時に設定したDatabaseがデフォルトでuseされます。
状況に応じてRead-onlyを設定しておくと、データベースに変更を加えたくない時に便利です。
この設定はデータベースツールウィンドウの設定ボタンからいつでも変更できます。
スキーマを選ぶ
データソースへ接続した後は、使用するdatabaseを設定します。
接続が成功すると、先ほどの設定画面のSchemasタブにデータソースに存在するdatabaseが一覧で表示されるので、利用するものを選択します。
ここで選択したDBは、SQLの外部キーをDBを跨いで貼る際の補完や、データベースツールウィンドウへの一覧表示で利用されます。
接続後
接続が完了すると以下のようになります(画像ではデータソースを2つ設定してあります)。右側に出ている「2 of 12」やらの数字はスキーマ内のDB数と先ほど選択したDB数です。
クエリを実行する
Diarectを設定する
SQLにはDialect(方言)が多々あるため、IDEに適切なDialectを設定しなければハイライトや補完がうまく機能しません。
ということで、Diarectを先に設定しておくことをお勧めします。
この設定については自分が書いた記事があるので、そちらを参照してください。
クエリを実行する
とりあえずtesttesttest.sql
というファイルを作り、以下のようなクエリを書いてみます。
CREATE TABLE testtesttest(
id INT UNSIGNED NOT NULL PRIMARY KEY,
name VARCHAR(255) NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
実行は⌘⏎
でできます。
1ファイル内に複数のクエリがある場合は、カーソルの有る部分のクエリを実行するのか、ファイル内のクエリ全体を実行するのかを聞かれます。
データソース/データベースが複数ある場合
データソースが複数ある場合、どのデータソースのコンソールで実行するかを聞かれます。
また、実行するデータソース/データベースは先に設定されているものが使われるので、コンソールの状態は先に確認しておいた方が安全です。
この設定は左側のプロジェクトツールウィンドウの下の方にあるDatabase Consolesからコンソールファイルを開くことで見ることができます。
コンソールでどのdatabaseがuseされているかは、コンソールファイルの右上から確認できます。ここを押すことで設定することもできます。
何も設定されていない場合<schema>と表示されます。
一度クエリを実行してやると、.sqlファイルの右上にも同じようなメニューが表示されるようになります。<schema>の右側に表示されているのはどのコンソールが選択されているかで、こちらも変更が可能です。
DAOでも補完を使う
他言語からDBへアクセスするためにクエリを書くという状況でもJetBrains IDEは便利です。
この記事の中のデータソースとDiarectの設定をし、言語インジェクションを使うことでSQLを補完してもらうことができます。
言語インジェクション関連は公式の解説ページが詳しいです。
終わりに
記事は以上です。JetBrains IDEは神器。