Pleiades Eclipse 4.7 Oxygen : SWT(Table) + MySQL の SQL(SELECT) で一覧表示



WindowBuilder のインストール

SWT と Swing に関しては、WindowBuilder のサイト よりインストール用の URL を取得します。

※ バージョンは、WindowBuilder のバージョンです。(Eclipse のバージョンに依存しなくなりました)

この URL を『新規ソフトウェアのインストール』で表示されるダイアログに入力します


以前の WindowBuilder のアンインストールは、『ヘルプメニュー』>『Eclipse について』>『インストール詳細』で表示されるウインドウからアンインストールします

プロジェクト作成

プロジェクトは専用のものを使いますので、『その他』から以下を選択して下さい。

プロジェクトを作成したら、CTRL+N でその他より、以下を選択して下さい。

実行してウインドウが表示されたら準備完了です。

テンプレートの修正

メニューバー・タスクバー・ツールバー用のテンプレートは邪魔なだけなので削除します。

MySQL 接続用ライブラリのインストール

Download Connector/J から jar をダウンロードして使用するか、Maven Repository より pom.xml に記述する内容を取得して使用します。

バージョンは、ここでは 5.1.46 を使用しています
( ダウンロードページでは、Looking for previous GA versions? リンクをクリックします )

Maven を使用するには、既存のプロジェクトを変換するのが簡単です。
( プロジェクトを右クリックして『構成』から Maven プロジェクトへの変換 )

Chapter 4 Connector/J Examples

実行ソースコード

