今回も引き続き、Javaで作成したSQL Serverにデータロードするプログラムについて記載する。ここでは、JavaでSQL Serverにデータロードするプログラムについて述べる。
前提条件
下記サイトの環境構築が終わっているものとする。
やってみたこと(プログラム作成)
- Mavenプロジェクトの作成
- pom.xmlの編集
- Mavenプロジェクトの更新
- プロパティファイルの作成
- Javaプログラムの作成
- Javaアプリケーションの実行
- Maven installの実行によるJarファイルの作成
- javaコマンドによるJarファイルの実行
Mavenプロジェクトの作成
Mavenプロジェクトを利用すると、pom.xmlに定義したライブラリファイルを自動的に追加してくれたり、pom.xmlに定義したライブラリファイルを含んだJarファイル(コンパイル済のJavaファイルの集合)を作成したりできる。以下の手順で作成した。
2) パッケージ・エクスプローラー上で右クリックし、「新規」メニューから「Maven プロジェクト」を選択

3) 「シンプルなプロジェクトの作成」にチェックを入れ、「次へ」を押下

4) グループ Id、アーティファクト Idに任意の値を入力し、「完了」を押下

5) 4)で指定したアーティファクト Idのプロジェクトが作成される
pom.xmlの内容も下図の通り

pom.xmlの編集
pom.xmlに、SQL ServerのJDBCドライバの定義を追加した。
追加後のpom.xmlは以下の通り。
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test.sample</groupId>
<artifactId>test-sqlserver</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 文字コードとJavaのバージョンの設定 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<!-- プラグインの設定 -->
<build>
<plugins>
<!-- Javaファイルのコンパイラの設定 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<!-- プロジェクトと依存するライブラリを1つにまとめる設定 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<!-- メインプログラムとして実行するクラスの指定 -->
<mainClass>test.TestSqlServer</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!-- ライブラリ依存関係の設定 -->
<dependencies>
<dependency>
<!-- SQL ServerへのJDBCドライバを追加する設定 -->
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>7.0.0.jre8</version>
</dependency>
</dependencies>
</project> Mavenプロジェクトの更新
Mavenプロジェクトを更新すると、pom.xmlに追加したライブラリが自動的に追加される。以下の手順で実施した。
1) 作成したMavenプロジェクトを右クリックし、Mavenメニューから「プロジェクトの更新」を選択

2) 更新対象となるMavenプロジェクトが選択されていることを確認し、「OK」を押下

3) 下記のように、pom.xmlに追加したSQL ServerへのJDBCドライバが追加されていることが確認できた

ただし、私の環境では、Mavenプロジェクトの更新を行わなくても、ライブラリが自動的に追加された。
プロパティファイルの作成
sqlserver.propertiesファイルを作成し、ここにJavaプログラムの定数定義を追加した。追加した内容は以下の通り。
serverName=localhost dbName=model tblName=dbo.sales tsvFilePath=c:\\work\\sqlserver\\ tsvFileName=insert_sales.tsv
また、sqlserver.propertiesを配置した場所は下図の通り。

Javaプログラムの作成
TestSqlServer.javaに、SQL ServerにJDBC接続し、dbo.salesテーブルのデータを全削除した後で、insert_sales.tsvファイルの全データを追加するプログラムを追加した。
以下の手順で、TestSqlServer.javaファイルを作成した。
1) 作成したMavenプロジェクトを右クリックし、「新規」メニューから「クラス」を選択

2) パッケージ名・クラス名を入力し、public static void mainメソッドの作成にチェックを入れ、「完了」を押下

3) 以下のように、TestSqlServer.javaが作成されたことを確認

4) 以下の場所に、TestSqlServer.javaが配置されたことを確認

