xref: /trunk/main/odk/examples/DevelopersGuide/Database/RowSet.java (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  *  The Contents of this file are made available subject to the terms of
4  *  the BSD license.
5  *
6  *  Copyright 2000, 2010 Oracle and/or its affiliates.
7  *  All rights reserved.
8  *
9  *  Redistribution and use in source and binary forms, with or without
10  *  modification, are permitted provided that the following conditions
11  *  are met:
12  *  1. Redistributions of source code must retain the above copyright
13  *     notice, this list of conditions and the following disclaimer.
14  *  2. Redistributions in binary form must reproduce the above copyright
15  *     notice, this list of conditions and the following disclaimer in the
16  *     documentation and/or other materials provided with the distribution.
17  *  3. Neither the name of Sun Microsystems, Inc. nor the names of its
18  *     contributors may be used to endorse or promote products derived
19  *     from this software without specific prior written permission.
20  *
21  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
28  *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
29  *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
30  *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
31  *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  *
33  *************************************************************************/
34 
35 import java.io.*;
36 
37 import com.sun.star.comp.helper.RegistryServiceFactory;
38 import com.sun.star.comp.servicemanager.ServiceManager;
39 import com.sun.star.lang.XMultiComponentFactory;
40 import com.sun.star.lang.XServiceInfo;
41 import com.sun.star.lang.XComponent;
42 import com.sun.star.bridge.XUnoUrlResolver;
43 import com.sun.star.uno.UnoRuntime;
44 import com.sun.star.uno.XComponentContext;
45 import com.sun.star.beans.XPropertySet;
46 import com.sun.star.container.XNameAccess;
47 import com.sun.star.sdbc.*;
48 import com.sun.star.sdbcx.Privilege;
49 import com.sun.star.sdb.CommandType;
50 import com.sun.star.sdb.XRowSetApproveBroadcaster;
51 
52 public class RowSet
53 {
54     private static XComponentContext xContext = null;
55     private static XMultiComponentFactory xMCF = null;
56     public static void main(String argv[]) throws java.lang.Exception
57     {
58         try {
59             // get the remote office component context
60             xContext = com.sun.star.comp.helper.Bootstrap.bootstrap();
61             System.out.println("Connected to a running office ...");
62             xMCF = xContext.getServiceManager();
63         }
64         catch( Exception e) {
65             System.err.println("ERROR: can't get a component context from a running office ...");
66             e.printStackTrace(System.out);
67             System.exit(1);
68         }
69 
70         try{
71             showRowSetEvents();
72             showRowSetRowCount();
73             showRowSetPrivileges();
74             useRowSet();
75         }
76         catch(com.sun.star.uno.Exception e)
77         {
78             System.err.println(e);
79             e.printStackTrace();
80         }
81         System.exit(0);
82     }
83 
84     public static void printDataSources() throws com.sun.star.uno.Exception
85     {
86         // create a DatabaseContext and print all DataSource names
87         XNameAccess xNameAccess = (XNameAccess)UnoRuntime.queryInterface(
88             XNameAccess.class,
89             xMCF.createInstanceWithContext("com.sun.star.sdb.DatabaseContext",
90                                            xContext));
91         String aNames [] = xNameAccess.getElementNames();
92         for(int i=0;i<aNames.length;++i)
93             System.out.println(aNames[i]);
94     }
95 
96     public static void useRowSet() throws com.sun.star.uno.Exception
97     {
98         // first we create our RowSet object
99         XRowSet xRowRes = (XRowSet)UnoRuntime.queryInterface(
100             XRowSet.class,
101             xMCF.createInstanceWithContext("com.sun.star.sdb.RowSet", xContext));
102 
103         System.out.println("RowSet created!");
104         // set the properties needed to connect to a database
105         XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class,xRowRes);
106         xProp.setPropertyValue("DataSourceName","Bibliography");
107         xProp.setPropertyValue("Command","biblio");
108         xProp.setPropertyValue("CommandType",new Integer(com.sun.star.sdb.CommandType.TABLE));
109 
110         xRowRes.execute();
111         System.out.println("RowSet executed!");
112 
113 
114         XComponent xComp = (XComponent)UnoRuntime.queryInterface(XComponent.class,xRowRes);
115         xComp.dispose();
116         System.out.println("RowSet destroyed!");
117     }
118 
119     public static void showRowSetPrivileges() throws com.sun.star.uno.Exception
120     {
121         // first we create our RowSet object
122         XRowSet xRowRes = (XRowSet)UnoRuntime.queryInterface(
123             XRowSet.class,
124             xMCF.createInstanceWithContext("com.sun.star.sdb.RowSet", xContext));
125 
126         System.out.println("RowSet created!");
127         // set the properties needed to connect to a database
128         XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class,xRowRes);
129         xProp.setPropertyValue("DataSourceName","Bibliography");
130         xProp.setPropertyValue("Command","biblio");
131         xProp.setPropertyValue("CommandType",new Integer(com.sun.star.sdb.CommandType.TABLE));
132 
133         xRowRes.execute();
134         System.out.println("RowSet executed!");
135 
136         Integer aPriv = (Integer)xProp.getPropertyValue("Privileges");
137         int nPriv  = aPriv.intValue();
138         if( (nPriv & Privilege.SELECT) == Privilege.SELECT)
139             System.out.println("SELECT");
140         if( (nPriv & Privilege.INSERT) == Privilege.INSERT)
141             System.out.println("INSERT");
142         if( (nPriv & Privilege.UPDATE) == Privilege.UPDATE)
143             System.out.println("UPDATE");
144         if( (nPriv & Privilege.DELETE) == Privilege.DELETE)
145             System.out.println("DELETE");
146 
147         // now destroy the RowSet
148         XComponent xComp = (XComponent)UnoRuntime.queryInterface(XComponent.class,xRowRes);
149         xComp.dispose();
150         System.out.println("RowSet destroyed!");
151     }
152 
153     public static void showRowSetRowCount() throws com.sun.star.uno.Exception
154     {
155         // first we create our RowSet object
156         XRowSet xRowRes = (XRowSet)UnoRuntime.queryInterface(
157             XRowSet.class,
158             xMCF.createInstanceWithContext("com.sun.star.sdb.RowSet", xContext));
159 
160         System.out.println("RowSet created!");
161         // set the properties needed to connect to a database
162         XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class,xRowRes);
163         xProp.setPropertyValue("DataSourceName","Bibliography");
164         xProp.setPropertyValue("Command","biblio");
165         xProp.setPropertyValue("CommandType",new Integer(com.sun.star.sdb.CommandType.TABLE));
166 
167         xRowRes.execute();
168         System.out.println("RowSet executed!");
169 
170         // now look if the RowCount is already final
171         System.out.println("The RowCount is final: " + xProp.getPropertyValue("IsRowCountFinal"));
172 
173         XResultSet xRes = (XResultSet)UnoRuntime.queryInterface(XResultSet.class,xRowRes);
174         xRes.last();
175 
176         System.out.println("The RowCount is final: " + xProp.getPropertyValue("IsRowCountFinal"));
177         System.out.println("There are " + xProp.getPropertyValue("RowCount") + " rows!");
178 
179         // now destroy the RowSet
180         XComponent xComp = (XComponent)UnoRuntime.queryInterface(XComponent.class,xRowRes);
181         xComp.dispose();
182         System.out.println("RowSet destroyed!");
183     }
184 
185     public static void showRowSetEvents() throws com.sun.star.uno.Exception
186     {
187         // first we create our RowSet object
188         XRowSet xRowRes = (XRowSet)UnoRuntime.queryInterface(
189             XRowSet.class,
190             xMCF.createInstanceWithContext("com.sun.star.sdb.RowSet", xContext));
191 
192         System.out.println("RowSet created!");
193         // add our Listener
194         System.out.println("Append our Listener!");
195         RowSetEventListener pRow = new RowSetEventListener();
196         XRowSetApproveBroadcaster xApBroad = (XRowSetApproveBroadcaster)UnoRuntime.queryInterface(XRowSetApproveBroadcaster.class,xRowRes);
197         xApBroad.addRowSetApproveListener(pRow);
198         xRowRes.addRowSetListener(pRow);
199 
200         // set the properties needed to connect to a database
201         XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class,xRowRes);
202         xProp.setPropertyValue("DataSourceName","Bibliography");
203         xProp.setPropertyValue("Command","biblio");
204         xProp.setPropertyValue("CommandType",new Integer(com.sun.star.sdb.CommandType.TABLE));
205 
206         xRowRes.execute();
207         System.out.println("RowSet executed!");
208 
209         // do some movements to check if we got all notifications
210         XResultSet xRes = (XResultSet)UnoRuntime.queryInterface(XResultSet.class,xRowRes);
211         System.out.println("beforeFirst");
212         xRes.beforeFirst();
213         // this should lead to no notifications because
214         // we should stand before the first row at the beginning
215         System.out.println("We stand before the first row: " + xRes.isBeforeFirst());
216 
217         System.out.println("next");
218         xRes.next();
219         System.out.println("next");
220         xRes.next();
221         System.out.println("last");
222         xRes.last();
223         System.out.println("next");
224         xRes.next();
225         System.out.println("We stand after the last row: " + xRes.isAfterLast());
226         System.out.println("first");
227         xRes.first();
228         System.out.println("previous");
229         xRes.previous();
230         System.out.println("We stand before the first row: " + xRes.isBeforeFirst());
231         System.out.println("afterLast");
232         xRes.afterLast();
233         System.out.println("We stand after the last row: " + xRes.isAfterLast());
234 
235         // now destroy the RowSet
236         XComponent xComp = (XComponent)UnoRuntime.queryInterface(XComponent.class,xRowRes);
237         xComp.dispose();
238         System.out.println("RowSet destroyed!");
239     }
240 }
241 
242