プログラムからDBを使う方法
アプリケーションがDBへアクセスするには、言語や実行環境に応じた接続インターフェースを使います。ここでは代表方式を実務観点で整理します。
全体像
| 方式 | 主な利用環境 | 位置づけ |
|---|---|---|
| ODBC | C/C++、各種ツール | 汎用的な標準接続API |
| JDBC | Java | Java標準のDB接続API |
| OLE DB | Windows COM系 | Microsoft系データアクセス技術 |
| ADO.NET | .NET (C# など) | .NET標準のデータアクセス層 |
| ORM | 各言語 | オブジェクト中心でDBを扱う抽象化層 |
ODBC
ODBC(Open Database Connectivity)は、異なるDB製品へ共通APIで接続するための標準です。 質問にある「ODB」は通常 ODBC を指すケースが多いです。
- 長所: DB製品差を吸収しやすい
- 注意: ドライバ設定や配布運用が必要
JDBC
JDBC(Java Database Connectivity)は Java の標準DB接続APIです。Java業務システムでは事実上の標準です。
Connection conn = DriverManager.getConnection(url, user, pass);
PreparedStatement ps = conn.prepareStatement("SELECT * FROM 顧客 WHERE 顧客ID = ?");
ps.setLong(1, 1001L);
ResultSet rs = ps.executeQuery();
- 長所: エコシステム豊富(接続プール、ORM、監視)
- 注意: SQLインジェクション対策として PreparedStatement を基本にする
OLE DB
OLE DB は COM ベースのデータアクセス技術で、Windows環境で使われてきました。現在の新規開発では ODBC や ADO.NET に寄せることが多いです。
ADO.NET
.NET の標準データアクセス方式です。Provider(SqlClient, Npgsql, MySqlConnector など)経由でDBへ接続します。
- 長所: .NET標準で安定、トランザクション制御もしやすい
- 注意: Providerごとの差分を把握する必要がある
ORM / クエリビルダ
ORM はテーブルをオブジェクトとして扱えるようにする層です。
| カテゴリ | 代表例 | 用途 |
|---|---|---|
| Java ORM | JPA / Hibernate, MyBatis | 業務アプリの永続化 |
| .NET ORM | Entity Framework Core, Dapper | .NET業務アプリ |
| Node/Python等 | Prisma, SQLAlchemy, TypeORM | Webバックエンド開発 |
便利ですが、複雑SQLや性能問題時は生SQLと使い分けるのが実務的です。
その他の接続方式
- ネイティブドライバ: DBベンダー提供ライブラリ
- REST/HTTP API型: マネージドDBや検索基盤で採用される場合がある
- データ連携ツール: ETL/ELTでバッチ連携
選び方
- 言語標準(JavaならJDBC、.NETならADO.NET)を第一候補にする
- 生産性向上が必要ならORMを併用する
- 性能要件が厳しい処理は生SQLへ切り替える
- 接続プール、タイムアウト、リトライ、監視を最初から設計に入れる
接続方式の選定は「宗教」ではなく要件判断です。標準API + ORM + 生SQLの使い分けが現実解になりやすいです。