CalcでMariaDB MySQLに接続、SQLクエリーを実行して結果を取得【準備編】
https://yorozuyanet.hatenablog.com/entry/2019/08/11/020512
の続きです。
---コードサンプル ここから----
Option Explicit
' Declaration Var --
Public DBConnString As String
Public DBConnStringIsSet As Boolean
Public jdbcDriverClass As String
' Declaration Var --
Sub Macro1
' JDBCドライバクラスのjarファイルのダウンロード
' JavaDriverClass: "org.mariadb.jdbc.Driver"
' https://mariadb.com/kb/en/library/server-client-software/client-libraries/connectors /mariadb-connector-j/about-mariadb-connector-j/
' https://downloads.mariadb.org/connector-java/
' JavaDriverClass: "com.mysql.jdbc.Driver"
' http://www.mirrorservice.org/sites/ftp.mysql.com/Downloads/Connector-J/
jdbcDriverClass = "com.mysql.jdbc.Driver"
' jdbcDriverClass = "org.mariadb.jdbc.Driver"
SetDBConnectionString("127.0.0.1", "your_database_name")
Dim DatabaseContext as Object
Dim Connection as Object
Dim Statement as Object
Dim ResultSet as Object
Dim ConnString as String
Dim Props(2) as new com.sun.star.beans.PropertyValue
Dim MyQuery As String
MyQuery="Select Now();"
'データベースに接続
DatabaseContext=createUnoService("com.sun.star.sdbc.DriverManager")
ConnString = DBConnString
Props(0).Name = "user"
Props(0).value = "your_username"
Props(1).Name = "password"
Props(1).value = "your_password"
Props(2).name = "JavaDriverClass"
Props(2).value = jdbcDriverClass
Connection = DatabaseContext.getConnectionWithInfo(ConnString, Props())
'SQLの実行
Statement = Connection.createStatement()
ResultSet = Statement.executeQuery(MyQuery)
Dim rCount As Integer ' ResultSetの行数
rCount = 0
While ResultSet.next
rCount = rCount + 1
Wend
' Msgbox(rCount)
' ResultSetsのナビゲーション、下記にURLに解説あり
ResultSet.beforeFirst
ResultSet.next
Dim txt As String
txt = ResultSet.getString(1)
msgbox(ResultSet.getString(1)) ' 下記に注意書きあり
' getString()のパラメーターは列番号でしか指定できない。 列番号は左端の1から始まる(0ゼロではない)
' パラメーターを列の名前で指定するとエラーが発生する。
' Dim a as String
' a= "name"
' msgbox(ResultSet.getString(a)) 'Error発生
' 種類別データの取得(getメソッド)の解説
' https://wiki.openoffice.org/wiki/JA/Documentation/BASIC_Guide/Database_Access
'データベース接続を閉じる
Statement.Close()
Connection.Close()
Connection.Dispose()
End Sub
Sub SetDBConnectionString(DBServerName As String, DBName As String)
' URL基本形
' URL = "jdbc:mysql://" & DBServerName & ":3306/" & DBName ' & "?useUnicode=true&characterEncoding=UTF-8;"
If jdbcDriverClass like "*mysql*" Then
' サーバー側でTimezoneが設定されていないとエラーが発生する
' 文末の;は不要。 ;があるとエラー発生。
DBConnString = "jdbc:mysql://" & DBServerName & ":3306/" & DBName & _
"?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"
ElseIf jdbcDriverClass like "*mariadb*" Then
DBConnString = "jdbc:mysql://" & DBServerName & ":3306/" & DBName & _
"?useUnicode=true&characterEncoding=UTF-8;"
End If
DBConnStringIsSet=True
End Sub
---コードサンプル ここまで----