Javaその他

JavaでSQL Serverにデータロードするプログラムを作成した(ソースコード編)

今回も引き続き、Javaで作成したSQL Serverにデータロードするプログラムについて記載する。ここでは、JavaでSQL Serverにデータロードするプログラムについて述べる。

前提条件

下記サイトの環境構築が終わっているものとする。

JavaでSQL Serverにデータロードするプログラムを作成した(環境構築編)今回も引き続き、Javaで作成したSQL Serverにデータロードするプログラムについて記載する。ここでは、JavaでSQL Serv...

やってみたこと(プログラム作成)

  1. Mavenプロジェクトの作成
  2. pom.xmlの編集
  3. Mavenプロジェクトの更新
  4. プロパティファイルの作成
  5. Javaプログラムの作成
  6. Javaアプリケーションの実行
  7. Maven installの実行によるJarファイルの作成
  8. javaコマンドによるJarファイルの実行

 

Mavenプロジェクトの作成

Mavenプロジェクトを利用すると、pom.xmlに定義したライブラリファイルを自動的に追加してくれたり、pom.xmlに定義したライブラリファイルを含んだJarファイル(コンパイル済のJavaファイルの集合)を作成したりできる。以下の手順で作成した。

1) Eclipseを起動
mavenプロジェクト作成1

2) パッケージ・エクスプローラー上で右クリックし、「新規」メニューから「Maven プロジェクト」を選択
mavenプロジェクト作成2

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

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

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



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>

https://www.purin-it.com/doctor-homenet

Mavenプロジェクトの更新

Mavenプロジェクトを更新すると、pom.xmlに追加したライブラリが自動的に追加される。以下の手順で実施した。

1) 作成したMavenプロジェクトを右クリックし、Mavenメニューから「プロジェクトの更新」を選択
maven更新1

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

3) 下記のように、pom.xmlに追加したSQL ServerへのJDBCドライバが追加されていることが確認できた
maven更新3
ただし、私の環境では、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プロジェクトを右クリックし、「新規」メニューから「クラス」を選択
Javaプログラム作成1

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

3) 以下のように、TestSqlServer.javaが作成されたことを確認
Javaプログラム作成3

4) 以下の場所に、TestSqlServer.javaが配置されたことを確認
Javaプログラム作成4

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(); 
        } 
    } 
}



「CODE×CODE」は、需要の高い技術(AWS, Python等)を習得できるプログラミングスクールスクールだった近年、さまざまな会社でクラウド(特にIaaSやPaaSのパブリッククラウド)の需要が非常に高まっていて、クラウドサービスによるシステム開...

Javaアプリケーションの実行

作成したTestSqlServer.javaをJavaアプリケーションとして実行し、正常に動作することを確認した。

1) C:\work\sqlserver\ フォルダ下に、ファイル名:insert_sales.tsv、文字コード:UTF-8、区切り文字:タブ区切りで、改行コード:CR+LFであるロード対象のファイルを配置
Java実行1

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

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

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



Maven installの実行によるJarファイルの作成

Maven installを実行し、実行用のJarファイルを作成した。

1) 作成したMavenプロジェクトを右クリックし、「実行」メニューから「Maven install」を選択
mvn_install_1

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

3) Maven installが正常終了すると、下図のように、targetフォルダ内に、「プロジェクト名-バージョン-SNAPSHOT-jar-with-dependencies.jar」と「プロジェクト名-バージョン-SNAPSHOT.jar」が作成される
mvn_install_3
ファイル名の最後に「jar-with-dependencies」が付与されているJarファイルが、追加したライブラリも含んだJarファイルである



javaコマンドによるJarファイルの実行

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

1) javaコマンドによりJarファイルを指定し実行
Java_コマンド実行_1

2) SQL Serverに接続し、dbo.salesテーブルにレコードが追加されていることを確認
Java_コマンド実行_2