Difference between revisions of "EN/Documentation/BASIC Guide/Database Access"

From Apache OpenOffice Wiki
Jump to: navigation, search
(New page: {{EN/Documentation/BASICGuideTOC/v2 |ShowPrevNext=block |ShowPrevPage=block |PrevPage=Documentation/BASIC Guide/Data Sources |NextPage=Documentation/BASIC Guide/Dialogs |base=block }} {{DI...)
 
Line 6: Line 6:
 
|base=block
 
|base=block
 
}}
 
}}
{{DISPLAYTITLE:データベースアクセス}}
+
{{DISPLAYTITLE:Accesso ai database }}
 
   
 
   
▼データベースへのアクセスを行うには、該当するデータベース接続を確立しておく必要があります。▼これは、データベースとの直接的な交信を行うための転送チャネルが確保された状態を意味します。▼前節で説明したデータ\'83\'5cースとは異なり、こうしたデータベース接続は、プログラムを起動するごとに確立し直す必要があります。
+
Per accedere a un database è necessario un collegamento con il database, ovvero un canale di trasferimento che consente la comunicazione diretta con il database. A differenza delle sorgenti di dati presentate nella sezione precedente, il collegamento al database deve essere ristabilito ad ogni riavvio del programma.
  
{{OOo}} ▼ でのデータベース接続の確立は、各種の方法で実\'8e\'7bできます。以下のサンプルコードは、既存のデータソースへの接続方法の例です。
+
{{OOo}} offre diversi modi di stabilire i collegamenti al database. Di seguito viene riportato un esempio del metodo basato su una sorgente di dati preesistente.
  
 
<source lang="oobas">
 
<source lang="oobas">
Line 29: Line 29:
 
</source>
 
</source>
  
▼上記のサンプルコードでは、まず最初にデータベースがパスワード保護されているかをチェックしています。▼パスワード保護されていない場合は、<tt>GetConnection を使用して必要なデータベース接続を確立します。</tt>▼コ\'83\'7dンド行内の 2 つの空白文字列は、ここでのユーザー名とパスワードに該当します。
+
Il codice utilizzato nell'esempio controlla prima se il database è protetto da una password. In caso contrario, crea il collegamento al database richiesto utilizzando la chiamata <tt>GetConnection</tt>. Le due stringhe vuote nella riga di comando rappresentano il nome utente e la password.
  
データベースがパスワード保護されている場合、このサンプルコードでは、<tt>InteractionHandler</tt> を作成し、<tt>ConnectWithCompletion</tt> メソッドを使用してデータベース接続を確立しています。▼この InteractionHandler は、{{OOo}} 側からユーザーに対して、ログイン情報の入力を求める際に使用します。
+
Se il database è protetto da password, l'esempio crea un <tt>InteractionHandler</tt> e apre il collegamento al database mediante il metodo <tt>ConnectWithCompletion</tt>. L'InteractionHandler assicura che{{OOo}} richieda all'utente i dati di login necessari.
  
==▼テーブルからのデータの取得==
+
== Iterazione delle tabelle ==
通常 {{OOo}} は、<tt>ResultSet</tt> オブジェクトを通じて、テーブルへアクセスします。▼この <tt>ResultSet</tt> とは一種の\'83\'7dーカーで、<tt>SELECT コ\'83\'7dンドにより得られた多量のデータに対して、現在のデータセットを示すために使用します。</tt>
+
Per accedere a una tabella in {{OOo}} si procede generalmente dall'oggetto <tt>ResultSet</tt>. Un <tt>ResultSet</tt> è un tipo di marcatore che indica un gruppo corrente di dati all'interno di un volume di risultati ottenuti utilizzando il comando <tt>SELECT</tt>.
  
以下のサンプルコードは、<tt>ResultSet</tt> を用いてデータベーステーブルに対するクエリー処理を行う方法を示します。
+
L'esempio mostra come utilizzare un <tt>ResultSet</tt> per ricercare i valori da una tabella
 +
del database.
  
 
<source lang="oobas">
 
<source lang="oobas">
Line 66: Line 67:
 
