データベースを登録する

OpenOffice.org Baseで作成したOpenDocumentデータベース(*.odb)にOpenOffice.org Basicからアクセスするには、まずデータベースを登録する必要がある。

OpenOffice.org BaseでOpenDocumentデータベース(*.odb)を新規作成した場合は、自動的にデータベースが登録されるので改めて登録する必要は無い。

しかし、他のコンピュータで作成したOpenDocumentデータベース(*.odb)のファイルをコピーしてきた場合は、データベースを登録する必要がある。データベースの登録手順は次の通り。

  1. OpenOffice.orgの [ツール] メニューから [オプション] を選択する。

    この操作はOpenOffice.org Baseの他、OpenOffice.org Calc等で行ってももよい。

    ツールメニュー
  2. オプションダイアログで [OpenOffice.org Base] - [データベース] を選択し、[新規作成] ボタンをクリックする。

    オプション

  3. データベースを作成ダイアログで [データベースファイル] にOpenDocumentデータベース(*.odb)のパス名を入力するか、[検索] ボタンをクリックしてOpenDocumentデータベース(*.odb)を指定する。[登録名] に登録名が表示されるので、登録名を変更したければ新たな登録名を入力する。

    最後に [OK] ボタンをクリックする。

    データベースリンクを作成
  4. これでデータベースの登録が完了する。

次にデータベースアクセスするOpenOffice.org Basicマクロの例を示す。

Dim DatabaseContext As Object
Dim DataSource As Object
Dim Connection As Object
Dim Statement As Object
Dim ResultSet As Object

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("MyTestDB")
Connection = DataSource.getConnection("", "")

Statement = Connection.createStatement()
ResultSet = Statement.executeQuery("select * from MyTestDB")

If IsNull(ResultSet) Then
  MsgBox "検索されたレコード件数が0件"
Else
  While ResultSet.next
    sValue1 = ResultSet.getString(1)
    sValue2 = ResultSet.getLong(2)
  Wend
End If

Statement.Close()
Connection.Close()
Connection.Dispose()

DatabaseContext

com.sun.star.sdb.DatabaseContext はデータベースコンテキストを表すオブジェクトである。

DatabaseConext createUnoService(String)

引数には "com.sun.star.sdb.DatabaseContext" を指定する。

DataSource

DataSource はデータソースを表すオブジェクトである。

DataSource DatabaseContext::getByName(String)

パラメータには、OpenOffice.org Base に登録されたデータベースの登録名を指定する。

登録されたデータベースの登録名を確認するには、OpenOffice.org Base を起動して、[ツール] メニューから [オプション] を選ぶ。[オプション - OpenOffice.org Base - データベース] ダイアログが表示されるので、[登録されたデータベース] に登録名およびデータベースファイルの一覧が表示される。通常、データベースファイルが MyTestData.odb ならば登録名は MyTestData である。

データベースへの接続を確立

Connection はデータベースへの接続を表すオブジェクトである。

Connection DataSource::getConnection(String, String)

引数にはユーザ名とパスワードを指定する。データベースがパスワード保護されていなければ、空白でよい。

データベースがパスワード保護されているか否かを判断してからデータベースへの接続を確立するには次のように行なう。

If Not DataSource.IsPasswordRequired Then
  Connection = DataSource.getConnection("", "")
Else
  InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
  Connection = DataSource.connectWithCompletion(InteractionHandler)
End If

SQLステートメントの準備と実行

StatemetnはSQLステートメントを表すオブジェクトである。Statementオブジェクトを作成するには、ConnectionオブジェクトのcreateStatemntメソッドを使用する。

Statement Connection::createStatement()

問い合わせを行うには、executeQueryメソッドを使用する。

ResultSet Statement::executeQuery(String)

行の挿入や更新を行うには、executeUpdateメソッドを使用する。

Integer Statement::executeUpdate(String)

結果セットからデータの取得

ResultSetは結果セットを表すオブジェクトである。

データ取得用メソッド

結果セットからデータを取得するには、以下に示すメソッドを使用する。

メソッド サポートするSQLのデータ型
getByte() 数値、文字、文字列
getShort() 数値、文字、文字列
getInt() 数値、文字、文字列
getLong() 数値、文字、文字列
getFloat() 数値、文字、文字列
getDouble() 数値、文字、文字列
getBoolean() 数値、文字、文字列
getString() すべてのデータ型
getBytes() バイナリデータ
getDate() 数値、文字列、日付と時刻のタイムスタンプ
getTime() 数値、文字列、日付と時刻のタイムスタンプ
getTimestamp() 数値、文字列、日付と時刻のタイムスタンプ
getCharacterStream() 数値、文字列、バイナリデータ
getUnicodeStream() 数値、文字列、バイナリデータ
getBinaryStream() バイナリデータ
getObject() すべてのデータ型

いずれのメソッドも、データを取得する列の番号をパラメータとして指定する。

ナビゲーション用メソッド

next

Boolean ResultSet::next()

次のデータレコードへ移動する。正常に終了したらTrue、失敗したらFalseを戻す。

previous

Boolean ResultSet::previous()

前のデータレコードへ移動する。正常に終了したらTrue、失敗したらFalseを戻す。

first

Boolean ResultSet::first()

最初のデータレコードへ移動する。正常に終了したらTrue、失敗したらFalseを戻す。

last

Boolean ResultSet::last()

最後のデータレコードへ移動する。正常に終了したらTrue、失敗したらFalseを戻す。

beforeFirst

Boolean ResultSet::beforeFirst()

最初のデータレコードの前へ移動する。正常に終了したらTrue、失敗したらFalseを戻す。

afterLast

Boolean ResultSet::afterLast()

最後のデータレコードの次へ移動する。正常に終了したらTrue、失敗したらFalseを戻す。

カーソル位置確認用メソッド

isBeforeFirst

Boolean ResultSet::isBeforeFirst()

ResultSet が最初のデータレコードの前にあるかを判定する。

isAfterLast

Boolean ResultSet::isAfterLast()

ResultSet が最後のデータレコードの次にあるかを判定する。

isFirst

Boolean ResultSet::isFirst()

ResultSet が最初のデータレコードにあるかを判定する。

isLast

Boolean ResultSet::isLast()

ResultSet が最後のデータレコードにあるかを判定する。

例外

SQL文でエラーが発生すると、 com.sun.star.sdbc.SQLException 例外が発生する。