summaryrefslogtreecommitdiffstats
path: root/site/trunk/site-publish/rdb-das-cpp-workingwithbasiccrud.html
blob: 30703144df27856444ced811f935e7e581d1b119 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
<!--

    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE- 2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
    <HEAD>
		<!-- generateKeywords macro -->
	    <META name="description" content="Apache Tuscany">
        <META name="keywords" content="apache, apache tuscany, tuscany, service, services, fabric, soa, service oriented architecture,  sca, service component architecture, das, sdo, csa, ruby, opensource">
		<!-- generateKeywords macro end -->
		
        <LINK type="text/css" rel="stylesheet" href="http://tuscany.apache.org/stylesheets/default.css">
        <LINK rel="SHORTCUT ICON" href="https://cwiki.apache.org/confluence/display/TUSCANY/$images/favicon.ico">   
        <TITLE>Apache Tuscany : RDB DAS CPP - WorkingWithBasicCrud</TITLE>
    <META http-equiv="Content-Type" content="text/html;charset=UTF-8"></HEAD>
    
    <BODY onload="init()">
        <!-- topNav macro -->
		<TABLE valign="top" border="0" cellspacing="0" cellpadding="0" width="100%" background="http://tuscany.apache.org/images/TuscanyLogoNEW_Text_120px_bg.jpg">
			<TR>
				<TD valing="top" align="left">
					<A href="https://cwiki.apache.org/confluence/pages/viewpage.action?spaceKey=TUSCANY&title=$siteroot"><IMG src="http://tuscany.apache.org/images/TuscanyLogoNEW_Text_120px_bg.jpg" height="91" width="25" border="0"></A>
				</TD>
				<TD>
					<A href="http://tuscany.apache.org/"><IMG src="http://tuscany.apache.org/images/TuscanyLogo.jpg" border="0"></A>
				</TD>
				
				<TD width="100%">
					&nbsp;
				</TD>

				<!-- Adds the edit page link to the top banner-->
				<TD valign="bottom">
					<DIV style="padding: 2px 10px; margin: 0px;">
						<A href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=69479">
						<IMG src="http://tuscany.apache.org/images/notep_16.gif" height="16" width="16" border="0" align="absmiddle" title="Edit Page"></A>
					</DIV>
				</TD>

			</TR>
		</TABLE>
        <!-- topNav macro end -->

		<!-- breadCrumbs macro -->
		<TABLE border="0" cellpadding="2" cellspacing="0" width="100%">
			<TR class="topBar">
				<TD align="left" valign="middle" class="topBarDiv" nowrap="true" width="100%">
					&nbsp;<A href="home.html" title="Apache Tuscany">Apache Tuscany</A>&nbsp;&gt;&nbsp;<A href="home.html" title="Home">Home</A>&nbsp;&gt;&nbsp;<A href="das-overview.html" title="DAS Overview">DAS Overview</A>&nbsp;&gt;&nbsp;<A href="das-c.html" title="DAS C++">DAS C++</A>&nbsp;&gt;&nbsp;<A href="das-c-documentation-menu.html" title="DAS C++ Documentation Menu">DAS C++ Documentation Menu</A>&nbsp;&gt;&nbsp;<A href="rdb-das-c-user-guide.html" title="RDB DAS C++ - User Guide">RDB DAS C++ - User Guide</A>&nbsp;&gt;&nbsp;<A href="" title="RDB DAS CPP - WorkingWithBasicCrud">RDB DAS CPP - WorkingWithBasicCrud</A>
				</TD>
				
				<TD align="right" valign="middle" class="topBarDiv" align="left" nowrap="true">
				<A href="http://mail-archives.apache.org/mod_mbox/tuscany-user">User List</A> | <A href="http://mail-archives.apache.org/mod_mbox/tuscany-dev">Dev List</A> | <A href="http://issues.apache.org/jira/browse/Tuscany">Issue Tracker</A>&nbsp;&nbsp;
				</TD>
			</TR>
		</TABLE>
		<!-- breadCrumbs macro end -->


        <TABLE border="0" cellpadding="0" width="100%" bgcolor="#FFFFFF">
            <TR>
                <TD align="left" valign="top">

					<!-- pageContent macro -->
					<DIV id="PageContent">
												
						<DIV class="pagecontent">
							<DIV class="wiki-content">
								<H1><A name="RDBDASCPP-WorkingWithBasicCrud-WorkingWithBasicCrud"></A>WorkingWithBasicCrud</H1>

<P>The RDB DAS provides a simple, command-oriented approach for reading and writing to the database.</P>

<H3><A name="RDBDASCPP-WorkingWithBasicCrud-Asimpleread"></A>A simple read</H3>

