SQLJ
SQLJ(えすきゅーえるじぇい)は、コンピュータのJavaのプログラムにSQL文を埋め込む方法(埋め込みSQL)を定めたISO標�…
SQLJ(えすきゅーえるじぇい)は、コンピュータのJavaのプログラムにSQL文を埋め込む方法(埋め込みSQL)を定めたISO標準 (ISO/IEC 9075-10) である。
APIであるJDBCとは異なり、SQLJはプログラミング言語Javaを拡張したものである。そのため、SQLJプログラムを実行するためには、プログラムをコンパイルする前にプリプロセッサ(SQLJトランスレータ)で変換しなければならない。
SQLJがJDBCより優れている点は、次のとおりである。
- SQLJプログラムは、JDBCを使ったJavaプログラムより短くなることが多い。
- プリプロセス時にSQLの文法をチェックできる。
逆に劣っている点は、次のとおりである。
- プリプロセスが必要である。
- SQLJをサポートしている統合開発環境 (IDE) が少ない。
- Hibernateのような永続化フレームワーク (オブジェクトリレーショナルマッピング) でSQLJがサポートされていない。
例
以下の例では、SQLJの文法とJDBCの用法を対比させる。
| JDBC | SQLJ |
|---|---|
PreparedStatement statement = conn.prepareStatement(
"SELECT LASTNAME"
+ " , FIRSTNME"
+ " , SALARY"
+ " FROM DSN8710.EMP"
+ " WHERE SALARY BETWEEN ? AND ?");
statement.setBigDecimal(1, min);
statement.setBigDecimal(2, max);
ResultSet rs = statement.executeQuery();
while (rs.next()) {
var lastname = rs.getString(1);
var firstname = rs.getString(2);
var salary = rs.getBigDecimal(3);
// 行を表示させる...
}
rs.close();
statement.close();
|
#sql private static iterator EmployeeIterator(String, String, BigDecimal);
...
EmployeeIterator iter;
#sql [ctx] iter = {
SELECT LASTNAME
, FIRSTNME
, SALARY
FROM DSN8710.EMP
WHERE SALARY BETWEEN :min AND :max
};
do {
#sql {
FETCH :iter
INTO :lastname, :firstname, :salary
};
// 行を表示させる...
} while (!iter.endFetch());
iter.close();
|
| JDBC | SQLJ |
|---|---|
PreparedStatement statement = conn.prepareStatement(
"SELECT MAX(SALARY), AVG(SALARY)"
+ " FROM DSN8710.EMP");
var rs = statement.executeQuery();
if (!rs.next()) {
// エラー -- 該当行なし
}
var maxSalary = rs.getBigDecimal(1);
var avgSalary = rs.getBigDecimal(2);
// 行を表示させる...
if (rs.next()) {
// エラー -- 複数行が存在
}
rs.close();
statement.close();
|
#sql [ctx] {
SELECT MAX(SALARY), AVG(SALARY)
INTO :maxSalary, :avgSalary
FROM DSN8710.EMP
};
|
| JDBC | SQLJ |
|---|---|
var statement = conn.prepareStatement(
"INSERT INTO DSN8710.EMP "
+ "(EMPNO, FIRSTNME, MIDINIT, LASTNAME, HIREDATE, SALARY) "
+ "VALUES (?, ?, ?, ?, CURRENT DATE, ?)");
statement.setString(1, empno);
statement.setString(2, firstname);
statement.setString(3, midinit);
statement.setString(4, lastname);
statement.setBigDecimal(5, salary);
statement.executeUpdate();
statement.close();
|
#sql [ctx] {
INSERT INTO DSN8710.EMP
(EMPNO, FIRSTNME, MIDINIT, LASTNAME, HIREDATE, SALARY)
VALUES
(:empno, :firstname, :midinit, :lastname, CURRENT DATE, :salary)
};
|
外部リンク
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.