Usage
To use a row set, create a RowSet instance at the global service manager through the service name com.sun.star.sdb.RowSet. Next, the RowSet needs a connection and a command before it can be executed. These have to be configured through RowSet properties.
Connection
- There are three different ways to establish a connection:
- Setting DataSourceName to a data source from the database context. If the
DataSourceNameis not a URL, then theRowSetuses the name to get theDataSourcefrom theDatabaseContextto create a connection to that data source. - Setting DataSourceName to a database URL. The row set tries to use this URL to establish a connection. Database URLs are described in Connecting Using the DriverManager and a Database URL.
- Setting ActiveConnection makes a row set ready for immediate use. The row set uses this connection.
- Setting DataSourceName to a data source from the database context. If the
- The difference between the two properties is that in the first case the
RowSetowns the connection. TheRowSetdisposes the connection when it is disposed. In the second case, theRowSetonly uses the connection. The user of aRowSetis responsible for the disposition of the connection. For a simpleRowSet, use DataSourceName, but when sharing the connection between different row sets, then use ActiveConnection.
- If there is already a connection, for example, the user opened a database form, open another row set based upon the property ActiveConnection of the form. Put the
ActiveConnectionof the form into theActiveConnectionproperty of the new row set.
Command
- With a connection and a command, the row set is ready to be executed calling
execute()on the com.sun.star.sdbc.XRowSet interface of the row set. For interactive logon, useexecuteWithCompletion(), see Connecting Through a DataSource. If interactive logon is not feasible for your application, the propertiesUserandPasswordcan be used to connect to a database that requires logon.
- Once the method for how
RowSetcreates it connections has been determined, the properties Command and CommandType have to be set. TheCommandTypecan beTABLE,QUERYorCOMMANDwhere theCommandcan be a table or query name, or an SQL command.
The following table shows the properties supported by com.sun.star.sdb.RowSet.
| Properties of com.sun.star.sdb.RowSet | |
|---|---|
| ActiveConnection | com.sun.star.sdbc.XConnection. The active connection is generated by a DataSource or by a URL. It could also be set from the outside. If set from outside, the RowSet is not responsible for disposition of the connection.
|
| DataSourceName | string - The name of the DataSource to use. This could be a named DataSource or the URL of a data access component.
|
| Command | string - The Command is the command that should be executed. The type of command depends on the com.sun.star.sdb.CommandType.
|
| CommandType | com.sun.star.sdb.CommandType Command type:
|
| ActiveCommand | [readonly] string - The command which is currently used. com.sun.star.sdb.CommandType
|
| IgnoreResult | boolean - Indicates if all results should be discarded.
|
| Filter | string - Contains a additional filter for a RowSet.
|
| ApplyFilter | boolean - Indicates if the filter should be applied. The default is false.
|
| Order | An additional sort order definition for a RowSet.
|
| Privileges | [readonly] long, constants group com.sun.star.sdbcx.Privilege. Indicates the privileges for insert, update, and delete.
|
| IsModified | [readonly] boolean - Indicates if the current row is modified.
|
| IsNew | [readonly] boolean - Indicates if the current row is the InsertRow and can be inserted into the database.
|
| RowCount | [readonly] long - Contains the number of rows accessed in a the data source.
|
| IsRowCountFinal | [readonly] boolean - Indicates if all rows of the RowSet have been counted.
|
| UpdateTableName | string - The name of the table that should be updated. This is used for queries that relate to more than one table.
|
| UpdateSchemaName | string - The name of the table schema.
|
| UpdateCatalogName | string - The name of the table catalog.
|
The com.sun.star.sdb.RowSet includes the service com.sun.star.sdbc.RowSet and its properties. Important settings such as User and Password come from this service:
| Properties of com.sun.star.sdbc.RowSet | |
|---|---|
| DataSourceName | string - Is the name of a named datasource to use.
|
| URL | string - The connection URL. Can be used instead of the DataSourceName.
|
| Command | string - The command that should be executed.
|
| TransactionIsolation | long - Indicates the transaction isolation level that should be used for the connection, according to com.sun.star.sdbc.TransactionIsolation
|
| TypeMap | com::sun::star::container::XNameAccess. The type map that is used for the custom mapping of SQL structured types and distinct types.
|
| EscapeProcessing | boolean - Determines if escape processing is on or off. If escape scanning is on (the default), the driver does the escape substitution before sending the SQL to the database. This is only evaluated if the CommandType is COMMAND.
|
| QueryTimeOut | long - Retrieves the number of seconds the driver waits for a Statement to execute. If the limit is exceeded, a SQLException is thrown. There is no limitation if set to zero.
|
| MaxFieldSize | long - Returns the maximum number of bytes allowed for any column value. This limit is the maximum number of bytes that can be returned for any column value. The limit applies only to DataType::BINARY<ode>, |
| MaxRows | long - Retrieves the maximum number of rows that a ResultSet can contain. If the limit is exceeded, the excess rows are silently dropped. There is no limitation if set to zero.
|
| User | string - Determines the user to open the connection for.
|
| Password | string - Determines the user to open the connection for.
|
| ResultSetType | long - Determine the result set type according to com.sun.star.sdbc.ResultSetType
|
If the command returns results, that is, it selects data, use XRowSet to manipulate the data, because XRowSet is derived from XResultSet. For details on manipulating a com.sun.star.sdb.ResultSet, see Result Sets.
The code fragment below shows how to create a RowSet.
public static void useRowSet(XMultiServiceFactory _rMSF) throws com.sun.star.uno.Exception {
// first we create our RowSet object
XRowSet xRowRes = (XRowSet)UnoRuntime.queryInterface(XRowSet.class,
_rMSF.createInstance("com.sun.star.sdb.RowSet"));
System.out.println("RowSet created!");
// set the properties needed to connect to a database
XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xRowRes);
xProp.setPropertyValue("DataSourceName", "Bibliography");
xProp.setPropertyValue("Command", "biblio");
xProp.setPropertyValue("CommandType", new Integer(com.sun.star.sdb.CommandType.TABLE));
xRowRes.execute();
System.out.println("RowSet executed!");
XComponent xComp = (XComponent)UnoRuntime.queryInterface(XComponent.class, xRowRes);
xComp.dispose();
System.out.println("RowSet destroyed!");
}
The value of the read-only RowSet properties is only valid after the first call to execute() on the RowSet. This snippet shows how to read the privileges out of the RowSet:
public static void showRowSetReadOnlyProps(XMultiServiceFactory _rMSF) throws com.sun.star.uno.Exception {
// first we create our RowSet object
XRowSet xRowRes =
(XRowSet)UnoRuntime.queryInterface(XRowSet.class_rMSF.createInstance(
"com.sun.star.sdb.RowSet"));
System.out.println("RowSet created!");
// set the properties needed to connect to a database
XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xRowRes);
xProp.setPropertyValue("DataSourceName", "Bibliography");
xProp.setPropertyValue("Command", "biblio");
xProp.setPropertyValue("CommandType", new Integer(com.sun.star.sdb.CommandType.TABLE));
xRowRes.execute();
System.out.println("RowSet executed!");
Integer aPriv = (Integer)xProp.getPropertyValue("Privileges");
int nPriv = aPriv.intValue();
if ((nPriv & Privilege.SELECT) == Privilege.SELECT) System.out.println("SELECT");
if ((nPriv & Privilege.INSERT) == Privilege.INSERT) System.out.println("INSERT");
if ((nPriv & Privilege.UPDATE) == Privilege.UPDATE) System.out.println("UPDATE");
if ((nPriv & Privilege.DELETE) == Privilege.DELETE) System.out.println("DELETE");
XComponent xComp = (XComponent)UnoRuntime.queryInterface(XComponent.class, xRowRes);
xComp.dispose();
System.out.println("RowSet destroyed!");
}
The next example reads the properties IsRowCountFinal and RowCount.
public static void showRowSetRowCount(XMultiServiceFactory _rMSF) throws com.sun.star.uno.Exception {
// first we create our RowSet object
XRowSet xRowRes = (XRowSet)UnoRuntime.queryInterface(XRowSet.class,
_rMSF.createInstance("com.sun.star.sdb.RowSet"));
System.out.println("RowSet created!");
// set the properties needed to connect to a database
XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class,xRowRes);
xProp.setPropertyValue("DataSourceName","Bibliography");
xProp.setPropertyValue("Command","biblio");
xProp.setPropertyValue("CommandType",new Integer(com.sun.star.sdb.CommandType.TABLE));
xRowRes.execute();
System.out.println("RowSet executed!");
// now look if the RowCount is already final
System.out.println("The RowCount is final: " + xProp.getPropertyValue("IsRowCountFinal"));
XResultSet xRes = (XResultSet)UnoRuntime.queryInterface(XResultSet.class,xRowRes);
xRes.last();
System.out.println("The RowCount is final: " + xProp.getPropertyValue("IsRowCountFinal"));
System.out.println("There are " + xProp.getPropertyValue("RowCount") + " rows!");
// now destroy the RowSet
XComponent xComp = (XComponent)UnoRuntime.queryInterface(XComponent.class,xRowRes);
xComp.dispose();
System.out.println("RowSet destroyed!");
}
Occasionally, it is useful for the user to be notified when the RowCount is final. That is accomplished by adding a com.sun.star.beans.XPropertyChangeListener for the property IsRowCountFinal.
| Content on this page is licensed under the Public Documentation License (PDL). |