Java – SQL Server Select 実行結果をテキストに保存 No.70

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

今回は SQL Server に接続し Select した結果をローカルファイルに出力する Java コードを紹介します。(In English: Java – Put SQL Server select results into a csv file No.70)

▼1. 事前準備

Ubuntu 上にインストールされた SQL Server に対して Select 文を実行します。

1-1. SQL Server のインストール

クイック スタート:Ubuntu に SQL Server をインストールし、データベースを作成する

1-2. Visual Studio Code のインストール

sudo snap install --classic code

https://code.visualstudio.com/docs/setup/linux

1-3. Maven のインストール

Apache Kafka Word Count 実装 – Java No.442-3. Apache Maven のインストール” の部分

1-4. SQL Server のサンプルデータの作成

SQL Server サンプルデータの作成 – Python No62

1-5. SQL Server で Select 文実行

SQL Server への Select の実行に関わる Java の実装はこちらが参考になります。
Java SQL Server on Linux で select を実行する方法 No8


▼2. SQL Server に接続し Select した結果をローカルファイルとして出力する Java コード

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

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

mkidr sqlsrvtest
cd sqlsrvtest

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

mvn archetype:generate -DinteractiveMode=false -DgroupId=org.example.sqlsrv -DartifactId=sqlSrvOutput -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4
(出力の一部)
xxxx
[INFO] Generating project in Batch mode
[INFO] Archetype repository not defined. Using the one from [org.apache.maven.archetypes:maven-archetype-quickstart:1.4] found in catalog remote
[INFO] -------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
[INFO] --------------------------------------------------------------------
[INFO] Parameter: groupId, Value: org.example.sqlsrv
[INFO] Parameter: artifactId, Value: sqlSrvOutput
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: org.example.sqlsrv
[INFO] Parameter: packageInPathFormat, Value: org/example/sqlsrv
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: org.example.sqlsrv
[INFO] Parameter: groupId, Value: org.example.sqlsrv
[INFO] Parameter: artifactId, Value: sqlSrvOutput
[INFO] Project created from Archetype in dir: /home/xxx/sqlSrvOutput
[INFO] --------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] --------------------------------------------------------------------
[INFO] Total time:  3.063 s
[INFO] Finished at: 2022-11-08T10:51:27+09:00
[INFO] --------------------------------------------------------------------

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

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

2-4. Visual Studio Code を起動

code .

2-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>

2-6. sqlsrvlocaloutput.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 sqlsrvlocaloutput {
    // select data from SQL Server
    public static void main(String[] args) throws SQLException {
        String url = "jdbc:sqlserver://localhost:1433;databaseName=sampledb;user=sa;password=yourpassowrd;encrypt=false;";
        Connection conn = DriverManager.getConnection(url);
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("select * from dbo.sampletable");
        List<String> list = new ArrayList<String>();
        while (rs.next()) {
            String ID = rs.getString("id");
            String NUM = rs.getString("num");
            String cdatetime = rs.getString("cdatetime");
            String note = rs.getString("note");
            String str = ID + "," + NUM + "," + cdatetime + "," + note;
            list.add(str);
        }
        rs.close();
        stmt.close();
        conn.close();

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

2-7. 実行後 csv ファイルの生成

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

1,0,2022-10-20 16:13:13.477,init
2,1,2022-10-20 16:12:11.777,a
3,2,2022-10-20 16:12:11.777,ah
4,3,2022-10-20 16:12:11.777,lam
5,4,2022-10-20 16:12:11.777,nddv
6,5,2022-10-20 16:12:11.777,vdhpw
7,6,2022-10-20 16:12:11.777,fdfszy
8,7,2022-10-20 16:12:11.777,rgofcgt
9,8,2022-10-20 16:12:11.777,hezwdqae
10,9,2022-10-20 16:12:11.777,bywqcunva

▼3. 参考情報

1. Java SQL Server on Linux で select を実行する方法 No8
2. クイック スタート:Ubuntu に SQL Server をインストールし、データベースを作成する
3. VS Code のインストール https://code.visualstudio.com/docs/setup/linux
4. Maven のインストール Apache Kafka Word Count 実装 – Java No.44
5. SQL Server サンプルデータの作成 – Python No62

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


コメントを残す

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