今回も引き続き、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は以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | <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メニューから「プロジェクトの更新」を選択
2) 更新対象となるMavenプロジェクトが選択されていることを確認し、「OK」を押下
3) 下記のように、pom.xmlに追加したSQL ServerへのJDBCドライバが追加されていることが確認できた
ただし、私の環境では、Mavenプロジェクトの更新を行わなくても、ライブラリが自動的に追加された。
プロパティファイルの作成
sqlserver.propertiesファイルを作成し、ここにJavaプログラムの定数定義を追加した。追加した内容は以下の通り。
1 2 3 4 5 | 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に、下記コードを追記
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | 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ファイルを指定して実行し、正常に動作することを確認した。