よろずやネット

最近はLibreofficeにハマっています。

CalcでMariaDB MySQLに接続、SQLクエリーを実行して結果(ResultSet)を取得

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

---コードサンプル ここまで----