Java – SQL Server サンプルデータ作成 v2 on Ubuntu No.89

自己投資としてチャレンジしている内容を Blog で公開しています。

今回は Java による Microsoft  SQL Server 用にサンプルデータの一括作成方法について、前回とは異なる方法を紹介します。前回、sqlcmd のコマンドを介して insert 文を実行していましたが、今回は sqlcmd を使わず JDBC ドライバーで SQL Server で接続した後、サンプルデータの作成を行います。(In English Java – Creating sample data for SQL Server on Ubuntu No.89)

▼1. Java を使ったサンプルデータの作成

以前 Python および を使った SQL Server のサンプルデータの作成方法を案内しました。
Python – SQL Server サンプルデータの作成 No.62
Java – SQL Server サンプルデータの作成 VS Code No.87

データを生成する部分に関して拡張子 .sql のファイルを作成後、sqlcmd の引数に渡して実行していましたが、今回、sqlcmd は使わずシンプルに Java の中で以下の一連の処理を行います。

  • SQL Server への接続
  • Database の作成
  • Table の作成
  • サンプルデータの作成

▼2. 事前準備

2-1. 参照 Java – SQL Server サンプルデータの作成 VS Code No.87


▼3. SQL Server のサンプルデータを生成するコード

3-1. ディレクトリを作成。

アプリケーションを作成するため、ディレクトリを作成します。

mkdir sqlsrvtest
cd sqlsrvtest

3-2. Apache Maven によるプロジェクトを作成。

cd sqlsrvtest
mvn archetype:generate -DinteractiveMode=false -DgroupId=org.example.sqlsrv -DartifactId=sqlSrvOutput2 -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4

3-3. デフォルトで作成された App.java および AppTest.java を削除。

rm ./sqlSrvOutput2/src/main/java/org/example/sqlsrv/App.java
rm ./sqlSrvOutput2/src/test/java/org/example/sqlsrv/AppTest.java

3-4. Visual Studio Code を起動。

cd ./sqlSrvOutput2
code .

3-5. pom.xml に、SQL Server の操作のため library を追記し保存 (Ctrl+S)

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.microsoft.sqlserver</groupId>
      <artifactId>mssql-jdbc</artifactId>
      <version>11.2.1.jre8</version>
    </dependency>
  </dependencies>

3-6. sqlsample2.java を作成。

package org.example.sqlsrv;

import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class sqlsample2 {

        // create an insert query and save it to a string
        public static String insertQuery() {
            String query = "INSERT INTO sampledb.dbo.sampletable (num, cdatetime, note) VALUES (0,CURRENT_TIMESTAMP,'init')";     
            
            for (int num=0; num<10; num++) {
                String AlphaNumericString ="ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "0123456789" + "abcdefghijklmnopqrstuvxyz";
                StringBuilder sb = new StringBuilder(10);
    
                for (int i = 1; i < 10; i++) {
                    int index = (int)(AlphaNumericString.length() * Math.random());
                    sb.append(AlphaNumericString.charAt(index));
                }
                String randomString = sb.toString();
                query += ",(" + num + ",CURRENT_TIMESTAMP,'" + randomString + "')";
            }
            query += ";";
    
            return query;
        }

    public static void main(String[] args) throws SQLException {

        String url = "jdbc:sqlserver://localhost:1433;databaseName=master;user=sa;password=yourpassword;encrypt=false";
        Connection conn = DriverManager.getConnection(url);
        
        // Create databas
        String createdb = "IF DB_ID (N'sampledb') IS NULL CREATE DATABASE sampledb";
        Statement cd = conn.createStatement();
        cd.execute(createdb);
        System.out.println("Database was created.");
        cd.close();

        // Create table
        String createtable = "IF NOT EXISTS (select * from sampledb.dbo.sysobjects where name like 'sampletable') CREATE TABLE sampledb.dbo.sampletable (id int, num int, cdatetime datetime, note varchar(50))";
        Statement ct = conn.createStatement();
        ct.execute(createtable);
        System.out.println("Table was created.");
        ct.close();

        // Insert data
        String insertdata = insertQuery();
        Statement id = conn.createStatement();
        id.execute(insertdata);
        System.out.println("Data was inserted.");
        id.close();

        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("select * from sampledb.dbo.sampletable");
        List<String> list = new ArrayList<String>();
        while (rs.next()) {
            String NUM = rs.getString("num");
            String cdatetime = rs.getString("cdatetime");
            String note = rs.getString("note");
            String str = NUM + "," + cdatetime + "," + note;
            list.add(str);
        }
        rs.close();
        stmt.close();
        conn.close();

        // save local file
        String filename = "/home/xxx/sqlsrvtest/sqlSrvOutput2.csv";
        try {
            java.io.PrintWriter output = new java.io.PrintWriter(filename);
            for (int i = 1; i < list.size(); i++) {
                output.println(list.get(i));
            }
            output.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

3-7. 実行結果

(出力)
----------------------------------------
Database was created.
Table was created.
Data was inserted.
----------------------------------------

sqlSrvOutput2.csv の中身は以下となります。

0,2022-12-01 18:12:56.953,EmlFGESx1
1,2022-12-01 18:12:56.953,GzHCThChH
2,2022-12-01 18:12:56.953,GKcBm7tdj
3,2022-12-01 18:12:56.953,UN3SXZB50
4,2022-12-01 18:12:56.953,jq0sqmdB7
5,2022-12-01 18:12:56.953,gdqQX5zq9
6,2022-12-01 18:12:56.953,JfkqIQjjM
7,2022-12-01 18:12:56.953,59js3TsaP
8,2022-12-01 18:12:56.953,TQsBNmsCe
9,2022-12-01 18:12:56.953,epQjRYxuV

▼4. 参考情報

  1. Java – SQL Server 検索結果をAzure Blob Storage に保存 No.75
  2. Python – SQL Server サンプルデータの作成 No.62
  3. Java – SQL Server サンプルデータの作成 VS Code No.87

以上です。参考になりましたら幸いです。



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です