LibreOffice(calc)のマクロで、MariaDBにアクセスしてみます。
LibreOfficeの動作環境は以下のとおり。
- Windows10
- LibreOffice5
- OracleJRE1.7
1.MariaDBの用意
まず、LibreOfficeからアクセスするMariaDBを用意します。
とりあえず、動けばいいので CentOS7の docker コンテナを使いました。
[root@centos0702 ~]# docker run --name mariadb -e MYSQL_ROOT_PASSWORD=p@ssw0rd -p 3306:3306 -d mariadb:latest 2cfc7f734fb1a23a93a22f282c01544bf4f722e47d2bd2376664a818ae4ef865 [root@centos0702 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2cfc7f734fb1 mariadb:latest "docker-entrypoint.sh" 13 seconds ago Up 11 seconds 0.0.0.0:3306->3306/tcp mariadb
これで、MariaDBが動いたので、試しに、root/p@assw0rd でログインしてみます。
[root@centos0702 ~]# mysql -h 192.168.56.101 -uroot -pp@ssw0rd Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 10.1.20-MariaDB-1~jessie mariadb.org binary distribution Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
2. MariaDBのJDBCドライバのダウンロード
LibreOffice のマクロで MariaDBにアクセスするには、JDBCドライバが必要です。
下記URLから MariaDB のJDBCドライバを入手しました。
https://downloads.mariadb.org/connector-java/ダウンロードした jar ファイル (mariadb-java-client-1.5.6.jar) を適当なフォルダに格納します。
今回は、下記フォルダに格納しました。
C:\workspace\LibreOfficeマクロ\mariadb-java-client-1.5.6.jarこの jar ファイルを LibreOffice に認識させます。
LibreOffice(calc)を起動して、[ツール] > [オプション] で下図の画面を表示したら
[LibreOffice] > [詳細] をクリックして、[クラスパス]ボタンをクリックします。
[アーカイブを追加]ボタンをクリックして、jar ファイルを追加します。
3. マクロの作成
MariaDBにアクセスして、mysql の user テーブルを参照してみます。
1件入力して、ユーザ名をメッセジーボックスで表示します。
ソースコードは以下のとおり。[ツール] > [マクロ] で保存します。
Sub MariaDBTest Dim DatabaseContext as Object Dim DataSource as Object Dim Connection as Object Dim Statement as Object Dim sSQL as String Dim oResultSet as Object Dim nDlgResult As Integer Dim sURL as String Dim oProps(2) as new com.sun.star.beans.PropertyValue ' DB コネクションのオープン DatabaseContext=createUnoService("com.sun.star.sdbc.DriverManager") sURL = "jdbc:mysql://192.168.56.101:3306/mysql?useUnicode=true&characterEncoding=UTF-8" oProps(0).Name = "user" oProps(0).value = "root" oProps(1).Name = "password" oProps(1).value = "p@ssw0rd" oProps(2).name = "JavaDriverClass" oProps(2).value = "org.mariadb.jdbc.Driver" Connection = DatabaseContext.getConnectionWithInfo(sURL, oProps()) ' SQL select 実行 Statement = Connection.createStatement() oResultSet = Statement.executeQuery("SELECT user FROM user;") ' 1件読み込んで表示 oResultSet.Next Msgbox(oResultSet.getString(1)) 'nResult = Statement.executeUpdate("INSERT INTO sample (id,item,ymd VALUES (1, 'demo','2016/01/01')") ' DB コネクションのクローズ Statement.Close() Connection.Close() Connection.Dispose() End Sub
4. 実行
[ツール] > [マクロ] > [マクロの実行] でマクロを実行します。
成功すると、下図のようにメッセージボックスに ユーザ名(root)が表示されます。