File: db-adapters.html

package info (click to toggle)
turbine 20010419-1
  • links: PTS
  • area: contrib
  • in suites: woody
  • size: 17,460 kB
  • ctags: 7,501
  • sloc: java: 41,929; xml: 12,430; sql: 637; sh: 90; makefile: 50
file content (263 lines) | stat: -rw-r--r-- 10,417 bytes parent folder | download
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<!-- Content Stylesheet for Site -->

        
<!-- start the processing -->
    <!-- ====================================================================== -->
    <!-- Main Page Section -->
    <!-- ====================================================================== -->
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>

                                                    <meta name="author" value="Turbine Documentation Team">
            <meta name="email" value="a@a.com">
            
            <title>Turbine - DB Adapters</title>
        </head>

        <body bgcolor="#ffffff" text="#000000" link="#525D76">        
            <table border="0" width="100%" cellspacing="0">
                <!-- TOP IMAGE -->
                <tr>
                    <td align="left">
<a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" border="0"/></a>
</td>
<td align="right">
<a href="http://jakarta.apache.org/turbine/"><img src="./images/logo.gif" alt="Turbine" border="0"/></a>
</td>
                </tr>
            </table>
            <table border="0" width="100%" cellspacing="4">
                <tr><td colspan="2">
                    <hr noshade="" size="1"/>
                </td></tr>
                
                <tr>
                    <!-- LEFT SIDE NAVIGATION -->
                    <td valign="top" nowrap="true">
                                <p><strong>Essentials</strong></p>
        <ul>
                    <li>    <a href="./index.html">Overview</a>
</li>
                    <li>    <a href="./features.html">Features</a>
</li>
                    <li>    <a href="./fsd.html">Specification</a>
</li>
                    <li>    <a href="./project-map.html">Project map</a>
</li>
                    <li>    <a href="./install.html">Installation</a>
</li>
                    <li>    <a href="./getting-started.html">Getting Started</a>
</li>
                    <li>    <a href="./changes.html">Changes</a>
</li>
                    <li>    <a href="./other-docs.html">Other Documentation</a>
</li>
                </ul>
            <p><strong>Models</strong></p>
        <ul>
                    <li>    <a href="./pullmodel.html">Pull MVC Model</a>
</li>
                    <li>    <a href="./model2+1.html">Model 2+1</a>
</li>
                    <li>    <a href="./j2ee-integration.html">J2EE Integration</a>
</li>
                </ul>
            <p><strong>Get Involved</strong></p>
        <ul>
                    <li>    <a href="./turbine-documentation-project.html">Turbine Documentation</a>
</li>
                    <li>    <a href="./code-standards.html">Coding Spec</a>
</li>
                    <li>    <a href="./contributors.html">Contributors</a>
</li>
                    <li>    <a href="./branches.html">CVS Branches</a>
</li>
                    <li>    <a href="http://jakarta.apache.org/site/cvsindex.html">CVS Repos</a>
</li>
                    <li>    <a href="./faq.html">FAQ</a>
</li>
                    <li>    <a href="./license.html">License</a>
</li>
                    <li>    <a href="http://jakarta.apache.org/site/mail.html">Mailing Lists</a>
</li>
                    <li>    <a href="./powered.html">Powered by Turbine</a>
</li>
                    <li>    <a href="./todo.html">Todo</a>
</li>
                    <li>    <a href="./active-developers.html">Active Developers</a>
</li>
                    <li>    <a href="./proposals.html">Proposals</a>
</li>
                </ul>
            <p><strong>Documentation</strong></p>
        <ul>
                    <li>    <a href="./action-event.html">Action Events</a>
</li>
                    <li>    <a href="./services.html">Services</a>
</li>
                    <li>    <a href="./security.html">Turbine and Security</a>
</li>
                    <li>    <a href="./python.html">Turbine and Python</a>
</li>
                    <li>    <a href="./jsp-configuration.html">Turbine and JSP</a>
</li>
                    <li>    <a href="./velocity-site.html">Velocity Site</a>
</li>
                    <li>    <a href="./context-howto.html">Velocity Context</a>
</li>
                    <li>    <a href="./webmacro-site.html">Webmacro Site</a>
</li>
                </ul>
            <p><strong>Database</strong></p>
        <ul>
                    <li>    <a href="./peers.html">Peers</a>
</li>
                    <li>    <a href="./advpeers.html">Advanced Peers</a>
