--- a/Symbian3/PDK/Source/GUID-22B535FA-6C8A-5B39-9CD7-6E85A86B7C2C.dita Tue Mar 30 11:42:04 2010 +0100
+++ b/Symbian3/PDK/Source/GUID-22B535FA-6C8A-5B39-9CD7-6E85A86B7C2C.dita Tue Mar 30 11:56:28 2010 +0100
@@ -1,286 +1,292 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies) All rights reserved. -->
-<!-- This component and the accompanying materials are made available under the terms of the License
-"Eclipse Public License v1.0" which accompanies this distribution,
-and is available at the URL "http://www.eclipse.org/legal/epl-v10.html". -->
-<!-- Initial Contributors:
- Nokia Corporation - initial contribution.
-Contributors:
--->
-<!DOCTYPE concept
- PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd">
-<concept xml:lang="en" id="GUID-22B535FA-6C8A-5B39-9CD7-6E85A86B7C2C"><title>Basic SQL Example: basicsqlexample.cpp </title><prolog><metadata><keywords/></metadata></prolog><conbody><p>A copy of the basicsqlexample.cpp file for the basic SQL example application. </p> <section><title>Introduction</title> <p>The functions demonstrate how to perform several SQL operations. </p> </section> <section><title>Code</title> <p>Defines the functions. </p> <codeblock id="GUID-7DB281F3-2F11-542A-BE71-DDFBDD113A6C" xml:space="preserve">// basicsqlexample.cpp
-//
-// Copyright (c) Nokia Ltd 2009. All rights reserved.
-//
-/** This example application demonstrates several SQL operations including:
-<ul>
-<li>Creating and managing a database</li>
-<li>Creating and managing tables</li>
-<li>Querying a database</li>
-</ul>
-
-@file basicsqlquery.cpp
-*/
-#include <e32cons.h>
-#include <SqlDb.h>
-#include "basicsqlexample.h"
-/* *************************************************** */
-
-/* SQL Statements: */
-_LIT(KTabCreate,"CREATE TABLE Pets( person TEXT, cat SMALLINT, dog SMALLINT, rodent SMALLINT, bird SMALLINT);");
-
-/* An INSERT statement. Long version. */
- //Pets of Jon Doe
-_LIT(KTabInsert1,"INSERT INTO Pets (person, cat, dog, rodent, bird) VALUES ('Jon Doe', 0, 1, 1, 0);");
-
-/* Simplified insert statement text. */
-//Pets of Jane Roe
-_LIT(KTabInsert2,"INSERT INTO Pets VALUES ('Jane Roe',2,1,0,0);");
-//Pets of Tom Moe
-_LIT(KTabInsert3,"INSERT INTO Pets VALUES ('Tom Moe',1,0,0,3);");
-
-/* SQL SELECT Statements. */
-_LIT(KSelect1,"SELECT person FROM Pets WHERE cat >= 1;");
-_LIT(KSelect2,"SELECT person FROM Pets WHERE cat >= 1 AND dog >= 1;");
-_LIT(KSelect3,"SELECT person FROM Pets WHERE rodent >= 1;");
-
-/* Various messages */
-_LIT(KTitle, "Basic SQL example");
-_LIT(KTextPressAKey, "\n\nPress any key to step through the example\n");
-_LIT(KExit,"Press any key to exit the application\n");
-_LIT(KPressAKey,"\nPress a key to continue\n");
-_LIT(KDatabaseMsg,"\nCreating a database\n");
-_LIT(KOpen,"Opening the database\n");
-_LIT(KClose,"Closing the database\n");
-_LIT(KCreateTable,"\nCreating a table\n");
-_LIT(KInsert,"Inserting records into the table\n");
-_LIT(KPrepare,"Preparing a query\n");
-_LIT(KExecute,"Executing a query\n");
-
-/* Constants used with the SQL operations. */
-_LIT(KDatabaseName, "\\Basic_db.db");
-_LIT(KPerson,"person");
-_LIT(KCat,"cat");
-_LIT(KDog,"dog");
-_LIT(KRodent,"rodent");
-_LIT(KBird,"bird");
-
-/* End of SQL Statements. */
-
-/* *************************************************** */
-/**
-Allocates and constructs a CBasicSqlExample object and
-leaves it on the cleanup stack.
-Initialises all member data to their default values.
-*/
-CBasicSqlExample* CBasicSqlExample::NewLC()
- {
- CBasicSqlExample* rep = new(ELeave) CBasicSqlExample();
- CleanupStack::PushL(rep);
- rep->ConstructL();
- return rep;
- }
-/* *************************************************** */
-
-/**
-Constructor
-*/
-CBasicSqlExample::CBasicSqlExample()
- {
- }
-
-void CBasicSqlExample::ConstructL()
- {
- iConsole = Console::NewL(KTitle,TSize(KConsFullScreen,KConsFullScreen));
- }
-/* *************************************************** */
-
-/**
-Destructor
-*/
-CBasicSqlExample::~CBasicSqlExample()
- {
- iPetDb.Close();
-
- Prompt(KExit);
- delete iConsole;
- }
-/* *************************************************** */
-
-void CBasicSqlExample::Prompt()
- {
- iConsole->Printf(KPressAKey);
- iConsole->Getch();
- }
-void CBasicSqlExample::Prompt(const TDesC& aText)
- {
- iConsole->Printf(aText);
- iConsole->Printf(KPressAKey);
- iConsole->Getch();
- }
-
-/** Creates a Database
-@leave KErrNotFound, KErrAbort, KErrPermissionDenied,
-KErrArgument, system-wide error codes.
-*/
-void CBasicSqlExample::CreateDatabaseL()
- {
- RSqlDatabase db;
-
- iConsole->Printf(KDatabaseMsg);
- //create the database
- User::LeaveIfError(db.Create(KDatabaseName));
-
- iConsole->Printf(KDatabaseName);
- CleanupClosePushL(db);
-
- User::LeaveIfError(db.Exec(KTabCreate));
- CleanupStack::PopAndDestroy(1);
-
- Prompt(KClose);
- }
-/* *************************************************** */
-
-
-/** Add a few rows to the table.
-This function shows how to insert data in a table.
-*/
-void CBasicSqlExample::PopulateDatabaseL()
- {
- RSqlDatabase db;
-
- // Open the database that was created earlier.
- User::LeaveIfError(db.Open(KDatabaseName));
- CleanupClosePushL(db);
- Prompt(KOpen);
-
- // Inserts the first row.
- User::LeaveIfError(db.Exec(KTabInsert1));
- Prompt(KTabInsert1);
-
- // Inserts the second row.
- User::LeaveIfError(db.Exec(KTabInsert2));
- Prompt(KTabInsert2);
-
- // Inserts the third row.
- User::LeaveIfError(db.Exec(KTabInsert3));
- Prompt(KTabInsert3);
-
- // Close the database.
- // cleanup the database.
- Prompt(KClose);
- CleanupStack::PopAndDestroy(1);
- }
-/* *************************************************** */
-
-/** Querying the database.
-This function shows how to get information from the database.
-It provides a basic query.
-*/
-void CBasicSqlExample::SqlQueryL(const TDesC& aStatement)
- {
- RSqlStatement stmt;
- iConsole->Printf(_L("Running Query:\n%S\n"), &aStatement);
-
- User::LeaveIfError(stmt.Prepare(iPetDb, aStatement));
- CleanupClosePushL(stmt);
-
- TInt personIndex = stmt.ColumnIndex(KPerson); // index. This doesn't change after query preparation.
- TInt rc = KErrNone;
- while ((rc = stmt.Next()) == KSqlAtRow)
- {
- // Do something with the results
- TPtrC myData = stmt.ColumnTextL(personIndex); // read return data
- iConsole->Printf(_L("Person=%S\n"), &myData);
- }
- if (rc != KSqlAtEnd)
- {
- _LIT(KErrSQLError, "Error %d returned from RSqlStatement::Next().");
- iConsole->Printf(KErrSQLError, rc);
- }
- Prompt();
- CleanupStack::PopAndDestroy(1);
- }
-
-void CBasicSqlExample::OpenDatabaseL()
- {
- User::LeaveIfError(iPetDb.Open(KDatabaseName));
- }
-
-void CBasicSqlExample::CloseDatabase()
- {
- iPetDb.Close();
- }
-
-void CBasicSqlExample::DeleteDatabase()
- {
- // should be safe if db closed, catch if db left open.
- iPetDb.Close();
- iPetDb.Delete(KDatabaseName);
- }
-
-void CBasicSqlExample::ExampleL()
- {
- TRAPD(err, DoExampleL());
- // Remove database file for next run of example.
- DeleteDatabase();
- User::LeaveIfError(err);
- }
-
-void CBasicSqlExample::DoExampleL()
- {
- // Create a database
- CreateDatabaseL();
-
- // Add table and data
- PopulateDatabaseL();
-
- // Query the data
- OpenDatabaseL();
- SqlQueryL(KSelect1);
- SqlQueryL(KSelect2);
- SqlQueryL(KSelect3);
- CloseDatabase();
- }
-
-/* *************************************************** */
-
-template <class T>class TRunExample
- {
-public:
- static void RunExample(){
- // Create an Active Scheduler to handle asychronous calls
- CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
- CleanupStack::PushL(scheduler);
- CActiveScheduler::Install( scheduler );
- T* app = T::NewLC();
- app->ExampleL();
- CleanupStack::PopAndDestroy(2); //app, scheduler
- };
- };
-
-GLDEF_C TInt E32Main()
- {
- __UHEAP_MARK;
- CTrapCleanup* cleanup = CTrapCleanup::New();
- if(cleanup == NULL)
- {
- return KErrNoMemory;
- }
- TRunExample<CBasicSqlExample> example;
- // TRunExample<CComplexSqlExample> example2;
- // TRunExample<CEvenMoreComplexSqlExample> example3;
-
- TRAPD(err, example.RunExample());
- // TRAP(err, example2.RunExample());
- // TRAP(err, example3.RunExample());
-
- if(err != KErrNone)
- {
- User::Panic(_L("Failed to complete"),err);
- }
- delete cleanup;
- __UHEAP_MARKEND;
- return KErrNone;
- }</codeblock> </section> </conbody></concept>
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies) All rights reserved. -->
+<!-- This component and the accompanying materials are made available under the terms of the License
+"Eclipse Public License v1.0" which accompanies this distribution,
+and is available at the URL "http://www.eclipse.org/legal/epl-v10.html". -->
+<!-- Initial Contributors:
+ Nokia Corporation - initial contribution.
+Contributors:
+-->
+<!DOCTYPE concept
+ PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd">
+<concept id="GUID-22B535FA-6C8A-5B39-9CD7-6E85A86B7C2C" xml:lang="en"><title>Basic
+SQL Example: basicsqlexample.cpp </title><shortdesc>A copy of the basicsqlexample.cpp file for the basic SQL example
+application. </shortdesc><prolog><metadata><keywords/></metadata></prolog><conbody>
+<section id="GUID-B68A6BA4-43F1-4E83-B51F-9203F12BEF1F"><title>Introduction</title> <p>The functions demonstrate how to perform
+several SQL operations. </p> </section>
+<section id="GUID-0AB66D9A-4485-496A-962C-7680FAEBF9E7"><title>Code</title> <p>Defines the functions. </p> <codeblock id="GUID-7DB281F3-2F11-542A-BE71-DDFBDD113A6C" xml:space="preserve">// basicsqlexample.cpp
+//
+// Copyright (c) Nokia Ltd 2009. All rights reserved.
+//
+/** This example application demonstrates several SQL operations including:
+<ul>
+<li>Creating and managing a database</li>
+<li>Creating and managing tables</li>
+<li>Querying a database</li>
+</ul>
+
+@file basicsqlquery.cpp
+*/
+#include <e32cons.h>
+#include <SqlDb.h>
+#include "basicsqlexample.h"
+/* *************************************************** */
+
+/* SQL Statements: */
+_LIT(KTabCreate,"CREATE TABLE Pets( person TEXT, cat SMALLINT, dog SMALLINT, rodent SMALLINT, bird SMALLINT);");
+
+/* An INSERT statement. Long version. */
+ //Pets of Jon Doe
+_LIT(KTabInsert1,"INSERT INTO Pets (person, cat, dog, rodent, bird) VALUES ('Jon Doe', 0, 1, 1, 0);");
+
+/* Simplified insert statement text. */
+//Pets of Jane Roe
+_LIT(KTabInsert2,"INSERT INTO Pets VALUES ('Jane Roe',2,1,0,0);");
+//Pets of Tom Moe
+_LIT(KTabInsert3,"INSERT INTO Pets VALUES ('Tom Moe',1,0,0,3);");
+
+/* SQL SELECT Statements. */
+_LIT(KSelect1,"SELECT person FROM Pets WHERE cat >= 1;");
+_LIT(KSelect2,"SELECT person FROM Pets WHERE cat >= 1 AND dog >= 1;");
+_LIT(KSelect3,"SELECT person FROM Pets WHERE rodent >= 1;");
+
+/* Various messages */
+_LIT(KTitle, "Basic SQL example");
+_LIT(KTextPressAKey, "\n\nPress any key to step through the example\n");
+_LIT(KExit,"Press any key to exit the application\n");
+_LIT(KPressAKey,"\nPress a key to continue\n");
+_LIT(KDatabaseMsg,"\nCreating a database\n");
+_LIT(KOpen,"Opening the database\n");
+_LIT(KClose,"Closing the database\n");
+_LIT(KCreateTable,"\nCreating a table\n");
+_LIT(KInsert,"Inserting records into the table\n");
+_LIT(KPrepare,"Preparing a query\n");
+_LIT(KExecute,"Executing a query\n");
+
+/* Constants used with the SQL operations. */
+_LIT(KDatabaseName, "\\Basic_db.db");
+_LIT(KPerson,"person");
+_LIT(KCat,"cat");
+_LIT(KDog,"dog");
+_LIT(KRodent,"rodent");
+_LIT(KBird,"bird");
+
+/* End of SQL Statements. */
+
+/* *************************************************** */
+/**
+Allocates and constructs a CBasicSqlExample object and
+leaves it on the cleanup stack.
+Initialises all member data to their default values.
+*/
+CBasicSqlExample* CBasicSqlExample::NewLC()
+ {
+ CBasicSqlExample* rep = new(ELeave) CBasicSqlExample();
+ CleanupStack::PushL(rep);
+ rep->ConstructL();
+ return rep;
+ }
+/* *************************************************** */
+
+/**
+Constructor
+*/
+CBasicSqlExample::CBasicSqlExample()
+ {
+ }
+
+void CBasicSqlExample::ConstructL()
+ {
+ iConsole = Console::NewL(KTitle,TSize(KConsFullScreen,KConsFullScreen));
+ }
+/* *************************************************** */
+
+/**
+Destructor
+*/
+CBasicSqlExample::~CBasicSqlExample()
+ {
+ iPetDb.Close();
+
+ Prompt(KExit);
+ delete iConsole;
+ }
+/* *************************************************** */
+
+void CBasicSqlExample::Prompt()
+ {
+ iConsole->Printf(KPressAKey);
+ iConsole->Getch();
+ }
+void CBasicSqlExample::Prompt(const TDesC& aText)
+ {
+ iConsole->Printf(aText);
+ iConsole->Printf(KPressAKey);
+ iConsole->Getch();
+ }
+
+/** Creates a Database
+@leave KErrNotFound, KErrAbort, KErrPermissionDenied,
+KErrArgument, system-wide error codes.
+*/
+void CBasicSqlExample::CreateDatabaseL()
+ {
+ RSqlDatabase db;
+
+ iConsole->Printf(KDatabaseMsg);
+ //create the database
+ User::LeaveIfError(db.Create(KDatabaseName));
+
+ iConsole->Printf(KDatabaseName);
+ CleanupClosePushL(db);
+
+ User::LeaveIfError(db.Exec(KTabCreate));
+ CleanupStack::PopAndDestroy(1);
+
+ Prompt(KClose);
+ }
+/* *************************************************** */
+
+
+/** Add a few rows to the table.
+This function shows how to insert data in a table.
+*/
+void CBasicSqlExample::PopulateDatabaseL()
+ {
+ RSqlDatabase db;
+
+ // Open the database that was created earlier.
+ User::LeaveIfError(db.Open(KDatabaseName));
+ CleanupClosePushL(db);
+ Prompt(KOpen);
+
+ // Inserts the first row.
+ User::LeaveIfError(db.Exec(KTabInsert1));
+ Prompt(KTabInsert1);
+
+ // Inserts the second row.
+ User::LeaveIfError(db.Exec(KTabInsert2));
+ Prompt(KTabInsert2);
+
+ // Inserts the third row.
+ User::LeaveIfError(db.Exec(KTabInsert3));
+ Prompt(KTabInsert3);
+
+ // Close the database.
+ // cleanup the database.
+ Prompt(KClose);
+ CleanupStack::PopAndDestroy(1);
+ }
+/* *************************************************** */
+
+/** Querying the database.
+This function shows how to get information from the database.
+It provides a basic query.
+*/
+void CBasicSqlExample::SqlQueryL(const TDesC& aStatement)
+ {
+ RSqlStatement stmt;
+ iConsole->Printf(_L("Running Query:\n%S\n"), &aStatement);
+
+ User::LeaveIfError(stmt.Prepare(iPetDb, aStatement));
+ CleanupClosePushL(stmt);
+
+ TInt personIndex = stmt.ColumnIndex(KPerson); // index. This doesn't change after query preparation.
+ TInt rc = KErrNone;
+ while ((rc = stmt.Next()) == KSqlAtRow)
+ {
+ // Do something with the results
+ TPtrC myData = stmt.ColumnTextL(personIndex); // read return data
+ iConsole->Printf(_L("Person=%S\n"), &myData);
+ }
+ if (rc != KSqlAtEnd)
+ {
+ _LIT(KErrSQLError, "Error %d returned from RSqlStatement::Next().");
+ iConsole->Printf(KErrSQLError, rc);
+ }
+ Prompt();
+ CleanupStack::PopAndDestroy(1);
+ }
+
+void CBasicSqlExample::OpenDatabaseL()
+ {
+ User::LeaveIfError(iPetDb.Open(KDatabaseName));
+ }
+
+void CBasicSqlExample::CloseDatabase()
+ {
+ iPetDb.Close();
+ }
+
+void CBasicSqlExample::DeleteDatabase()
+ {
+ // should be safe if db closed, catch if db left open.
+ iPetDb.Close();
+ iPetDb.Delete(KDatabaseName);
+ }
+
+void CBasicSqlExample::ExampleL()
+ {
+ TRAPD(err, DoExampleL());
+ // Remove database file for next run of example.
+ DeleteDatabase();
+ User::LeaveIfError(err);
+ }
+
+void CBasicSqlExample::DoExampleL()
+ {
+ // Create a database
+ CreateDatabaseL();
+
+ // Add table and data
+ PopulateDatabaseL();
+
+ // Query the data
+ OpenDatabaseL();
+ SqlQueryL(KSelect1);
+ SqlQueryL(KSelect2);
+ SqlQueryL(KSelect3);
+ CloseDatabase();
+ }
+
+/* *************************************************** */
+
+template <class T>class TRunExample
+ {
+public:
+ static void RunExample(){
+ // Create an Active Scheduler to handle asychronous calls
+ CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
+ CleanupStack::PushL(scheduler);
+ CActiveScheduler::Install( scheduler );
+ T* app = T::NewLC();
+ app->ExampleL();
+ CleanupStack::PopAndDestroy(2); //app, scheduler
+ };
+ };
+
+GLDEF_C TInt E32Main()
+ {
+ __UHEAP_MARK;
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+ if(cleanup == NULL)
+ {
+ return KErrNoMemory;
+ }
+ TRunExample<CBasicSqlExample> example;
+ // TRunExample<CComplexSqlExample> example2;
+ // TRunExample<CEvenMoreComplexSqlExample> example3;
+
+ TRAPD(err, example.RunExample());
+ // TRAP(err, example2.RunExample());
+ // TRAP(err, example3.RunExample());
+
+ if(err != KErrNone)
+ {
+ User::Panic(_L("Failed to complete"),err);
+ }
+ delete cleanup;
+ __UHEAP_MARKEND;
+ return KErrNone;
+ }</codeblock> </section>
+</conbody></concept>
\ No newline at end of file