自己投資としてチャレンジしている内容を 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 sqlsrvtest3-2. Apache Maven によるプロジェクトを作成。
cd sqlsrvtest
mvn archetype:generate -DinteractiveMode=false -DgroupId=org.example.sqlsrv -DartifactId=sqlSrvOutput2 -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.43-3. デフォルトで作成された App.java および AppTest.java を削除。
rm ./sqlSrvOutput2/src/main/java/org/example/sqlsrv/App.java
rm ./sqlSrvOutput2/src/test/java/org/example/sqlsrv/AppTest.java3-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. 参考情報
- Java – SQL Server 検索結果をAzure Blob Storage に保存 No.75
- Python – SQL Server サンプルデータの作成 No.62
- Java – SQL Server サンプルデータの作成 VS Code No.87
以上です。参考になりましたら幸いです。