Javaで受信したLDAPデータをOracleDBに登録する方法

受信したLDAP情報をOracleデータベースに格納するには、以下の手順に従います。まず、LDAPから情報を取得し、それをOracleデータベースに挿入します。

`手順`
**①必要なライブラリを追加する**:
- JNDIライブラリ（Java SEに標準で含まれています）。
- JDBCドライバ（Oracle用のJDBCドライバを追加する必要があります）。

**②Oracleデータベースに接続する**:
- JDBCを使用してデータベースに接続します。

**③LDAPから情報を取得する**:
- 前述の通り、JNDIを使用してLDAPから情報を取得します。

**④取得した情報をOracleデータベースに挿入する**:
- JDBCを使用してデータベースに情報を挿入します。

`コード例`
以下に、LDAPから取得した情報をOracleデータベースに格納するためのJavaコード例を示します。

```ruby:Java

import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.directory.Attributes;
import javax.naming.directory.Attribute;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Hashtable;

public class LDAPToOracle {
    public static void main(String[] args) {
        /* LDAPサーバの接続情報を設定 */
        String ldapUrl = "ldap://localhost:389";
        String baseDn = "dc=example,dc=com";
        String userDn = "cn=admin,dc=example,dc=com";
        String password = "password";

        /* Oracleデータベースの接続情報を設定 */
        String dbUrl = "jdbc:oracle:thin:@localhost:1521:orcl";
        String dbUser = "dbuser";
        String dbPassword = "dbpassword";

        /* LDAP接続プロパティを設定 */
        Hashtable<String, String> env = new Hashtable<>();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, ldapUrl);
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, userDn);
        env.put(Context.SECURITY_CREDENTIALS, password);

        Connection conn = null;
        PreparedStatement pstmt = null;

        try {
            /* LDAP接続を確立 */
            DirContext ctx = new InitialDirContext(env);

            /* 検索クエリと検索コントロールを設定 */
            String searchFilter = "(objectClass=inetOrgPerson)";
            SearchControls searchControls = new SearchControls();
            searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);

            /* 検索を実行 */
            NamingEnumeration<SearchResult> results = ctx.search(baseDn, searchFilter, searchControls);

            /* Oracleデータベースに接続 */
            conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
            String sql = "INSERT INTO users (cn, email) VALUES (?, ?)";
            pstmt = conn.prepareStatement(sql);

            /* 結果を処理してデータベースに挿入 */
            while (results.hasMore()) {
                SearchResult searchResult = results.next();
                Attributes attributes = searchResult.getAttributes();

                String cn = null;
                String email = null;

                Attribute attr = attributes.get("cn");
                if (attr != null) {
                    cn = (String) attr.get();
                }

                attr = attributes.get("mail");
                if (attr != null) {
                    email = (String) attr.get();
                }

                if (cn != null && email != null) {
                    pstmt.setString(1, cn);
                    pstmt.setString(2, email);
                    pstmt.executeUpdate();
                }
            }

            /* 接続をクローズ */
            ctx.close();
            pstmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (pstmt != null) pstmt.close();
                if (conn != null) conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
```
`説明`
**①LDAP接続**:
- 前述のLDAP接続の設定と同様に行います。

**②Oracleデータベース接続**:
- DriverManager.getConnectionを使用してOracleデータベースに接続します。
- PreparedStatementを使用してSQL挿入文を準備します。

**③データ挿入**:
- 取得したLDAP情報（CNとEmail）をOracleデータベースのusersテーブルに挿入します。
- pstmt.setStringメソッドでSQLクエリのプレースホルダに値を設定し、pstmt.executeUpdateメソッドでデータベースに挿入します。

このコードを実行すると、LDAPサーバから取得したユーザーのCNとEmailがOracleデータベースのusersテーブルに格納されます。自分の環境に合わせて、LDAPサーバのURL、DN、パスワード、およびデータベースの接続情報を変更してください。