こんにちは。デジタルイノベーション推進室の戦闘員Oです。最近は開発にAmazon Q Developerを取り入れている方も多いと思います。そんな中、以下の記事を見つけましたので実際にやってみようと思います。

Amazon Q Developer で組み込み SQL を Oracle から PostgreSQL に変換可能に

VSCodeを利用して、Amazon Q Developerの環境づくり、サンプルのJavaファイル内にあるOracle用SQLソースコードをPostgreSQL用に変換してみます。

目次

  1. VSCodeにAmazon Qのアドオンをインストール
  2. AWS Builder ID(無料)を作成しVSCodeにアクセス許可
  3. Amazon Q DeveloperにサンプルのJavaファイルを変換してもらう
  4. さいごに

1.VSCodeにAmazonQのアドオンをインストール

では、さっそくVSCodeを開いて、ExtentionからAmazon Qのアドオンをインストールしましょう。

 

ポップアップが表示されますが、“Trust Publisher & install”を押下いただくとインストールされます。

2. AWS Builder ID(無料)を作成しVSCodeにアクセス許可

VSCodeの左にAmazon Qのマークが出てきますので使えるようにしましょう。“Personal account”をクリックし、無料版で始めます。

AWS BuilderのWebサイトを開くため下記ポップアップは”Open”を押してください。

AWS Builder IDが無い方は新規に作成してください。

そのままログインいただき、下記のアクセス許可をしてください。

アクセス許可されると以下の画面が表示されます。

VSCode側にチャット欄が表示されます。念のため日本語ができるか聞いてみました。日本語対応されているようでありがたいです。

3. Amazon QにサンプルのJavaファイルを変換してもらう

では、本題のJavaソースコードに記載されているOracle専用SQLをPostgreSQL用に変換してみましょう。

変換前ソースコード” OracleJDBCDemo.java” 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class OracleJDBCDemo {
  // JDBC接続用の情報
  private static final String DB_URL = "jdbc:oracle:thin:@localhost:1521:xe"; // データベースURL
  private static final String USER = "your_username"; // ユーザー名
  private static final String PASS = "your_password"; // パスワード
 
  public static void main(String[] args) {
    Connection connection = null;
 
    try {
    // JDBCドライバのロード
    Class.forName("oracle.jdbc.driver.OracleDriver");
 
    // データベースに接続
    connection = DriverManager.getConnection(DB_URL, USER, PASS);
 
    // テーブルの作成
    createTable(connection);
 
    // データの挿入
    insertData(connection, 1, "Alice");
    insertData(connection, 2, "Bob");
 
    // データの取得
    fetchData(connection);
 
    } catch (SQLException | ClassNotFoundException e) {
      e.printStackTrace();
    } finally {
      // リソースのクリーンアップ
      try {
        if (connection != null) {
          connection.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }
 
  private static void createTable(Connection connection) throws SQLException {
    String createTableSQL = "CREATE TABLE persons (" +
    "id NUMBER PRIMARY KEY, " +
    "name VARCHAR2(50)" +
    ")";
    Statement stmt = connection.createStatement();
    stmt.execute(createTableSQL);
    System.out.println("Table created successfully.");
  }
 
  private static void insertData(Connection connection, int id, String name) throws SQLException {
    String insertSQL = "INSERT INTO persons (id, name) VALUES (?, ?)";
    PreparedStatement pstmt = connection.prepareStatement(insertSQL);
    pstmt.setInt(1, id);
    pstmt.setString(2, name);
    pstmt.executeUpdate();
    System.out.println("Data inserted successfully: " + name);
  }
 
  private static void fetchData(Connection connection) throws SQLException {
    String selectSQL = "SELECT * FROM persons";
    Statement stmt = connection.createStatement();
    ResultSet rs = stmt.executeQuery(selectSQL);
 
    System.out.println("Fetching data from the table:");
    while (rs.next()) {
      int id = rs.getInt("id");
      String name = rs.getString("name");
      System.out.println("ID: " + id + ", Name: " + name);
    }
  }
}

チャット欄に「@OracleJDBCDemo.java をPostgreSQL用に変更してください」と入力します。"@ファイル名"でファイルを指定できます。

Amazon Q Developerが変換してくれました。変換概要もチャット欄に表示してくれます。

チャット欄の回答

OracleのJDBCコードをPostgreSQL用に変更しました。主な変更点:

 

・クラス名:  OracleJDBCDemo  →  PostgreSQLJDBCDemo

 

・JDBC URL:  jdbc:oracle:thin:@localhost:1521:xe  → jdbc:postgresql://localhost:5432/your_database

 

・ドライバクラス:  oracle.jdbc.driver.OracleDriver  →  org.postgresql.Driver

 

・データ型:  NUMBER  →  SERIAL 、 VARCHAR2(50)  →  VARCHAR(50)

 

PostgreSQLを使用する際は、PostgreSQL JDBCドライバ(postgresql-xx.x.jar)をクラスパスに追加する必要があります。

親切な解説と供にコードを変換してくれました。

変換後ソースコード” OracleJDBCDemo.java”

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class PostgreSQLJDBCDemo {
  // JDBC接続用の情報
  private static final String DB_URL = "jdbc:postgresql://localhost:5432/your_database"; // データベースURL
  private static final String USER = "your_username"; // ユーザー名
  private static final String PASS = "your_password"; // パスワード
 
  public static void main(String[] args) {
    Connection connection = null;
 
    try {
      // JDBCドライバのロード
      Class.forName("org.postgresql.Driver");
 
      // データベースに接続
      connection = DriverManager.getConnection(DB_URL, USER, PASS);
 
      // テーブルの作成
      createTable(connection);
 
      // データの挿入
      insertData(connection, 1, "Alice");
      insertData(connection, 2, "Bob");
 
     // データの取得
     fetchData(connection);
 
    } catch (SQLException | ClassNotFoundException e) {
      e.printStackTrace();
    } finally {
      // リソースのクリーンアップ
      try {
        if (connection != null) {
          connection.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }
 
  private static void createTable(Connection connection) throws SQLException {
    String createTableSQL = "CREATE TABLE persons (" +
    "id SERIAL PRIMARY KEY, " +
    "name VARCHAR(50)" +
    ")";
    Statement stmt = connection.createStatement();
    stmt.execute(createTableSQL);
    System.out.println("Table created successfully.");
  }
 
  private static void insertData(Connection connection, int id, String name) throws SQLException {
    String insertSQL = "INSERT INTO persons (id, name) VALUES (?, ?)";
    PreparedStatement pstmt = connection.prepareStatement(insertSQL);
    pstmt.setInt(1, id);
    pstmt.setString(2, name);
    pstmt.executeUpdate();
    System.out.println("Data inserted successfully: " + name);
  }
 
  private static void fetchData(Connection connection) throws SQLException {
    String selectSQL = "SELECT * FROM persons";
    Statement stmt = connection.createStatement();
    ResultSet rs = stmt.executeQuery(selectSQL);
 
    System.out.println("Fetching data from the table:");
    while (rs.next()) {
      int id = rs.getInt("id");
      String name = rs.getString("name");
      System.out.println("ID: " + id + ", Name: " + name);
    }
  }
}

4. さいごに

最後までお付き合いありがとうございました!

このプロセスを通じて、データベースの移行だけでなく、新しい技術を学ぶ楽しさも感じていただけたなら嬉しいです。Amazon Q Developerを使えば、作業がぐっと楽になりますので、ぜひ活用してみてください。