001.package mysql;
002. 
003.import java.sql.DriverManager;
004.import java.sql.ResultSet;
005.import java.sql.SQLException;
006.import java.text.SimpleDateFormat;
007. 
008.import org.eclipse.jface.window.ApplicationWindow;
009.import org.eclipse.swt.SWT;
010.import org.eclipse.swt.events.SelectionAdapter;
011.import org.eclipse.swt.events.SelectionEvent;
012.import org.eclipse.swt.graphics.Point;
013.import org.eclipse.swt.widgets.Button;
014.import org.eclipse.swt.widgets.Composite;
015.import org.eclipse.swt.widgets.Control;
016.import org.eclipse.swt.widgets.Display;
017.import org.eclipse.swt.widgets.Shell;
018.import org.eclipse.swt.widgets.Table;
019.import org.eclipse.swt.widgets.TableColumn;
020.import org.eclipse.swt.widgets.TableItem;
021. 
022.import com.mysql.jdbc.Connection;
023.import com.mysql.jdbc.ResultSetMetaData;
024.import com.mysql.jdbc.Statement;
025. 
026.public class Main extends ApplicationWindow {
027. 
028.        // https://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Findex.html&org/eclipse/swt/widgets/Table.html
029.        private Table table;
030. 
031.        // https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.46
032.        // https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-examples.html
033.        private Connection conn = null;
034.        private Statement stmt = null;
035.        private ResultSet rs = null;
036.        private int maxRows = 20;
037. 
038.        public Main() {
039.                super(null);
040.                createActions();
041.        }
042. 
043.        @Override
044.        protected Control createContents(Composite parent) {
045.                Composite container = new Composite(parent, SWT.NONE);
046. 
047.                table = new Table(container, SWT.BORDER | SWT.FULL_SELECTION);
048.                table.setBounds(10, 41, 764, 338);
049.                table.setHeaderVisible(true);
050.                table.setLinesVisible(true);
051. 
052.                Button button = new Button(container, SWT.NONE);
053.                button.addSelectionListener(new SelectionAdapter() {
054.                        @Override
055.                        public void widgetSelected(SelectionEvent e) {
056.                                // 行を全て削除
057.                                table.removeAll();
058.                                loadMySQL("select * from 社員マスタ");
059.                        }
060. 
061.                });
062.                button.setBounds(10, 10, 75, 25);
063.                button.setText("実行");
064. 
065.                return container;
066.        }
067. 
068.        private void createActions() {
069.                // Create the actions
070.        }
071. 
072.        public static void main(String args[]) {
073.                try {
074.                        Main window = new Main();
075.                        window.setBlockOnOpen(true);
076.                        window.open();
077.                        Display.getCurrent().dispose();
078.                } catch (Exception e) {
079.                        e.printStackTrace();
080.                }
081.        }
082. 
083.        @Override
084.        protected void configureShell(Shell newShell) {
085.                super.configureShell(newShell);
086.                newShell.setText("MySQL Connector/J");
087.        }
088. 
089.        @Override
090.        protected Point getInitialSize() {
091.                return new Point(800, 443);
092.        }
093. 
094. 
095.        private void loadMySQL( String sql ) {
096. 
097.                try {
098.                        // MySQL Connector/J 接続
099.                        conn = (Connection) DriverManager.getConnection(
100.                                "jdbc:mysql://localhost/lightbox?user=root&password="
101.                        );
102. 
103.                        stmt = (Statement) conn.createStatement();
104.                        rs = stmt.executeQuery(sql);
105. 
106.                        // select の結果の列情報の取得
107.                        ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData();
108. 
109.                        // 列数
110.                        int columnCount = rsmd.getColumnCount();
111. 
112.                        // 前回のテーブル列を全て削除
113.                        int tableColumnCount = table.getColumnCount();
114.                        TableColumn tableColumnWork = null;
115.                        for( int i = tableColumnCount - 1; i >= 0; i--) {
116.                                tableColumnWork = table.getColumn(i);
117.                                tableColumnWork.dispose();
118.                        }
119. 
120.                        // 列名
121.                        TableColumn tableColumn = null;
122.                        for( int i = 1; i <= columnCount; i++) {
123.                                tableColumn = new TableColumn(table, SWT.NONE);
124.                                tableColumn.setWidth(100);
125.                                tableColumn.setText(rsmd.getColumnName(i));
126.                        }
127. 
128.                        TableItem tableItem = null;
129.                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
130.                        int countRow = 0;
131.                        while( rs.next() && countRow < maxRows ) {
132. 
133.                                countRow++;
134. 
135.                                String[] columnData = new String[columnCount];
136. 
137.                                for( int i = 1; i <= columnCount; i++) {
138. 
139.                                        if ( rsmd.getColumnTypeName(i).equals("DATETIME") ) {
140.                                                columnData[i-1] = sdf.format(rs.getDate(i));
141.                                        }
142.                                        else {
143.                                                columnData[i-1] = rs.getString(i);
144.                                        }
145. 
146.                                }
147.                                tableItem = new TableItem(table, SWT.NONE);
148.                                tableItem.setText(columnData);
149.                        }
150. 
151.                        rs.close();
152.                        stmt.close();
153.                        conn.close();
154. 
155.                } catch (SQLException ex) {
156.                        // handle any errors
157.                        System.out.println("SQLException: " + ex.getMessage());
158.                        System.out.println("SQLState: " + ex.getSQLState());
159.                        System.out.println("VendorError: " + ex.getErrorCode());
160.                }
161. 
162.        }
163.}

pom.xml
01.<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">
02.  <modelVersion>4.0.0</modelVersion>
03.  <groupId>MySQL_01</groupId>
04.  <artifactId>MySQL_01</artifactId>
05.  <version>0.0.1-SNAPSHOT</version>
06.  <build>
07.    <sourceDirectory>src</sourceDirectory>
08.    <plugins>
09.      <plugin>
10.        <artifactId>maven-compiler-plugin</artifactId>
11.        <version>3.7.0</version>
12.        <configuration>
13.          <source>1.8</source>
14.          <target>1.8</target>
15.        </configuration>
16.      </plugin>
17.    </plugins>
18.  </build>
19.  <dependencies>
20.    <dependency>
21.      <groupId>mysql</groupId>
22.      <artifactId>mysql-connector-java</artifactId>
23.      <version>5.1.46</version>
24.    </dependency>
25.  </dependencies>
26. 
27.</project>

関連する記事

WindowBuilder のテーブルコントロールにインターネットから JSON データを読み込んで処理するテンプレート ( 行データをダブルクリックして取得 )