</source>
 
</source>
  
このサンプルコードでは、データベース接続の確立後、まず最初に <tt>Connection.createObject</tt> を使用して <tt>Statement</tt> オブジェクトを作成しています。次にこの <tt>Statement</tt> オブジェクトに対して <tt>executeQuery</tt> を実施して、その結果を <tt>ResultSet</tt> に格納しています。▼こうして得られた <tt>ResultSet については、その内容が空でないかをチェックした後ループに入り、個々のレコード情報を取り出します。</tt>▼レコード情報 (上記のサンプルコードでは <tt>CustomerNumber</tt> フィールドの値) の取得は、<tt>ResultSet</tt> に対して <tt>getString メ\'83\'5cッドを適用することで行っていますが、その際のパラメータ値の 1 は、第 1 列の値を取り出すことを指定しています。</tt>
+
Una volta stabilito il collegamento al database, il codice utilizzato nell'esempio utilizza prima la chiamata <tt>Connection.createObject</tt> per creare un oggetto <tt>Statement</tt>. L'oggetto <tt>Statement</tt> usa quindi la chiamata <tt>executeQuery</tt> per restituire il valore effettivo di <tt>ResultSet</tt>. Il programma controlla ora se <tt>ResultSet</tt> esiste effettivamente e vaglia i record di dati utilizzando un ciclo. I valori richiesti (nell'esempio, quelli dal campo <tt>CustomerNumber</tt>) restituiscono il  <tt>ResultSet</tt> utilizzando il metodo <tt>getString</tt> mentre il parametro 1 determina che la chiamata è relativa ai valori della prima colonna.
  
{{Documentation/Note|▼SDBC を利用した場合の <tt>ResultSet</tt> オブジェクトは、データベースへのインタラクティブなアクセスを行うものであり、DAO ないし ADO を利用した場合の <tt>Recordset</tt> オブジェクトに相当します。}}
+
{{Documentation/Note|L'oggetto <tt>ResultSet</tt> di SDBC è paragonabile all'oggetto <tt>Recordset</tt> di DAO e ADO, dato che anch'esso fornisce un accesso iterativo a un database.}}
  
{{Documentation/Note|{{OOo}} でのデータベースアクセスは、<tt>ResultSet</tt> オブジェクトを通じて行います。▼この中には、テーブル内の登録データまたは、SQL の SELECT コ\'83\'7dンドの実行結果が格納されます。従来の <tt>ResultSet</tt> オブジェクトは、<tt>Application</tt> オブジェクトのデータナビゲーション用メソッド (<tt>DataNextRecord</tt> など) を提供するものでした。}}
+
{{Documentation/Note|In {{OOo}} si accede di fatto ai database tramite un oggetto <tt>ResultSet</tt>, che
 +
riflette il contenuto di una tabella o il risultato di un comando SQL-SELECT. In precedenza, l'oggetto <tt>ResultSet</tt> forniva i metodi residenti nell'oggetto <tt>Application</tt> per lo spostamento all'interno dei dati (ad esempio <tt>DataNextRecord</tt>).}}
  
==▼種類別データの取得==
+
== Metodi specifici del tipo per richiamare i valori ==
  
前節のサンプルコードでも触れたように、{{OOo}} にはテーブルからのデータ取得用に <tt>getString</tt> メソッドが用意されています。▼このメ\'83\'5cッドの実行結果は、文字列の形で返されます。以下の <tt>get</tt> メソッドが利用できます。
+
Come illustrato dall'esempio della sezione precedente, {{OOo}} fornisce un metodo <tt>getString</tt> per accedere ai contenuti delle tabelle. Il risultato di questo metodo assume la forma di una stringa. Sono disponibili i seguenti metodi <tt>get</tt>:
  
;<tt>getByte()</tt>: サポートする SQL のデータ型は、数値、文字、文字列。
+
;<tt>getByte()</tt>:Supporta i tipi di dati SQL per numeri, caratteri e stringhe.
;<tt>getShort()</tt>: サポートする SQL のデータ型は、数値、文字、文字列。
+
;<tt>getShort()</tt>:Supporta i tipi di dati SQL per numeri, caratteri e stringhe.
;<tt>getInt()</tt>: サポートする SQL のデータ型は、数値、文字、文字列。
+
;<tt>getInt()</tt>:Supporta i tipi di dati SQL per numeri, caratteri e stringhe.
;<tt>getLong()</tt>: サポートする SQL のデータ型は、数値、文字、文字列。
+
;<tt>getLong()</tt>:Supporta i tipi di dati SQL per numeri, caratteri e stringhe.
;<tt>getFloat()</tt>: サポートする SQL のデータ型は、数値、文字、文字列。
+
;<tt>getFloat()</tt>:Supporta i tipi di dati SQL per numeri, caratteri e stringhe.
;<tt>getDouble()</tt>: サポートする SQL のデータ型は、数値、文字、文字列。
+
;<tt>getDouble()</tt>:Supporta i tipi di dati SQL per numeri, caratteri e stringhe.
;<tt>getBoolean()</tt>: サポートする SQL のデータ型は、数値、文字、文字列。
+
;<tt>getBoolean()</tt>:Supporta i tipi di dati SQL per numeri, caratteri e stringhe.
;<tt>getString()</tt>: サポートする SQL のデータ型は、すべてのデータ型。
+
;<tt>getString()</tt>:Supporta tutti i tipi di dati SQL.
;<tt>getBytes()</tt> サポートする SQL のデータ型は、バイナリデータ。
+
;<tt>getBytes()</tt>:Supporta i tipi di dati SQL per i valori binari.
;<tt>getDate()</tt>: サポートする SQL のデータ型は、数値、文字列、日付と時刻のタイムスタンプ。
+
;<tt>getDate()</tt>:Supporta i tipi di dati SQL per numeri, stringhe, data e contrassegno dell'ora.
;<tt>getTime()</tt>: サポートする SQL のデータ型は、数値、文字列、日付と時刻のタイムスタンプ。
+
;<tt>getTime()</tt>:Supporta i tipi di dati SQL per numeri, stringhe, data e contrassegno dell'ora.
;<tt>getTimestamp()</tt>: サポートする SQL のデータ型は、数値、文字列、日付と時刻のタイムスタンプ。
+
;<tt>getTimestamp()</tt>:Supporta i tipi di dati SQL per numeri, stringhe, data e contrassegno dell'ora.
;<tt>getCharacterStream()</tt>: サポートする SQL のデータ型は、数値、文字列、バイナリデータ。
+
;<tt>getCharacterStream()</tt>:Supporta i tipi di dati SQL per numeri, stringhe e valori binari.
;<tt>getUnicodeStream()</tt>: サポートする SQL のデータ型は、数値、文字列、バイナリデータ。
+
;<tt>getUnicodeStream()</tt>:Supporta i tipi di dati SQL per numeri, stringhe e valori binari.
;<tt>getBinaryStream()</tt>: バイナリデータ。
+
;<tt>getBinaryStream()</tt>:Valori binari.
;<tt>getObject()</tt>: サポートする SQL のデータ型は、すべてのデータ型。
+
;<tt>getObject()</tt>:Supporta tutti i tipi di dati SQL.
  
▼いずれのメ\'83\'5cッドを用いる場合でも、データを取得する列の番号をパラメータとして指定します。
+
In tutti i casi, il numero di colonne dovrebbe essere elencato come parametro di cui ricercare i valori.
  
==▼ResultSet のバリエーション==
+
== Le varianti ResultSet ==
  
▼データベースへのアクセス処理には、かなりの時間を要する場合があります。このため {{OOo}} には <tt>ResultSets</tt> の処理を最適化する各種の方法が用意されており、アクセス速度を制御できるようになっています。▼<tt>ResultSet</tt> の機\'94\'5cが豊富になるほど、その実装は複雑化する傾向にあり、その分だけ処理速度が低下します。
+
La velocità è spesso un fattore critico per l'accesso ai database. {{OOo}} offre pertanto
 +
diversi modi per ottimizzare <tt>ResultSets</tt> e controllare quindi la velocità di accesso. Maggiore è il numero di funzioni fornito da <tt>ResultSet</tt>, più complessa sarà l'implementazione e di conseguenza più lente saranno le funzioni.
  
簡単な <tt>ResultSet,</tt> で、最低限の関数が利用できます。▼この場合、テーブル内でのデータ検索は順方向にのみ進行し、必要なデータも順次取得するだけです。▼そのため、データ更新などのより複雑なナビゲーションが必要となっても、このままでは対処できません。
+
Un <tt>ResultSet,</tt> fornisce la gamma minima di funzioni disponibili. Consente di applicare l'iterazione solo in avanti e per i valori oggetto dell'interrogazione. Opzioni di navigazione più estese, quali la possibilità di modificare i valori, non sono pertanto incluse.
  
<tt>ResultSet</tt> の作成に用いた Statement オブジェクトには、<tt>ResultSet</tt> の機能に関係するいくつかのオプションが用意されています。
+
L'oggetto Statement utilizzato per creare il <tt>ResultSet</tt> fornisce alcune proprietà che
 +
consentono di incidere sulle funzioni del <tt>ResultSet</tt>:
  
;<tt>ResultSetConcurrency (const)</tt>: データが変更可能かどうかの指定 (<idl>com.sun.star.sdbc.ResultSetConcurrency</idl> に一致する指定)
+
;<tt>ResultSetConcurrency (const)</tt>:Specifiche sulla possibilità di modificare o meno i dati (specifiche conformi a <idl> com.sun.star.sdbc.ResultSetConcurrency</idl>).
;<tt>ResultSetType (const)</tt>: <tt>ResultSets</tt> のタイプに関する指定 (<idl>com.sun.star.sdbc.ResultSetType</idl> に一致する指定)
+
;<tt>ResultSetType (const)</tt>:Specifiche riguardanti il tipo di <tt>ResultSets</tt> (specifiche conformi a <idl>com.sun.star.sdbc.ResultSetType</idl>).
  
<idl>com.sun.star.sdbc.ResultSetConcurrency</idl> では、以下の値が定義されます。
+
I valori definiti in <idl>com.sun.star.sdbc.ResultSetConcurrency</idl> sono:
  
;<tt>UPDATABLE</tt>: <tt>ResultSet</tt> でのデータ更新を許可する。
+
;<tt>UPDATABLE</tt>:<tt>ResultSet</tt> consente di modificare i valori.
;<tt>READ_ONLY</tt>: <tt>ResultSet</tt>   でのデータ更新を許可しない。
+
;<tt>READ_ONLY</tt>:<tt>ResultSet</tt> non consente modifiche.
  
<idl>com.sun.star.sdbc.ResultSetConcurrency</idl> に定められた定数では、以下の指定を行えます。
+
Il gruppo di costanti <idl>com.sun.star.sdbc.ResultSetConcurrency</idl> fornisce le
 +
seguenti specifiche:
  
;<tt>FORWARD_ONLY</tt>: <tt>ResultSet</tt> に対し順方向のナビゲーションのみを許可する。
+
;<tt>FORWARD_ONLY</tt>:<tt>ResultSet</tt> consente solo lo spostamento in avanti.
;<tt>SCROLL_INSENSITIVE</tt>: <tt>ResultSet</tt> にすべてのナビゲーションを許可するが、オリジナルデータへの変更は記録しない。
+
;<tt>SCROLL_INSENSITIVE</tt>:<tt>ResultSet</tt> consente qualsiasi tipo di spostamento,
;<tt>SCROLL_SENSITIVE</tt>: <tt>ResultSet</tt> にすべてのナビゲーションを許可し、オリジナルデータへの変更による <tt>ResultSet</tt> への影響を認める。
+
tuttavia le modifiche ai dati originali non sono registrate.
 +
;<tt>SCROLL_SENSITIVE</tt>:<tt>ResultSet</tt> consente qualsiasi tipo di spostamento; le modifiche ai dati originali incidono su <tt>ResultSet</tt>
  
{{Documentation/Note|<tt>ResultSet</tt> <tt>READ_ONLY</tt> 属性が指定された <tt>SCROLL_INSENSITIVE</tt> は、ADO および DAO の <tt>Snapshot</tt> タイプに相当します。}}
+
{{Documentation/Note|Un <tt>ResultSet</tt> contenente le proprietà<tt>READ_ONLY</tt> e <tt>SCROLL_INSENSITIVE</tt> corrisponde a un gruppo di record del tipo <tt>Snapshot</tt> in ADO e DAO. }}
  
<tt>ResultSet's</tt> <tt>UPDATEABLE</tt> <tt>SCROLL_SENSITIVE</tt> 属性が指定された <tt></tt>ResultSet は、ADO および DAO の <tt>Dynaset</tt> タイプ <tt>Recordset</tt> に相当します。
+
Quando si utilizzano le proprietà <tt>ResultSet's</tt> <tt>UPDATEABLE</tt> e <tt>SCROLL_SENSITIVE</tt>, la portata della funzione di un <tt>ResultSet</tt> è paragonabile a un <tt>Dynaset</tt> di tipo <tt>Recordset</tt> di ADO e DAO.
  
==▼ResultSets のナビゲーション用メ\'83\'5cッド==
+
== Metodi per lo spostamento nei ResultSets ==
  
<tt>ResultSet</tt> または <tt>SCROLL_INSENSITIVE</tt> が指定された <tt>SCROLL_SENSITIVE</tt> は、すべてのデータナビゲーション用メソッドを利用できます。▼以下に主要なメ\'83\'5cッドを示します。
+
Se un <tt>ResultSet</tt> è di tipo <tt>SCROLL_INSENSITIVE</tt> o <tt>SCROLL_SENSITIVE</tt> supporta una serie completa di metodi di spostamento nel gruppo di dati. I metodi principali
 +
sono i seguenti:
  
;<tt>next()</tt>: 次のデータレコードへ移動。
+
;<tt>next()</tt>:Spostamento al record di dati successivo.
;<tt>previous()</tt>: 前のデータレコードへ移動。
+
;<tt>previous()</tt>:Spostamento al record di dati precedente.
;<tt>first()</tt>: 最初のデータレコードへ移動。
+
;<tt>first()</tt>:Spostamento al primo record di dati.
;<tt>last()</tt>: 最後のデータレコードへ移動。
+
;<tt>last()</tt>:Spostamento all'ultimo record di dati.
;<tt>beforeFirst()</tt>: 最初のデータレコードの前へ移動。
+
;<tt>beforeFirst()</tt>:Spostamento a prima del primo record di dati.
;<tt>afterLast()</tt>: 最後のデータレコードの次へ移動。
+
;<tt>afterLast()</tt>:Spostamento a dopo l'ultimo record di dati.
  
▼いずれのメ\'83\'5cッドを実行した場合も、その戻り値として、ナビゲーションが正常に終了したかを示すブール値が返されます。
+
Tutti i metodi restituiscono un parametro booleano (logico) che specifica se lo spostamento ha avuto successo.
  
▼現在のカー\'83\'5cル位置を確認するには、以下のテスト用メ\'83\'5cッドを使用して、戻り値として返されるブール値から判定します。
+
Per determinare la posizione corrente del cursore, sono disponibili i seguenti metodi
 +
di test, che restituiscono tutti un valore logico:
  
;<tt>isBeforeFirst()</tt>: <tt>ResultSet</tt> が最初のデータレコードの前にあるかを判定。
+
;<tt>isBeforeFirst()</tt>:<tt>ResultSet</tt> è prima del primo record di dati.
;<tt>isAfterLast()</tt>: <tt>ResultSet</tt> が最後のデータレコードの次にあるかを判定。
+
;<tt>isAfterLast()</tt>:<tt>ResultSet</tt> è dopo l'ultimo record di dati.
;<tt>isFirst()</tt>: <tt>ResultSet</tt> が最初のデータレコードにあるかを判定。
+
;<tt>isFirst()</tt>:<tt>ResultSet</tt> è il primo record di dati.
;<tt>isLast()</tt>: <tt>ResultSet</tt> が最後のデータレコードにあるかを判定。
+
;<tt>isLast()</tt>:<tt>ResultSet</tt> è l'ultimo record di dati.
  
==▼データレコードの変更==
+
== Modifica dei record di dati ==
  
<tt>ResultSet</tt> の作成時に <tt>ResultSetConcurrency</tt> = <tt>UPDATEABLE</tt> と指定した場合、データレコードを変更することができます。▼このような状況は、基\'96\'7b的に SQL コ\'83\'7dンドがデータベースへのデータの書き換えを許可している場合のみ有効です。▼ただし、列のリンクや累積計算を行う複雑な SQL コ\'83\'7dンドなどに対しては、この状況は当てはまりません。
+
Se è stato creato un <tt>ResultSet</tt> con il valore <tt>ResultSetConcurrency</tt> = <tt>UPDATEABLE</tt>, il suo contenuto può essere modificato. Ciò è applicabile solo finché il comando SQL consente di riscrivere i dati nel database (dipende dal principio). Non è ad esempio possibile con i comandi SQL complessi con colonne collegate o valori accumulati.
  
<tt>ResultSet</tt> オブジェクトには、データ変更用に <tt>Update</tt> メソッドが用意されていますが、その構成はデータ取得用の <tt>get</tt> メソッドと基本的に同じです。▼たとえば文字列の書き換えを許可するには <tt>updateString</tt> メ\'83\'5cッドを使用します。
+
L'oggetto <tt>ResultSet</tt> fornisce i metodi <tt>Update</tt> per la modifica dei valori, che sono strutturati nello stesso modo dei metodi <tt>get</tt> per il richiamo dei valori. Il metodo <tt>updateString</tt>, ad esempio, consente di scrivere una stringa.
  
必要な変更を行なったデータは、<tt>()updateRow()</tt> メ\'83\'5cッドを用いてデータベースに再転送する必要があります。▼このメ\'83\'5cッド呼び出しは、次のナビゲーション用コ\'83\'7dンドの実行前に実行しておく必要があり、実行しないと、変更した値は失われます。
+
Dopo la modifica, i valori devono essere trasferiti nel database utilizzando il metodo <tt>updateRow()</tt>. La chiamata dovrà aver luogo prima del comando di navigazione successivo, altrimenti i valori andranno persi.
  
データ変更時に何らかのエラーが発生した場合、<tt>()cancelRowUpdates()</tt> メ\'83\'5cッドを使用することで、これらの処理を取り消すことができます。ただしこのような処理の取り消しが行えるのは、<tt>updateRow()</tt> によってデータベース上のデータを書き直す前の段階だけです。
+
Se viene commesso un errore durante le modifiche, è possibile procedere all'annullamento utilizzando il metodo <tt>cancelRowUpdates()</tt>. Questa chiamata è disponibile solo se i dati non sono stati sovrascritti nel database mediante <tt>updateRow()</tt>.
  
 
{{PDL1}}
 
{{PDL1}}
 
{{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Database Access}}
 
{{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Database Access}}

Revision as of 18:22, 25 June 2009

Template:EN/Documentation/BASICGuideTOC/v2


Per accedere a un database è necessario un collegamento con il database, ovvero un canale di trasferimento che consente la comunicazione diretta con il database. A differenza delle sorgenti di dati presentate nella sezione precedente, il collegamento al database deve essere ristabilito ad ogni riavvio del programma.

Apache OpenOffice offre diversi modi di stabilire i collegamenti al database. Di seguito viene riportato un esempio del metodo basato su una sorgente di dati preesistente.

Dim DatabaseContext As Object
Dim DataSource As Object
Dim Connection As Object
Dim InteractionHandler as Object
 
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("Customers")
 
If Not DataSource.IsPasswordRequired Then
  Connection = DataSource.GetConnection("","")
Else
  InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
  Connection = DataSource.ConnectWithCompletion(InteractionHandler)
End If

Il codice utilizzato nell'esempio controlla prima se il database è protetto da una password. In caso contrario, crea il collegamento al database richiesto utilizzando la chiamata GetConnection. Le due stringhe vuote nella riga di comando rappresentano il nome utente e la password.

Se il database è protetto da password, l'esempio crea un InteractionHandler e apre il collegamento al database mediante il metodo ConnectWithCompletion. L'InteractionHandler assicura cheApache OpenOffice richieda all'utente i dati di login necessari.

Iterazione delle tabelle

Per accedere a una tabella in Apache OpenOffice si procede generalmente dall'oggetto ResultSet. Un ResultSet è un tipo di marcatore che indica un gruppo corrente di dati all'interno di un volume di risultati ottenuti utilizzando il comando SELECT.

L'esempio mostra come utilizzare un ResultSet per ricercare i valori da una tabella del database.

Dim DatabaseContext As Object
Dim DataSource As Object
Dim Connection As Object
Dim InteractionHandler as Object
Dim Statement As Object
Dim ResultSet As Object
 
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("Customers")
 
If Not DataSource.IsPasswordRequired Then
  Connection = DataSource.GetConnection("","")
Else
  InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
  Connection = DataSource.ConnectWithCompletion(InteractionHandler)
End If
 
Statement = Connection.createStatement()
ResultSet = Statement.executeQuery("SELECT ""CustomerNumber"" FROM ""Customer""") 
 
If Not IsNull(ResultSet) Then
  While ResultSet.next
    MsgBox ResultSet.getString(1)
  Wend
End If

Una volta stabilito il collegamento al database, il codice utilizzato nell'esempio utilizza prima la chiamata Connection.createObject per creare un oggetto Statement. L'oggetto Statement usa quindi la chiamata executeQuery per restituire il valore effettivo di ResultSet. Il programma controlla ora se ResultSet esiste effettivamente e vaglia i record di dati utilizzando un ciclo. I valori richiesti (nell'esempio, quelli dal campo CustomerNumber) restituiscono il ResultSet utilizzando il metodo getString mentre il parametro 1 determina che la chiamata è relativa ai valori della prima colonna.

Template:Documentation/Note

Template:Documentation/Note

Metodi specifici del tipo per richiamare i valori

Come illustrato dall'esempio della sezione precedente, Apache OpenOffice fornisce un metodo getString per accedere ai contenuti delle tabelle. Il risultato di questo metodo assume la forma di una stringa. Sono disponibili i seguenti metodi get:

getByte()
Supporta i tipi di dati SQL per numeri, caratteri e stringhe.
getShort()
Supporta i tipi di dati SQL per numeri, caratteri e stringhe.
getInt()
Supporta i tipi di dati SQL per numeri, caratteri e stringhe.
getLong()
Supporta i tipi di dati SQL per numeri, caratteri e stringhe.
getFloat()
Supporta i tipi di dati SQL per numeri, caratteri e stringhe.
getDouble()
Supporta i tipi di dati SQL per numeri, caratteri e stringhe.
getBoolean()
Supporta i tipi di dati SQL per numeri, caratteri e stringhe.
getString()
Supporta tutti i tipi di dati SQL.
getBytes()
Supporta i tipi di dati SQL per i valori binari.
getDate()
Supporta i tipi di dati SQL per numeri, stringhe, data e contrassegno dell'ora.
getTime()
Supporta i tipi di dati SQL per numeri, stringhe, data e contrassegno dell'ora.
getTimestamp()
Supporta i tipi di dati SQL per numeri, stringhe, data e contrassegno dell'ora.
getCharacterStream()
Supporta i tipi di dati SQL per numeri, stringhe e valori binari.
getUnicodeStream()
Supporta i tipi di dati SQL per numeri, stringhe e valori binari.
getBinaryStream()
Valori binari.
getObject()
Supporta tutti i tipi di dati SQL.

In tutti i casi, il numero di colonne dovrebbe essere elencato come parametro di cui ricercare i valori.

Le varianti ResultSet

La velocità è spesso un fattore critico per l'accesso ai database. Apache OpenOffice offre pertanto diversi modi per ottimizzare ResultSets e controllare quindi la velocità di accesso. Maggiore è il numero di funzioni fornito da ResultSet, più complessa sarà l'implementazione e di conseguenza più lente saranno le funzioni.

Un ResultSet, fornisce la gamma minima di funzioni disponibili. Consente di applicare l'iterazione solo in avanti e per i valori oggetto dell'interrogazione. Opzioni di navigazione più estese, quali la possibilità di modificare i valori, non sono pertanto incluse.

L'oggetto Statement utilizzato per creare il ResultSet fornisce alcune proprietà che consentono di incidere sulle funzioni del ResultSet:

ResultSetConcurrency (const)
Specifiche sulla possibilità di modificare o meno i dati (specifiche conformi a com.sun.star.sdbc.ResultSetConcurrency).
ResultSetType (const)
Specifiche riguardanti il tipo di ResultSets (specifiche conformi a com.sun.star.sdbc.ResultSetType).

I valori definiti in com.sun.star.sdbc.ResultSetConcurrency sono:

UPDATABLE
ResultSet consente di modificare i valori.
READ_ONLY
ResultSet non consente modifiche.

Il gruppo di costanti com.sun.star.sdbc.ResultSetConcurrency fornisce le seguenti specifiche:

FORWARD_ONLY
ResultSet consente solo lo spostamento in avanti.
SCROLL_INSENSITIVE
ResultSet consente qualsiasi tipo di spostamento,

tuttavia le modifiche ai dati originali non sono registrate.

SCROLL_SENSITIVE
ResultSet consente qualsiasi tipo di spostamento; le modifiche ai dati originali incidono su ResultSet

Template:Documentation/Note

Quando si utilizzano le proprietà ResultSet's UPDATEABLE e SCROLL_SENSITIVE, la portata della funzione di un ResultSet è paragonabile a un Dynaset di tipo Recordset di ADO e DAO.

Metodi per lo spostamento nei ResultSets

Se un ResultSet è di tipo SCROLL_INSENSITIVE o SCROLL_SENSITIVE supporta una serie completa di metodi di spostamento nel gruppo di dati. I metodi principali sono i seguenti:

next()
Spostamento al record di dati successivo.
previous()
Spostamento al record di dati precedente.
first()
Spostamento al primo record di dati.
last()
Spostamento all'ultimo record di dati.
beforeFirst()
Spostamento a prima del primo record di dati.
afterLast()
Spostamento a dopo l'ultimo record di dati.

Tutti i metodi restituiscono un parametro booleano (logico) che specifica se lo spostamento ha avuto successo.

Per determinare la posizione corrente del cursore, sono disponibili i seguenti metodi di test, che restituiscono tutti un valore logico:

isBeforeFirst()
ResultSet è prima del primo record di dati.
isAfterLast()
ResultSet è dopo l'ultimo record di dati.
isFirst()
ResultSet è il primo record di dati.
isLast()
ResultSet è l'ultimo record di dati.

Modifica dei record di dati

Se è stato creato un ResultSet con il valore ResultSetConcurrency = UPDATEABLE, il suo contenuto può essere modificato. Ciò è applicabile solo finché il comando SQL consente di riscrivere i dati nel database (dipende dal principio). Non è ad esempio possibile con i comandi SQL complessi con colonne collegate o valori accumulati.

L'oggetto ResultSet fornisce i metodi Update per la modifica dei valori, che sono strutturati nello stesso modo dei metodi get per il richiamo dei valori. Il metodo updateString, ad esempio, consente di scrivere una stringa.

Dopo la modifica, i valori devono essere trasferiti nel database utilizzando il metodo updateRow(). La chiamata dovrà aver luogo prima del comando di navigazione successivo, altrimenti i valori andranno persi.

Se viene commesso un errore durante le modifiche, è possibile procedere all'annullamento utilizzando il metodo cancelRowUpdates(). Questa chiamata è disponibile solo se i dati non sono stati sovrascritti nel database mediante updateRow().

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools