JavaでUUIDを生成してOracleにINSERTしてみた

スポンサーリンク
スポンサーリンク

JavaでUUIDを生成してOracleにINSERTしてみた

タイトルの通りUUIDを生成してOracleに作成したテーブルに対してデータ投入してみようと思います。
最近よく使ってるのでSpringのJdbcTemplateを使用してSQLを投げることにします。

UUIDって何?って人は記事書いてるので読んでみてください。

UUIDとは?(Universal Unique Identifier)それとJavaでの実装方法
UUIDのJavaでの実装方法 UUIDについてとJavaでの実装方法についてざっくり調べたことを書き残します。 UUIDとは UUIDとは「Universal Unique Identifier」の略で、一意に識別するためのIDのことです...

テーブル定義について

今回使用するテーブルは以下になります。

CREATE TABLE ANIMAL(
 uuid    CHAR(36)
 ,animal_name VARCHAR(10)
);

ここで注目してほしいのがUUIDをCHARの36バイトで定義しているところです。

あれ?UUIDって16バイトじゃないの?と思ったあなた、するどいです!!m9(・∀・)
解説の前に今回のUUIDを生成するJavaの実装を見てみましょう。

private String generateUUID() {
    UUID uuid = UUID.randomUUID();
    return uuid.toString();
}

「randomUUID」でUUIDを生成した後に「toString」しています。
この「toString」をしていることによって36バイトで定義する必要があります。

「toString」のリファレンスを読んで計算すると36文字で返却すると読み取れます。
ちなみにリファレンスのhexDigitが1文字を表して、hexOctetがhexDigitとhexDigitなので2文字を表しています。

以下がリファレンスです。

UUID(Java Platform SE 8)リファレンス

Javaの実装について

それではJavaの実装です。

package com.example.demo;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UUIDGenerateAndInsert {
  
  @Autowired
  private JdbcTemplate jdbcTemplate;
  
  @GetMapping("/")
  public void insertAnimal() {
    
    String sqlText = "INSERT INTO ANIMAL "
            + "( UUID, ANIMAL_NAME ) "
            + "VALUES (?,?)";
    jdbcTemplate.update(sqlText ,generateUUID() ,"イルカ");
  }
  
  private String generateUUID() {
    UUID uuid = UUID.randomUUID();
    return uuid.toString();
  }
}

ここでは特別難しいことはしていませんね。INSERT文をJdbcTemplateで実行するときにUUIDを生成する「generateUUID」メソッドを使用しています。

では実際にブラウザからURLを「http://localhost:8888/」で叩くかcurlコマンドを使用して実行してみましょう。以上です\(^o^)/

バージョンについて

この記事で使用したバージョンは以下になります。

  • Windows 10 Home
  • Java11
  • Spring Tool Suite 4.6.2
  • Oracle 11gXE

ちなみにプロジェクト作成についても記載しておきます。
依存関係は以下を入れてます。
「Spring Boot DevTools」も便利なので依存関係に入れてます。

  • Spring Web
  • Thymeleaf
  • Oracle Driver
  • JDBC API

pom.xmlの記述

めんどくさい人はpom.xmlを使ってSpringプロジェクト作成しましょう。以下がpom.xmlです。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.3</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.example</groupId>
  <artifactId>SpringTest</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>UUIDSample</name>
  <description>Demo project for Spring Boot</description>
  <properties>
    <java.version>11</java.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <scope>runtime</scope>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>com.oracle.database.jdbc</groupId>
      <artifactId>ojdbc8</artifactId>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <excludes>
            <exclude>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
            </exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>

application.propertiesについて

プロジェクトの作成が完了したらDBの接続設定を「application.properties」に記述します。usernameとpasswordはご自身のDB設定を記述してください。

server.port=8888
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username={username}
spring.datasource.password={password}
spring.datasource.driverClassName=oracle.jdbc.OracleDriver

コメント

タイトルとURLをコピーしました