5) TestSqlServer.javaに、下記コードを追記
package test;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
public class TestSqlServer {
public static void main(String[] args) {
Properties properties = new Properties();
try{
// プロパティファイルからの値読み込み
InputStream stream = TestSqlServer.class.getClassLoader()
.getResourceAsStream("sqlserver.properties");
properties.load(stream);
stream.close();
String serverName = properties.getProperty("serverName");
String dbName = properties.getProperty("dbName");
String tblName = properties.getProperty("tblName");
String tsvFilePath = properties.getProperty("tsvFilePath");
String tsvFileName = properties.getProperty("tsvFileName");
// SQL Serverに接続開始
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection con = DriverManager.getConnection(
"jdbc:sqlserver://" + serverName+ ";databaseName=" + dbName
+ ";integratedSecurity=true;"); // Windows認証で接続
// tblNameで指定したテーブルのデータを一括削除
PreparedStatement ps = con.prepareStatement("TRUNCATE TABLE " + tblName);
ps.executeUpdate();
// tblNameで指定したテーブルに、tsvFileのデータを一括で投入
ps = con.prepareStatement("BULK INSERT " + tblName
+ " FROM '" + tsvFilePath + tsvFileName + "' " // 読み込みファイルを指定
+ " WITH (FIRSTROW = 2 " // 読み込み開始行(2行目)を指定
+ ", FIELDTERMINATOR = '\\t'" // 区切り文字(タブ)を指定
+ ", ROWTERMINATOR = '\\n'" // 改行文字(\n)を指定
+ ", CODEPAGE = '65001'" // 文字コード(UTF-8)を指定
+ ", DATAFILETYPE = 'Char')"); // データ形式(文字形式)を指定
ps.executeUpdate();
// tblNameで指定したテーブルに投入されたデータをコンソールに出力
ps = con.prepareStatement("select * from " + tblName);
ResultSet rs = ps.executeQuery();
while(rs.next()){
System.out.print(rs.getDate("sale_date") + ":");
System.out.print(rs.getString("product_name") + ":");
System.out.print(rs.getString("place_name") + ":");
System.out.print(rs.getString("sales_amount"));
System.out.println();
}
// SQL Serverの接続を閉じる
closeDbConnection(rs, ps, con);
} catch(Exception objEx) {
//コンソールにエラー内容を表示
System.err.println(objEx.getClass().getName() + ":" + objEx.getMessage());
}
}
private static void closeDbConnection(ResultSet rs
, PreparedStatement ps, Connection con) throws SQLException{
if(rs != null) {
rs.close();
} if(ps != null) {
ps.close();
} if(con != null) {
con.close();
}
}
}
Javaアプリケーションの実行
作成したTestSqlServer.javaをJavaアプリケーションとして実行し、正常に動作することを確認した。
1) C:\work\sqlserver\ フォルダ下に、ファイル名:insert_sales.tsv、文字コード:UTF-8、区切り文字:タブ区切りで、改行コード:CR+LFであるロード対象のファイルを配置

2) TestSqlServer.javaを右クリックし、「実行」メニューから「Javaアプリケーション」を選択

3) 下記のように、コンソールにSystem.out.printlnで出力しているSELECT文の実行結果が表示されることを確認

4) SQL Serverに接続し、dbo.salesテーブルにレコードが追加されていることを確認

Maven installの実行によるJarファイルの作成
Maven installを実行し、実行用のJarファイルを作成した。
1) 作成したMavenプロジェクトを右クリックし、「実行」メニューから「Maven install」を選択

2) Maven installが正常終了すると、下図のように、「BUILD SUCCESS」が表示される

3) Maven installが正常終了すると、下図のように、targetフォルダ内に、「プロジェクト名-バージョン-SNAPSHOT-jar-with-dependencies.jar」と「プロジェクト名-バージョン-SNAPSHOT.jar」が作成される

ファイル名の最後に「jar-with-dependencies」が付与されているJarファイルが、追加したライブラリも含んだJarファイルである
javaコマンドによるJarファイルの実行
javaコマンドによって、ファイル名の最後に「jar-with-dependencies」が付与されているJarファイルを指定して実行し、正常に動作することを確認した。