</li>
                    <li>    <a href="./advcriteria.html">Advanced Criteria</a>
</li>
                    <li>    <a href="./torque.html">Torque</a>
</li>
                    <li>    <a href="./turbine-schema.html">Core Schema</a>
</li>
                    <li>    <a href="./db-adapters.html">DB Adapters</a>
</li>
                    <li>    <a href="./postgres-howto.html">Postgres Howto</a>
</li>
                    <li>    <a href="./oracle-howto.html">Oracle 8i Howto</a>
</li>
                    <li>    <a href="./sybase-howto.html">Sybase Howto</a>
</li>
                </ul>
                        </td>
                    <td align="left" valign="top">
                                                                    <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
          <a name="Database Adapters"><strong>Database Adapters</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                                    <p>
A database adapter class is a class that extends 
<code>org.apache.turbine.util.db.pool.DB</code>
and encapsulates access to a specific RDBMS implementation. Database
adapter classes already found in Turbine include DBOracle, DBMM, DBSybase,
etc. These classes allow Turbine to gain access to a wide range of databases
in a uniform manner. This allows you to easily swap between databases
without any modification to Turbine or the application built on top of
Turbine.
</p>
                                                <p>
Why is this necessary if Java already offers uniform database access
in the form of JDBC? Unfortunately, underlying databases still
use different SQL implementations and conventions. For example, the use
of single and double quotes varies. The use of database adapter classes in
Turbine endeavors to overcome this problem without the need to change the
Turbine framework or Turbine applications for each different database
encountered.
</p>
                                                <p>
To add a new database adapter class to Turbine you must follow these
steps:
</p>
                                                <p>
<ul>
    <li>
        Create a new class DB&lt;dbname&gt; that extends
        <code>org.apache.turbine.util.db.adapter.DB</code> (where
        dbname is the name of the
        database or database driver you wish to add to Turbine). DB is an
        abstract class, so you need to implement a number of methods.</li>

    <li>
        Implement getStringDelimiter(). This method has to return the character
        that the specific database implementation uses to indicate string
        literals in SQL. This will usually be a single qoute (').</li>

    <li>
        Implement String getIdSqlForAutoIncrement(). Databases like MySQL
        that make use of auto increment fields will implement this method.
        For MySQL it returns "SELECT LAST_INSERT_ID()". Databases that do
        not support this must return null.</li>

    <li>
        Implement String getSequenceSql(Object obj). Databases like Oracle
        that support the concept of unique id generators (called sequences) will
        implement this method. Databases that do not support this must return
        null.</li>

    <li>
        Implement void lockTable(Connection con, String table). This method
        should place a lock on a database table. Databases that only support
        table level locking obviously do not require this method. Databases
        that support row level locking must implement this method to avoid
        synchronization problems.</li>

    <li>
        Implement void unlockTable(Connection con, String table). This method
        should release the table lock acquired by the above-mentioned
        method.</li>

    <li>
        Implement String ignoreCase(String in). This method should implement
        a mechanism for case insensitive comparisons. Usually this converts
        the string to Uppercase. Example UPPER (&lt;in&gt;). If such a
        mechanism does not exist in your database simple return the in parameter
        without any modification. DO NOT return in.toUpper().</li>

    <li>
        Some databases (for example Interbase) do not support the function
        returned by their implementation of ignoreCase() in the ORDER BY
        clause of SELECT statements. If your database falls into this
        category you should override the default implementation of
        String ignoreCaseInOrderBy(String in). It is NOT required to override
        this method for other databases--the default implementation calls
        ignoreCase() and respectCase().</li>
</ul>
</p>
                                                <p>
If you are adding support for a new RDBMS, then you will probably also
need to create a set of Velocity templates--used by Torque to generate
a SQL schema for your RDBMS--in the directory
conf/torque/templates/sql/base/&lt;dbname&gt;.  The recommend method for
doing this is to copy an existing set of templates and adapt them to
your RDBMS as needed.
</p>
                            </blockquote>
      </td></tr>
    </table>
                                        </td>
                </tr>

                <!-- FOOTER -->
                <tr><td colspan="2">
                    <hr noshade="" size="1"/>
                </td></tr>
                <tr><td colspan="2">
                    <div align="center"><font color="#525D76" size="-1"><em>
                    Copyright &#169; 1999-2001, Apache Software Foundation
                    </em></font></div>
                </td></tr>
            </table>
        </body>
    </html>
<!-- end the processing -->