LibreOffice Base は LibreOffice に含まれるデータベースである。
データベースを運用していくうちに、OpenDocumentデータベース(.odbファイル)のサイズが肥大化してゆく。この中には無駄な領域も含まれているので、データベースの最適化を行うとOpenDocumentデータベース(.odbファイル)のサイズを小さくすることができる。
データベースの最適化を行う手順を次に示す。
CHECKPOINT DEFRAG
と入力する。
LibreOffice Baseで作成したOpenDocumentデータベース(*.odb)に LibreOffice Basicからアクセスするには、まずデータベースを登録する必要がある。
LibreOffice BaseでOpenDocumentデータベース(*.odb)を新規作成した場合は、自動的にデータベースが登録されるので改めて登録する必要は無い。
しかし、他のコンピュータで作成したOpenDocumentデータベース(*.odb)のファイルをコピーしてきた場合は、データベースを登録する必要がある。データベースの登録手順は次の通り。
この操作は LibreOffice Baseの他、LibreOffice Calc等で行ってももよい。
最後に [OK] ボタンをクリックする。
次にデータベースアクセスする LibreOffice 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()
com.sun.star.sdb.DatabaseContext はデータベースコンテキストを表すオブジェクトである。
DatabaseConext createUnoService(String)
引数には "com.sun.star.sdb.DatabaseContext" を指定する。
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
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() | すべてのデータ型 |
いずれのメソッドも、データを取得する列の番号をパラメータとして指定する。
Boolean ResultSet::next()
次のデータレコードへ移動する。正常に終了したらTrue、失敗したらFalseを戻す。
Boolean ResultSet::previous()
前のデータレコードへ移動する。正常に終了したらTrue、失敗したらFalseを戻す。
Boolean ResultSet::first()
最初のデータレコードへ移動する。正常に終了したらTrue、失敗したらFalseを戻す。
Boolean ResultSet::last()
最後のデータレコードへ移動する。正常に終了したらTrue、失敗したらFalseを戻す。
Boolean ResultSet::beforeFirst()
最初のデータレコードの前へ移動する。正常に終了したらTrue、失敗したらFalseを戻す。
Boolean ResultSet::afterLast()
最後のデータレコードの次へ移動する。正常に終了したらTrue、失敗したらFalseを戻す。
Boolean ResultSet::isBeforeFirst()
ResultSet が最初のデータレコードの前にあるかを判定する。
Boolean ResultSet::isAfterLast()
ResultSet が最後のデータレコードの次にあるかを判定する。
Boolean ResultSet::isFirst()
ResultSet が最初のデータレコードにあるかを判定する。
Boolean ResultSet::isLast()
ResultSet が最後のデータレコードにあるかを判定する。
SQL文でエラーが発生すると、com.sun.star.sdbc.SQLException
例外が発生する。