JDBCのSQLエスケープ構文とは?各キーワードの使い方を徹底解説
エスケープ構文を利用すると、標準のJDBCメソッドやプロパティだけでは実現できない、データベース固有の機能を柔軟に活用できます。
SQLエスケープ構文の一般的な形式は以下のとおりです。
{keyword 'parameters'}JDBCには、目的に応じて複数のエスケープ構文が用意されています。以下、それぞれのキーワードと使い方を詳しく見ていきましょう。
d・t・tsキーワード(日付・時刻・タイムスタンプ)
d、t、tsキーワードは、日付(date)、時刻(time)、タイムスタンプ(timestamp)のリテラルを識別するために使用します。ご存知のとおり、日付や時刻の表現方法はDBMSごとに異なります。このエスケープ構文を使うことで、ドライバーが対象データベースの形式に自動的に変換してくれます。
{d 'yyyy-mm-dd'}ここで、yyyyは年、mmは月、ddは日を表します。たとえば {d '2009-09-03'} は「2009年9月3日」を意味します。
使用例
// Statementオブジェクトを作成
stmt = conn.createStatement();
// データの挿入 ==> ID、名、姓、生年月日
String sql="INSERT INTO STUDENTS VALUES" + "(100,'Zara','Ali', {d '2001-12-16'})";
stmt.executeUpdate(sql);escapeキーワード(エスケープ文字の指定)
escapeキーワードは、LIKE句で使用するエスケープ文字を指定します。0個以上の任意の文字に一致するSQLワイルドカード「%」を、通常の文字として検索したい場合に特に便利です。
String sql = "SELECT symbol FROM MathSymbols WHERE symbol LIKE '\%' {escape '\'}";
stmt.execute(sql);バックスラッシュ(\)をエスケープ文字として使う場合は注意が必要です。バックスラッシュはJavaのエスケープ文字でもあるため、Javaの文字列リテラル内では「\\」と2つ続けて記述する必要があります。
fnキーワード(スカラー関数の呼び出し)
fnキーワードは、DBMSが提供するスカラー関数を表します。たとえば、SQL関数の length を使って文字列の長さを取得できます。
{fn length('Hello World')}この例では、文字列「Hello World」の長さである「11」が返されます。
callキーワード(ストアドプロシージャの呼び出し)
callキーワードは、ストアドプロシージャを呼び出す際に使用します。
INパラメータを受け取るストアドプロシージャの場合は、次の構文を使います。
{call my_procedure(?)};INパラメータを受け取り、OUTパラメータを返すストアドプロシージャの場合は、次の構文を使います。
{? = call my_procedure(?)};ojキーワード(外部結合の指定)
ojキーワードは、外部結合(アウタージョイン)を明示するために使用します。構文は以下のとおりです。
{oj outer-join}ここで、outer-joinは「table {LEFT|RIGHT|FULL} OUTER JOIN {table | outer-join} ON 検索条件」の形式で記述します。
String sql = "SELECT Employees FROM {oj ThisTable RIGHT OUTER JOIN ThatTable on id = '100'}";
stmt.execute(sql);これらのエスケープ構文を活用することで、JDBC標準のAPIだけでは対応しづらいデータベース固有の機能にも、移植性を保ちながらアクセスできるようになります。用途に応じて適切なキーワードを選択し、効率的なデータベース操作を実現しましょう。
-
MySQL JDBCドライバーの接続文字列とは?書き方と使い方を解説
MySQL JDBCドライバーの接続文字列とはJavaからMySQLデータベースへ接続する際に必要となるのが「JDBC接続文字列」です。まず、MySQLのJDBCドライバーを読み込むためのコードは以下のようになります。Class.forName(com.mysql.jdbc.Driver);ここで指定している Driver はインターフェースであり、このクラスをロードすることでMySQL用のJDBCドライバーが利用可能になります。なお、新しいMySQL Connector/J(バージョン8.0以降)では、ドライバークラス名が com.mysql.cj.jdbc.Driver に変更されている点
-
JDBCでMySQLのバックスラッシュをエスケープするには?PreparedStatementの使い方を解説
PreparedStatementでバックスラッシュを安全にエスケープするMySQLにデータを挿入する際、バックスラッシュ(\)などの特殊文字を安全に扱うには、PreparedStatementを使用するのが最も確実な方法です。PreparedStatementはパラメータを自動的にエスケープしてくれるため、手動で「\\」のように置き換える必要がなく、SQLインジェクション対策としても有効です。まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable1904 ( ClientId int, ClientName var