俗に言うLanguage Injectionを使う。
例えば、以下のようなMySQLのクエリを文字列として定義したとする。
String sql = "INSERT INTO entry (id, title) VALUES (1, 'title1') ON DUPLICATE KEY UPDATE title=VALUES(title)";
文字列にカーソルを合わせてShow Intention Action(Alt+Enter)を実行して、以下の順に選択する。
- Inject language or reference
- MySQL
この時点で文字列がSyntax Highlightされるが、これだけだと下記のような警告が発生する。
No data sources configure to run this SQL and provide advance code assistance.
ローカルにMySQLは立っている前提として、データソースを設定すれば良い。
View > Tool Windows > Database を開き、+(追加)を押して、以下の順に選択する。
- Data Source
- MySQL
すると、MySQLのData Source追加画面が開かれるので、MySQLのユーザ名やパスワード、URLを入力して、Driverをダウンロードしたりすると設定が完了する。試しにTest Connectionをクリックすると、ちゃんとMySQLに接続できてるか確認できる。
Data Sourceの設定はできたけど、エディタ上ではまだ警告が出ている。
Unable to resolve table 'entry'
SQL文字列内のテーブルやカラムが見つからないとのことなんだけど、MySQL側にテーブルが定義されててもこの警告は出続ける。この原因は、Data Sourceの設定が足りてないから。どのデータベース(MySQL内部のCreate Databaseで作られるデータベースのこと)を見れば良いか指定してやる必要がある。
先ほど作成したData SourceのPropertiesを開いて、以下の順に実施する。
- Schemasタブを選択
- 該当のデータベースをチェックする
- OKボタンを押す
エディタ上のSQL文字列を見ると、警告は表示されなくなった。めでたしめでたし。