<P>The following illustrates the simplest possible read:</P>
<DIV class="panel" style="border-width: 1px;"><DIV class="panelContent">
<P> DASImpl&#42; das = (DASImpl*) DASImpl::getFactory().createDAS(getConnection());<BR>
 CommandPtr readCustomers = das-&gt;createCommand(&quot;select * from CUSTOMER where ID = 22590&quot;);<BR>
 DataObjectPtr root = readCustomers-&gt;executeQuery();</P>
</DIV></DIV>
<P>The first line creates an instance of the DAS that is primed with a given ODBC Connection object. The Connection can be procured in a number of different ways. This example is from the RDB DAS test suite and the implentation of getConnection() create a Connection object using a DSN string.</P>

<P>The second line uses the das instance as a factory to create a Command instance from the provided SQL SELECT string. The third line executes the command which returns a &quot;root&quot; SDO DataObject. This root DataObject is sometimes referred to as a &quot;dummy&quot; root and acts as a container for the graph of data returned from the query. The RDB DAS always returns a dummy root from executing a query.</P>

<P>Once we have a handle to the root we can pull information from the returned customer object using the dynamic SDO apis like this:</P>
<DIV class="panel" style="border-width: 1px;"><DIV class="panelContent">
<P> DataObjectPtr cust = root-&gt;getDataObject(&quot;CUSTOMER[1]&quot;);<BR>
 wstring name = cust-&gt;getCString(&quot;LASTNAME&quot;);</P>
</DIV></DIV>
<P>The first line retreives the first Customer from the root's list of returned Customers (since we queried by ID, thereis only one). The second line pulls the LASTNAME value from the customer.</P>

<H3><A name="RDBDASCPP-WorkingWithBasicCrud-Asimplewrite"></A>A simple write</H3>

<P>The DAS leverages the SDO Change Summary to provide a very simple mechanism to flush data changes back to the database. We can illustrate this by continuing the previous example:</P>
<DIV class="panel" style="border-width: 1px;"><DIV class="panelContent">
<P> customer-&gt;setCString(&quot;LASTNAME&quot;, &quot;Pavick&quot;);<BR>
 das-&gt;applyChanges(root);</P>
</DIV></DIV>
<P>The first line uses the SDO dynamic APIs to change the LASTNAME property of the Customer instance and the second line directs the das to flush graph changes back to the database. At this point, the das scans the SDO ChangeSummary and generates the required UPDATE statement necessary to synchronize this change with the database.</P>

<P>Although this simple example demonstrates a single property change to a single object, the das will process any numbers of changes made to any number of objects in a graph. Even if we read 1000 customers from the database and made several changes to each, flushing those changes back to the database is still just one call to das-&gt;applyChanges().</P>

<H3><A name="RDBDASCPP-WorkingWithBasicCrud-Awritecommmand"></A>A write commmand</H3>

<P>Writes to the database can also be done without using the change summary. To do this, we simply use the das instance as a factory to create a command initialized with a CREATE/UPDATE or DELETE statement.</P>
<DIV class="panel" style="border-width: 1px;"><DIV class="panelContent">
<P> DASImpl&#42; das = (DASImpl*) DASImpl::getFactory().createDAS(getConnection());<BR>
 CommandPtr insert = das-&gt;createCommand(&quot;insert into CUSTOMER values (10, 'Williams', '5555 Maine Ave.')&quot;);<BR>
 insert-&gt;executeQuery();</P>
</DIV></DIV>
<P>Although allowing the das to generate write statements from the change summary is recommended, this low level ability to execute aribtrary SQL is another option. </P>
							</DIV>
						</DIV>
					</DIV>	
		            <!-- pageContent macro end -->
					
                </TD>
            </TR>
        </TABLE>

		<!-- footer macro -->
				<SCRIPT src="http://www.google-analytics.com/urchin.js" type="text/javascript">
		</SCRIPT>
		<SCRIPT type="text/javascript">
		   _uacct = "UA-1174707-5";
		   urchinTracker();
		</SCRIPT>
		
				<A href="http://www.statcounter.com/" target="_blank"><IMG src="http://c26.statcounter.com/counter.php?sc_project=2619156&java=0&security=94bd7e7d&invisible=0" alt="website stats" border="0"></A>    

		<DIV class="footer">
			Copyright � 2003-2012, The Apache Software Foundation&nbsp;&nbsp;</BR>
                        Apache Tuscany and the Apache Tuscany project logo are trademarks of The Apache Software Foundation.
		</DIV>
		<!-- footer macro end -->

    </BODY>
</HTML>