|
1 /**************************************************************************** |
|
2 ** |
|
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). |
|
4 ** All rights reserved. |
|
5 ** Contact: Nokia Corporation (qt-info@nokia.com) |
|
6 ** |
|
7 ** This file is part of the documentation of the Qt Toolkit. |
|
8 ** |
|
9 ** $QT_BEGIN_LICENSE:LGPL$ |
|
10 ** No Commercial Usage |
|
11 ** This file contains pre-release code and may not be distributed. |
|
12 ** You may use this file in accordance with the terms and conditions |
|
13 ** contained in the Technology Preview License Agreement accompanying |
|
14 ** this package. |
|
15 ** |
|
16 ** GNU Lesser General Public License Usage |
|
17 ** Alternatively, this file may be used under the terms of the GNU Lesser |
|
18 ** General Public License version 2.1 as published by the Free Software |
|
19 ** Foundation and appearing in the file LICENSE.LGPL included in the |
|
20 ** packaging of this file. Please review the following information to |
|
21 ** ensure the GNU Lesser General Public License version 2.1 requirements |
|
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. |
|
23 ** |
|
24 ** In addition, as a special exception, Nokia gives you certain additional |
|
25 ** rights. These rights are described in the Nokia Qt LGPL Exception |
|
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. |
|
27 ** |
|
28 ** If you have questions regarding the use of this file, please contact |
|
29 ** Nokia at qt-info@nokia.com. |
|
30 ** |
|
31 ** |
|
32 ** |
|
33 ** |
|
34 ** |
|
35 ** |
|
36 ** |
|
37 ** |
|
38 ** $QT_END_LICENSE$ |
|
39 ** |
|
40 ****************************************************************************/ |
|
41 |
|
42 /*! |
|
43 \page sql-driver.html |
|
44 \title SQL Database Drivers |
|
45 \brief How to configure and install QtSql drivers for supported databases. |
|
46 |
|
47 \ingroup best-practices |
|
48 |
|
49 The QtSql module uses driver \l{How to Create Qt |
|
50 Plugins}{plugins} to communicate with the different database |
|
51 APIs. Since Qt's SQL Module API is database-independent, all |
|
52 database-specific code is contained within these drivers. Several |
|
53 drivers are supplied with Qt and other drivers can be added. The |
|
54 driver source code is supplied and can be used as a model for |
|
55 \l{#development}{writing your own drivers}. |
|
56 |
|
57 \tableofcontents |
|
58 |
|
59 \section1 Supported Databases |
|
60 |
|
61 The table below lists the drivers included with Qt. Due to |
|
62 license incompatibilities with the GPL, not all of the plugins |
|
63 are provided with Open Source Versions of Qt. |
|
64 |
|
65 \table |
|
66 \header \o Driver name \o DBMS |
|
67 \row \o \link #QDB2 QDB2\endlink \o IBM DB2 (version 7.1 and above) |
|
68 \row \o \link #QIBASE QIBASE\endlink \o Borland InterBase |
|
69 \row \o \link #QMYSQL QMYSQL\endlink \o MySQL |
|
70 \row \o \link #QOCI QOCI\endlink \o Oracle Call Interface Driver |
|
71 \row \o \link #QODBC QODBC\endlink |
|
72 \o Open Database Connectivity (ODBC) - Microsoft SQL Server and other |
|
73 ODBC-compliant databases |
|
74 \row \o \link #QPSQL QPSQL\endlink \o PostgreSQL (versions 7.3 and above) |
|
75 \row \o \link #QSQLITE2 QSQLITE2\endlink \o SQLite version 2 |
|
76 \row \o \link #QSQLITE QSQLITE\endlink \o SQLite version 3 |
|
77 \row \o \link #QTDS QTDS\endlink \o Sybase Adaptive Server |
|
78 \endtable |
|
79 |
|
80 SQLite is the in-process database system with the best test coverage |
|
81 and support on all platforms. Oracle via OCI, and PostreSQL and MySQL |
|
82 through either ODBC or a native driver are well-tested on Windows and |
|
83 Linux. The completeness of the support for other systems depends on the |
|
84 availability and quality of client libraries. |
|
85 |
|
86 \bold{Note:} To build a driver plugin you need to have the appropriate |
|
87 client library for your Database Management System (DBMS). This provides |
|
88 access to the API exposed by the DBMS, and is typically shipped with it. |
|
89 Most installation programs also allow you to install "development |
|
90 libraries", and these are what you need. These libraries are responsible |
|
91 for the low-level communication with the DBMS. |
|
92 |
|
93 \target building |
|
94 \section1 Building the Drivers Using Configure |
|
95 |
|
96 On Unix and Mac OS X, the Qt \c configure script tries to |
|
97 automatically detect the available client libraries on your |
|
98 machine. Run \c{configure -help} to see what drivers can be |
|
99 built. You should get an output similar to this: |
|
100 |
|
101 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 0 |
|
102 |
|
103 The \c configure script cannot detect the neccessary libraries |
|
104 and include files if they are not in the standard paths, so it |
|
105 may be necessary to specify these paths using the \c -I and \c -L |
|
106 command-line options. For example, if your MySQL include files |
|
107 are installed in \c /usr/local/mysql (or in \c{C:\mysql\include} |
|
108 on Windows), then pass the following parameter to configure: \c |
|
109 -I/usr/local/mysql (or \c{-I C:\mysql\include} for Windows). |
|
110 |
|
111 On Windows the \c -I parameter doesn't accept spaces in |
|
112 filenames, so use the 8.3 name instead; for example, use |
|
113 \c{C:\progra~1\mysql} instead of \c{C:\Program Files\mysql}. |
|
114 |
|
115 Use the \c{-qt-sql-<driver>} parameter to build the database driver |
|
116 statically into your Qt library or \c{-plugin-sql-<driver>} to build |
|
117 the driver as a plugin. Look at the sections that follow for |
|
118 additional information about required libraries. |
|
119 |
|
120 \target buildingmanually |
|
121 \section1 Building the Plugins Manually |
|
122 |
|
123 \target QMYSQL |
|
124 \section2 QMYSQL for MySQL 4 and higher |
|
125 |
|
126 \section3 QMYSQL Stored Procedure Support |
|
127 |
|
128 MySQL 5 introduces stored procedure support at the SQL level, but no |
|
129 API to control IN, OUT and INOUT parameters. Therefore, parameters |
|
130 have to be set and read using SQL commands instead of QSqlQuery::bindValue(). |
|
131 |
|
132 Example stored procedure: |
|
133 |
|
134 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 1 |
|
135 |
|
136 Source code to access the OUT values: |
|
137 |
|
138 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 2 |
|
139 |
|
140 \bold{Note:} \c{@outval1} and \c{@outval2} are variables local to the current |
|
141 connection and will not be affected by queries sent from another host |
|
142 or connection. |
|
143 |
|
144 \section3 Embedded MySQL Server |
|
145 |
|
146 The MySQL embedded server is a drop-in replacement for the normal |
|
147 client library. With the embedded MySQL server, a MySQL server is |
|
148 not required to use MySQL functionality. |
|
149 |
|
150 To use the embedded MySQL server, simply link the Qt plugin to \c |
|
151 libmysqld instead of libmysqlclient. This can be done by replacing |
|
152 \c -lmysqlclient_r by \c -lmysqld in the \c qmake command in the |
|
153 section below. |
|
154 |
|
155 Please refer to the MySQL documentation, chapter "libmysqld, the Embedded |
|
156 MySQL Server Library" for more information about the MySQL embedded server. |
|
157 |
|
158 \section3 How to Build the QMYSQL Plugin on Unix and Mac OS X |
|
159 |
|
160 You need the MySQL header files and as well as the shared library |
|
161 \c{libmysqlclient.so}. Depending on your Linux distribution you may |
|
162 need to install a package which is usually called "mysql-devel". |
|
163 |
|
164 Tell \l qmake where to find the MySQL header files and shared |
|
165 libraries (here it is assumed that MySQL is installed in |
|
166 \c{/usr/local}) and run \c{make}: |
|
167 |
|
168 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 3 |
|
169 |
|
170 After installing Qt, as described in the \l{Installing Qt on X11 |
|
171 Platforms} document, you also need to install the plugin in the |
|
172 standard location: |
|
173 |
|
174 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 4 |
|
175 |
|
176 \section3 How to Build the QMYSQL Plugin on Windows |
|
177 |
|
178 You need to get the MySQL installation files. Run \c SETUP.EXE and |
|
179 choose "Custom Install". Install the "Libs & Include Files" Module. |
|
180 Build the plugin as follows (here it is assumed that MySQL is |
|
181 installed in \c{C:\MySQL}): |
|
182 |
|
183 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 5 |
|
184 |
|
185 If you are not using a Microsoft compiler, replace \c nmake with \c |
|
186 make in the line above. |
|
187 |
|
188 \note This database plugin is not supported for Windows CE. |
|
189 |
|
190 \note Including \c{"-o Makefile"} as an argument to \l qmake to |
|
191 tell it where to build the makefile can cause the plugin to be |
|
192 built in release mode only. If you are expecting a debug version |
|
193 to be built as well, don't use the \c{"-o Makefile"} option. |
|
194 |
|
195 \target QOCI |
|
196 \section2 QOCI for the Oracle Call Interface (OCI) |
|
197 |
|
198 \section3 General Information about the OCI plugin |
|
199 |
|
200 The Qt OCI plugin supports Oracle 9i, 10g and higher. After |
|
201 connecting to the Oracle server, the plugin will auto-detect the |
|
202 database version and enable features accordingly. |
|
203 |
|
204 It's possible to connect to a Oracle database without a tnsnames.ora file. |
|
205 This requires that the database SID is passed to the driver as the database |
|
206 name and that a hostname is given. |
|
207 |
|
208 \section3 OCI User Authentication |
|
209 |
|
210 The Qt OCI plugin supports authentication using |
|
211 external credentials (OCI_CRED_EXT). Usually, this means that the database |
|
212 server will use the user authentication provided by the operating system |
|
213 instead of its own authentication mechanism. |
|
214 |
|
215 Leave the username and password empty when opening a connection with |
|
216 QSqlDatabase to use the external credentials authentication. |
|
217 |
|
218 \section3 OCI BLOB/LOB Support |
|
219 |
|
220 Binary Large Objects (BLOBs) can be read and written, but be aware |
|
221 that this process may require a lot of memory. You should use a forward |
|
222 only query to select LOB fields (see QSqlQuery::setForwardOnly()). |
|
223 |
|
224 Inserting BLOBs should be done using either a prepared query where the |
|
225 BLOBs are bound to placeholders or QSqlTableModel, which uses a prepared |
|
226 query to do this internally. |
|
227 |
|
228 \section3 How to Build the OCI Plugin on Unix and Mac OS X |
|
229 |
|
230 For Oracle 10g, all you need is the "Instant Client Package - Basic" and |
|
231 "Instant Client Package - SDK". For Oracle prior to 10g, you require |
|
232 the standard Oracle client and the SDK packages. |
|
233 |
|
234 Oracle library files required to build the driver: |
|
235 |
|
236 \list |
|
237 \i \c libclntsh.so (all versions) |
|
238 \i \c libwtc9.so (only Oracle 9) |
|
239 \endlist |
|
240 |
|
241 Tell \c qmake where to find the Oracle header files and shared |
|
242 libraries and run make: |
|
243 |
|
244 For Oracle version 9: |
|
245 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 6 |
|
246 |
|
247 For Oracle version 10, we assume that you installed the RPM packages of the |
|
248 Instant Client Package SDK (you need to adjust the version number accordingly): |
|
249 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 7 |
|
250 |
|
251 \bold{Note:} If you are using the Oracle Instant Client package, |
|
252 you will need to set LD_LIBRARY_PATH when building the OCI SQL plugin |
|
253 and when running an applicaiton that uses the OCI SQL plugin. You can |
|
254 avoid this requirement by setting and RPATH and listing all of the |
|
255 libraries to link to. Here is an example: |
|
256 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 32 |
|
257 |
|
258 If you wish to build the OCI plugin manually with this method the procedure looks like this: |
|
259 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 33 |
|
260 |
|
261 \section3 How to Build the OCI Plugin on Windows |
|
262 |
|
263 Choosing the option "Programmer" in the Oracle Client Installer from |
|
264 the Oracle Client Installation CD is sufficient to build the plugin. |
|
265 |
|
266 Build the plugin as follows (here it is assumed that Oracle Client is |
|
267 installed in \c{C:\oracle}): |
|
268 |
|
269 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 8 |
|
270 |
|
271 If you are not using a Microsoft compiler, replace \c nmake with \c |
|
272 make in the line above. |
|
273 |
|
274 When you run your application you will also need to add the \c oci.dll |
|
275 path to your \c PATH environment variable: |
|
276 |
|
277 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 9 |
|
278 |
|
279 \bold{Note:} This database plugin is not supported for Windows CE. |
|
280 |
|
281 \target QODBC |
|
282 \section2 QODBC for Open Database Connectivity (ODBC) |
|
283 |
|
284 \section3 General Information about the ODBC plugin |
|
285 |
|
286 ODBC is a general interface that allows you to connect to multiple |
|
287 DBMSs using a common interface. The QODBC driver allows you to connect |
|
288 to an ODBC driver manager and access the available data sources. Note |
|
289 that you also need to install and configure ODBC drivers for the ODBC |
|
290 driver manager that is installed on your system. The QODBC plugin |
|
291 then allows you to use these data sources in your Qt applications. |
|
292 |
|
293 \bold{Note:} You should use native drivers in preference to the ODBC |
|
294 driver where they are available. ODBC support can be used as a fallback |
|
295 for compliant databases if no native drivers are available. |
|
296 |
|
297 On Windows an ODBC driver manager should be installed by default. |
|
298 For Unix systems there are some implementations which must be |
|
299 installed first. Note that every client that uses your application is |
|
300 required to have an ODBC driver manager installed, otherwise the |
|
301 QODBC plugin will not work. |
|
302 |
|
303 Be aware that when connecting to an ODBC datasource you must pass in |
|
304 the name of the ODBC datasource to the QSqlDatabase::setDatabaseName() |
|
305 function rather than the actual database name. |
|
306 |
|
307 The QODBC Plugin needs an ODBC compliant driver manager version 2.0 or |
|
308 later to work. Some ODBC drivers claim to be version 2.0 compliant, |
|
309 but do not offer all the necessary functionality. The QODBC plugin |
|
310 therefore checks whether the data source can be used after a |
|
311 connection has been established and refuses to work if the check |
|
312 fails. If you don't like this behavior, you can remove the \c{#define |
|
313 ODBC_CHECK_DRIVER} line from the file \c{qsql_odbc.cpp}. Do this at |
|
314 your own risk! |
|
315 |
|
316 By default, Qt instructs the ODBC driver to behave as an ODBC 2.x |
|
317 driver. However, for some \e{driver-manager/ODBC 3.x-driver} |
|
318 combinations (e.g., \e{unixODBC/MaxDB ODBC}), telling the ODBC |
|
319 driver to behave as a 2.x driver can cause the driver plugin to |
|
320 have unexpected behavior. To avoid this problem, instruct the ODBC |
|
321 driver to behave as a 3.x driver by |
|
322 \l{QSqlDatabase::setConnectOptions()} {setting the connect option} |
|
323 \c{"SQL_ATTR_ODBC_VERSION=SQL_OV_ODBC3"} before you |
|
324 \l{QSqlDatabase::open()} {open your database connection}. Note |
|
325 that this will affect multiple aspects of ODBC driver behavior, |
|
326 e.g., the SQLSTATEs. Before setting this connect option, consult |
|
327 your ODBC documentation about behavior differences you can expect. |
|
328 |
|
329 If you experience very slow access of the ODBC datasource, make sure |
|
330 that ODBC call tracing is turned off in the ODBC datasource manager. |
|
331 |
|
332 Some drivers don't support scrollable cursors. In that case case only |
|
333 queries in forwardOnly mode can be used successfully. |
|
334 |
|
335 \section3 ODBC Stored Procedure Support |
|
336 |
|
337 With Microsoft SQL Server the result set returned by a stored |
|
338 procedure that uses the return statement, or returns multiple result |
|
339 sets, will be accessible only if you set the query's forward only |
|
340 mode to \e forward using \l QSqlQuery::setForwardOnly(). |
|
341 |
|
342 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 10 |
|
343 |
|
344 \bold{Note:} The value returned by the stored procedure's return statement |
|
345 is discarded. |
|
346 |
|
347 \section3 ODBC Unicode Support |
|
348 |
|
349 The QODBC Plugin will use the Unicode API if UNICODE is defined. On |
|
350 Windows NT based systems, this is the default. Note that the ODBC |
|
351 driver and the DBMS must also support Unicode. |
|
352 |
|
353 Some driver managers and drivers don't support UNICODE. To use the |
|
354 QODBC plugin with such drivers it has to be compiled with the |
|
355 Q_ODBC_VERSION_2 defined. |
|
356 |
|
357 For the Oracle 9 ODBC driver (Windows), it is neccessary to check |
|
358 "SQL_WCHAR support" in the ODBC driver manager otherwise Oracle |
|
359 will convert all Unicode strings to local 8-bit. |
|
360 |
|
361 \section3 How to Build the ODBC Plugin on Unix and Mac OS X |
|
362 |
|
363 It is recommended that you use unixODBC. You can find the latest |
|
364 version and ODBC drivers at \l http://www.unixodbc.org. |
|
365 You need the unixODBC header files and shared libraries. |
|
366 |
|
367 Tell \c qmake where to find the unixODBC header files and shared |
|
368 libraries (here it is assumed that unixODBC is installed in |
|
369 \c{/usr/local/unixODBC}) and run \c{make}: |
|
370 |
|
371 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 11 |
|
372 |
|
373 \section3 How to Build the ODBC Plugin on Windows |
|
374 |
|
375 The ODBC header and include files should already be installed in the |
|
376 right directories. You just have to build the plugin as follows: |
|
377 |
|
378 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 12 |
|
379 |
|
380 If you are not using a Microsoft compiler, replace \c nmake with \c |
|
381 make in the line above. |
|
382 |
|
383 \bold{Note:} This database plugin is not officially supported for Windows CE. |
|
384 |
|
385 \target QPSQL |
|
386 \section2 QPSQL for PostgreSQL (Version 7.3 and Above) |
|
387 |
|
388 \section3 General Information about the QPSQL driver |
|
389 |
|
390 The QPSQL driver supports version 7.3 and higher of the PostgreSQL server. |
|
391 We recommend that you use a client library from version 7.3.15, 7.4.13, |
|
392 8.0.8, 8.1.4 or more recent as these versions contain security fixes, and |
|
393 as the QPSQL driver might not build with older versions of the client |
|
394 library depending on your platform. |
|
395 |
|
396 For more information about PostgreSQL visit \l http://www.postgresql.org. |
|
397 |
|
398 \section3 QPSQL Unicode Support |
|
399 |
|
400 The QPSQL driver automatically detects whether the PostgreSQL |
|
401 database you are connecting to supports Unicode or not. Unicode is |
|
402 automatically used if the server supports it. Note that the driver |
|
403 only supports the UTF-8 encoding. If your database uses any other |
|
404 encoding, the server must be compiled with Unicode conversion |
|
405 support. |
|
406 |
|
407 Unicode support was introduced in PostgreSQL version 7.1 and it will |
|
408 only work if both the server and the client library have been compiled |
|
409 with multibyte support. More information about how to set up a |
|
410 multibyte enabled PostgreSQL server can be found in the PostgreSQL |
|
411 Administrator Guide, Chapter 5. |
|
412 |
|
413 \section3 QPSQL BLOB Support |
|
414 |
|
415 Binary Large Objects are supported through the \c BYTEA field type in |
|
416 PostgreSQL server versions >= 7.1. |
|
417 |
|
418 \section3 How to Build the QPSQL Plugin on Unix and Mac OS X |
|
419 |
|
420 You need the PostgreSQL client library and headers installed. |
|
421 |
|
422 To make \c qmake find the PostgreSQL header files and shared |
|
423 libraries, run \c qmake the following way (assuming that the |
|
424 PostgreSQL client is installed in \c{/usr}): |
|
425 |
|
426 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 13 |
|
427 |
|
428 After installing Qt, as described in the \l{Installing Qt on X11 Platforms} document, |
|
429 you also need to install the plugin in the standard location: |
|
430 |
|
431 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 14 |
|
432 |
|
433 \section3 How to Build the QPSQL Plugin on Windows |
|
434 |
|
435 Install the appropriate PostgreSQL developer libraries for your |
|
436 compiler. Assuming that PostgreSQL was installed in \c{C:\psql}, |
|
437 build the plugin as follows: |
|
438 |
|
439 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 15 |
|
440 |
|
441 Users of MinGW may wish to consult the following online document: |
|
442 \l{Compiling PostgreSQL On Native Win32 FAQ}. |
|
443 |
|
444 \bold{Note:} This database plugin is not supported for Windows CE. |
|
445 |
|
446 \target QTDS |
|
447 \section2 QTDS for Sybase Adaptive Server |
|
448 \section3 General Information about QTDS |
|
449 |
|
450 It is not possible to set the port with QSqlDatabase::setPort() due to limitations in the |
|
451 Sybase client library. Refer to the Sybase documentation for information on how to set up |
|
452 a Sybase client configuration file to enable connections to databases on non-default ports. |
|
453 |
|
454 \section3 How to Build the QTDS Plugin on Unix and Mac OS X |
|
455 |
|
456 Under Unix, two libraries are available which support the TDS protocol: |
|
457 |
|
458 \list |
|
459 \i FreeTDS, a free implementation of the TDS protocol |
|
460 (\l{http://www.freetds.org}). Note that FreeTDS is not yet stable, |
|
461 so some functionality may not work as expected. |
|
462 |
|
463 \i Sybase Open Client, available from \l{http://www.sybase.com}. |
|
464 Note for Linux users: Get the Open Client RPM from |
|
465 \l{http://linux.sybase.com}. |
|
466 \endlist |
|
467 |
|
468 Regardless of which library you use, the shared object file |
|
469 \c{libsybdb.so} is needed. Set the \c SYBASE environment variable to |
|
470 point to the directory where you installed the client library and |
|
471 execute \c{qmake}: |
|
472 |
|
473 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 16 |
|
474 |
|
475 \section3 How to Build the QDTS Plugin on Windows |
|
476 |
|
477 You can either use the DB-Library supplied by Microsoft or the Sybase |
|
478 Open Client (\l{http://www.sybase.com}). You must include \c |
|
479 NTWDBLIB.LIB to build the plugin: |
|
480 |
|
481 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 17 |
|
482 |
|
483 By default the Microsoft library is used on Windows, if you want to |
|
484 force the use of the Sybase Open Client, you must define \c |
|
485 Q_USE_SYBASE in \c{%QTDIR%\src\sql\drivers\tds\qsql_tds.cpp}. If you |
|
486 are not using a Microsoft compiler, replace \c nmake with \c make in |
|
487 the line above. |
|
488 |
|
489 \bold{Note:} This database plugin is not supported for Windows CE. |
|
490 |
|
491 \target QDB2 |
|
492 \section2 QDB2 for IBM DB2 (Version 7.1 and Above) |
|
493 |
|
494 \section3 General Information about QDB2 |
|
495 |
|
496 The Qt DB2 plugin makes it possible to access IBM DB2 databases. It |
|
497 has been tested with IBM DB2 v7.1 and 7.2. You must install the IBM |
|
498 DB2 development client library, which contains the header and library |
|
499 files necessary for compiling the QDB2 plugin. |
|
500 |
|
501 The QDB2 driver supports prepared queries, reading/writing of Unicode |
|
502 strings and reading/writing of BLOBs. |
|
503 |
|
504 We suggest using a forward-only query when calling stored procedures |
|
505 in DB2 (see QSqlQuery::setForwardOnly()). |
|
506 |
|
507 \section3 How to Build the QDB2 Plugin on Unix and Mac OS X |
|
508 |
|
509 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 18 |
|
510 |
|
511 After installing Qt, as described in the \l{Installing Qt on X11 Platforms} document, |
|
512 you also need to install the plugin in the standard location: |
|
513 |
|
514 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 19 |
|
515 |
|
516 \section3 How to Build the QDB2 Plugin on Windows |
|
517 |
|
518 The DB2 header and include files should already be installed in the |
|
519 right directories. You just have to build the plugin as follows: |
|
520 |
|
521 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 20 |
|
522 |
|
523 If you are not using a Microsoft compiler, replace \c nmake |
|
524 with \c make in the line above. |
|
525 |
|
526 \bold{Note:} This database plugin is not supported for Windows CE. |
|
527 |
|
528 \target QSQLITE2 |
|
529 \section2 QSQLITE2 for SQLite Version 2 |
|
530 |
|
531 The Qt SQLite 2 plugin is offered for compatibility. Whenever |
|
532 possible, use the \l{#QSQLITE}{version 3 plugin} instead. The |
|
533 build instructions for version 3 apply to version 2 as well. |
|
534 |
|
535 \target QSQLITE |
|
536 \section2 QSQLITE for SQLite (Version 3 and Above) |
|
537 |
|
538 \section3 General Information about QSQLITE |
|
539 |
|
540 The Qt SQLite plugin makes it possible to access SQLite |
|
541 databases. SQLite is an in-process database, which means that it |
|
542 is not necessary to have a database server. SQLite operates on a |
|
543 single file, which must be set as the database name when opening |
|
544 a connection. If the file does not exist, SQLite will try to |
|
545 create it. SQLite also supports in-memory databases, simply pass |
|
546 ":memory:" as the database name. |
|
547 |
|
548 SQLite has some restrictions regarding multiple users and |
|
549 multiple transactions. If you try to read/write on a resource from different |
|
550 transactions, your application might freeze until one transaction commits |
|
551 or rolls back. The Qt SQLite driver will retry to write to a locked resource |
|
552 until it runs into a timeout (see \c{QSQLITE_BUSY_TIMEOUT} |
|
553 at QSqlDatabase::setConnectOptions()). |
|
554 |
|
555 In SQLite any column, with the exception of an INTEGER PRIMARY KEY column, |
|
556 may be used to store any type of value. For instance, a column declared as |
|
557 INTEGER may contain an integer value in one row and a text value in the |
|
558 next. This is due to SQLite associating the type of a value with the value |
|
559 itself rather than with the column it is stored in. A consequence of this |
|
560 is that the type returned by QSqlField::type() only indicates the field's |
|
561 recommended type. No assumption of the actual type should be made from |
|
562 this and the type of the individual values should be checked. |
|
563 |
|
564 The driver is locked for updates while a select is executed. This |
|
565 may cause problems when using QSqlTableModel because Qt's item views |
|
566 fetch data as needed (with QSqlQuery::fetchMore() in the case of |
|
567 QSqlTableModel). |
|
568 |
|
569 You can find information about SQLite on \l{http://www.sqlite.org}. |
|
570 |
|
571 \section3 How to Build the QSQLITE Plugin |
|
572 |
|
573 SQLite version 3 is included as a third-party library within Qt. |
|
574 It can be built by passing the following parameters to the |
|
575 configure script: \c{-plugin-sql-sqlite} (build as a plugin) or |
|
576 \c{-qt-sql-sqlite} (linked directly into the Qt library). |
|
577 |
|
578 If you don't want to use the SQLite library included with Qt, you |
|
579 can build it manually (replace \c $SQLITE by the directory where |
|
580 SQLite resides): |
|
581 |
|
582 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 21 |
|
583 |
|
584 After installing Qt, as described in the \l{Installing Qt on X11 Platforms} document, |
|
585 you also need to install the plugin in the standard location: |
|
586 |
|
587 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 22 |
|
588 |
|
589 On Windows: |
|
590 |
|
591 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 23 |
|
592 |
|
593 \section3 QSQLITE File Format Compatibility |
|
594 |
|
595 SQLite minor releases sometimes break file format forward compatibility. |
|
596 For example, SQLite 3.3 can read database files created with SQLite 3.2, |
|
597 but databases created with SQLite 3.3 cannot be read by SQLite 3.2. |
|
598 Please refer to the SQLite documentation and change logs for information about |
|
599 file format compatibility between versions. |
|
600 |
|
601 Qt minor releases usually follow the SQLite minor releases, while Qt patch releases |
|
602 follow SQLite patch releases. Patch releases are therefore both backward and forward |
|
603 compatible. |
|
604 |
|
605 To force SQLite to use a specific file format, it is neccessary to build and |
|
606 ship your own database plugin with your own SQLite library as illustrated above. |
|
607 Some versions of SQLite can be forced to write a specific file format by setting |
|
608 the \c{SQLITE_DEFAULT_FILE_FORMAT} define when building SQLite. |
|
609 |
|
610 \target QIBASE |
|
611 \section2 QIBASE for Borland InterBase |
|
612 |
|
613 \section3 General Information about QIBASE |
|
614 |
|
615 The Qt InterBase plugin makes it possible to access the InterBase and |
|
616 Firebird databases. InterBase can either be used as a client/server or |
|
617 without a server in which case it operates on local files. The |
|
618 database file must exist before a connection can be established. Firebird |
|
619 must be used with a server configuration. |
|
620 |
|
621 Note that InterBase requires you to specify the full path to the |
|
622 database file, no matter whether it is stored locally or on another |
|
623 server. |
|
624 |
|
625 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 24 |
|
626 |
|
627 You need the InterBase/Firebird development headers and libraries |
|
628 to build this plugin. |
|
629 |
|
630 Due to license incompatibilities with the GPL, users of the Qt Open Source |
|
631 Edition are not allowed to link this plugin to the commercial editions of |
|
632 InterBase. Please use Firebird or the free edition of InterBase. |
|
633 |
|
634 \section3 QIBASE Unicode Support and Text Encoding |
|
635 |
|
636 By default the driver connects to the database using UNICODE_FSS. This can |
|
637 be overridden by setting the ISC_DPB_LC_CTYPE parameter with |
|
638 QSqlDatabase::setConnectOptions() before opening the connection. |
|
639 |
|
640 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 25 |
|
641 |
|
642 If Qt doesn't support the given text encoding the driver will issue a |
|
643 warning message and connect to the database using UNICODE_FSS. |
|
644 |
|
645 Note that if the text encoding set when connecting to the database is |
|
646 not the same as in the database, problems with transliteration might arise. |
|
647 |
|
648 \section3 QIBASE Stored procedures |
|
649 |
|
650 InterBase/Firebird return OUT values as result set, so when calling stored |
|
651 procedure, only IN values need to be bound via QSqlQuery::bindValue(). The |
|
652 RETURN/OUT values can be retrieved via QSqlQuery::value(). Example: |
|
653 |
|
654 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 26 |
|
655 |
|
656 \section3 How to Build the QIBASE Plugin on Unix and Mac OS X |
|
657 |
|
658 The following assumes InterBase or Firebird is installed in |
|
659 \c{/opt/interbase}: |
|
660 |
|
661 If you are using InterBase: |
|
662 |
|
663 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 27 |
|
664 |
|
665 If you are using Firebird, the Firebird library has to be set explicitly: |
|
666 |
|
667 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 28 |
|
668 |
|
669 \section3 How to Build the QIBASE Plugin on Windows |
|
670 |
|
671 The following assumes InterBase or Firebird is installed in |
|
672 \c{C:\interbase}: |
|
673 |
|
674 If you are using InterBase: |
|
675 |
|
676 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 29 |
|
677 |
|
678 If you are using Firebird, the Firebird library has to be set explicitely: |
|
679 |
|
680 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 30 |
|
681 |
|
682 If you are not using a Microsoft compiler, replace \c nmake |
|
683 with \c make in the line above. |
|
684 |
|
685 Note that \c{C:\interbase\bin} must be in the \c PATH. |
|
686 |
|
687 \bold{Note:} This database plugin is not supported for Windows CE. |
|
688 |
|
689 \target troubleshooting |
|
690 \section1 Troubleshooting |
|
691 |
|
692 You should always use client libraries that have been compiled with |
|
693 the same compiler as you are using for your project. If you cannot get |
|
694 a source distibution to compile the client libraries yourself, you |
|
695 must make sure that the pre-compiled library is compatible with |
|
696 your compiler, otherwise you will get a lot of "undefined symbols" |
|
697 errors. Some compilers have tools to convert libraries, e.g. Borland |
|
698 ships the tool \c{COFF2OMF.EXE} to convert libraries that have been |
|
699 generated with Microsoft Visual C++. |
|
700 |
|
701 If the compilation of a plugin succeeds but it cannot be loaded, |
|
702 make sure that the following requirements are met: |
|
703 |
|
704 \list |
|
705 \i Ensure that you are using a shared Qt library; you cannot use the |
|
706 plugins with a static build. |
|
707 \i Ensure that the plugin is in the correct directory. You can use |
|
708 QApplication::libraryPaths() to determine where Qt looks for plugins. |
|
709 \i Ensure that the client libraries of the DBMS are available on the |
|
710 system. On Unix, run the command \c{ldd} and pass the name of the |
|
711 plugin as parameter, for example \c{ldd libqsqlmysql.so}. You will |
|
712 get a warning if any of the client libraries couldn't be found. |
|
713 On Windows, you can use Visual Studio's dependency walker. |
|
714 \i Compile Qt with \c{QT_DEBUG_COMPONENT} defined to get very verbose |
|
715 debug output when loading plugins. |
|
716 \endlist |
|
717 |
|
718 Make sure you have followed the guide to \l{Deploying Plugins}. |
|
719 If you experience plugin load problems and see output like this: |
|
720 |
|
721 \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 31 |
|
722 |
|
723 the problem is usually that the plugin had the wrong \l{Deploying |
|
724 Plugins#The Build Key}{build key}. This might require removing an |
|
725 entry from the \l{Deploying Plugins#The Plugin Cache} {plugin cache}. |
|
726 |
|
727 \target development |
|
728 \section1 How to Write Your Own Database Driver |
|
729 |
|
730 QSqlDatabase is responsible for loading and managing database driver |
|
731 plugins. When a database is added (see QSqlDatabase::addDatabase()), |
|
732 the appropriate driver plugin is loaded (using QSqlDriverPlugin). |
|
733 QSqlDatabase relies on the driver plugin to provide interfaces for |
|
734 QSqlDriver and QSqlResult. |
|
735 |
|
736 QSqlDriver is an abstract base class which defines the functionality |
|
737 of a SQL database driver. This includes functions such as |
|
738 QSqlDriver::open() and QSqlDriver::close(). QSqlDriver is responsible |
|
739 for connecting to a database, establish the proper environment, etc. |
|
740 In addition, QSqlDriver can create QSqlQuery objects appropriate for |
|
741 the particular database API. QSqlDatabase forwards many of its |
|
742 function calls directly to QSqlDriver which provides the concrete |
|
743 implementation. |
|
744 |
|
745 QSqlResult is an abstract base class which defines the functionality |
|
746 of a SQL database query. This includes statements such as \c{SELECT}, |
|
747 \c{UPDATE}, and \c{ALTER} \c{TABLE}. QSqlResult contains functions |
|
748 such as QSqlResult::next() and QSqlResult::value(). QSqlResult is |
|
749 responsible for sending queries to the database, returning result |
|
750 data, etc. QSqlQuery forwards many of its function calls directly to |
|
751 QSqlResult which provides the concrete implementation. |
|
752 |
|
753 QSqlDriver and QSqlResult are closely connected. When implementing a |
|
754 Qt SQL driver, both of these classes must to be subclassed and the |
|
755 abstract virtual methods in each class must be implemented. |
|
756 |
|
757 To implement a Qt SQL driver as a plugin (so that it is |
|
758 recognized and loaded by the Qt library at runtime), the driver |
|
759 must use the Q_EXPORT_PLUGIN2() macro. Read \l{How to Create Qt |
|
760 Plugins} for more information on this. You can also check out how |
|
761 this is done in the SQL plugins that are provided with Qt in |
|
762 \c{QTDIR/src/plugins/sqldrivers} and \c{QTDIR/src/sql/drivers}. |
|
763 |
|
764 The following code can be used as a skeleton for a SQL driver: |
|
765 |
|
766 \snippet doc/src/snippets/sqldatabase/sqldatabase.cpp 47 |
|
767 \codeline |
|
768 \snippet doc/src/snippets/sqldatabase/sqldatabase.cpp 48 |
|
769 */ |