symbian数据库demo代码

来源:互联网 发布:卓讯企业名录软件 编辑:程序博客网 时间:2024/05/01 02:36

mmp中添加:LIBRARY edbms.lib

DBbase.h
// DBMS Interface to Databases

/*
DBbase.h
*/

#ifndef DBBASE_H
#define DBBASE_H


#include <d32dbms.h>
#include <f32file.h>
#include <s32file.h>
#include <badesca.h>

//class RDbStoreDatabase;
//class RFs;
//class RDbDatabase;
//class RDbRowSet;

class CDBbase
{
    public: 
        void ConstructL();
        
        ~CDBbase();
        
    public: // New function
        TInt ExecuteSQL(TDesC& aSQL); 

        void SelectSQL(TDesC& aSQL, RDbView* aView);

        void AddDataToTableMailL(TDesC& aSQL, CDesCArray& aParamArray);

        void AddDataToTableMailL();
// void AddDataToTableAccount();
            
    private:
            // Create database
        void MakeDatabaseL();

        void OpenDatabaseL();
        
        void CreateTableL();
        
        void CreateTableMailL(RDbDatabase& aDatabase);
        
        void CreateTableAccountL(RDbDatabase& aDatabase); 
            
        void MakeDatabaseL(const TDesC& aDatabaseFileName);

        void CreateTableL(RDbDatabase& aDatabase);

    
        
    private:

        TParse iDatabaseFileName;
        
        RFs iFsSession;
        
        RDbStoreDatabase iDatabase; 

         CFileStore* iStore;
};

#endif

// end of file





DBbase.cpp
// DBMS Interface to Databases

/*
DBbase.cpp
*/



#include "DBbase.h"

void CDBbase::ConstructL()
    { 
    _LIT(KDbName, "mail_mt.db");
    _LIT(KCEpoc32exData, "C://epoc32ex//data//");

    TInt fsret = iFsSession.Connect(); // start a file session
    if (fsret != KErrNone)
        {
        User::Leave(fsret);
        }
    
    iFsSession.Parse(KDbName, KCEpoc32exData, iDatabaseFileName);
    
    if (iFsSession.IsValidName(KCEpoc32exData) == EFalse)
        {
        iFsSession.MkDirAll(KCEpoc32exData);
        }

    TRAPD(error, OpenDatabaseL());

    if (error != KErrNone)
        { 
        if (error == KErrNotFound)
            { 
            MakeDatabaseL(); 
            } 
        } 
    }

CDBbase::~CDBbase()
    { 
// iDatabase.Close();
    iFsSession.Close(); // close the file session 
    }

void CDBbase::OpenDatabaseL()
    {
    iStore = CFileStore::OpenLC(iFsSession, iDatabaseFileName.FullName(), EFileRead|EFileWrite);
    iDatabase.OpenL(iStore, iStore->Root());
    iDatabase.Close();
        // pop store
    CleanupStack::PopAndDestroy();
    }
    
void CDBbase::MakeDatabaseL()
    {
    MakeDatabaseL(iDatabaseFileName.FullName());
    }

void CDBbase::MakeDatabaseL(const TDesC& aDatabaseFileName)
    {
                // construct a file store object - the file to contain the
                // database replaces any existing file of the same name.
    iStore = CPermanentFileStore::ReplaceLC(iFsSession,aDatabaseFileName,EFileRead|EFileWrite);
                // Complete file store creation
    iStore->SetTypeL(iStore->Layout());

                // Create a database in the store
// RDbStoreDatabase database;
    TStreamId id=iDatabase.CreateL(iStore);
                // NB. The database won't be closed on failure
                // Cleanup can be done; more usually database objects
                // are not automatic variables.

                // Keep database id as root of store
    iStore->SetRootL(id);

                // Complete database creation by commiting the store
    iStore->CommitL();

    CreateTableL(); 
                // close the database
    iDatabase.Close();

                // Do not commit store: database has taken control of commit
    CleanupStack::PopAndDestroy();
    }
    
void CDBbase::CreateTableL()
    {
    CreateTableL(iDatabase);
    } 
    
void CDBbase::CreateTableL(RDbDatabase& aDatabase)
    {
    CreateTableMailL(aDatabase);
    
    CreateTableAccountL(aDatabase);
    } 
    
void CDBbase::CreateTableMailL(RDbDatabase& aDatabase)
    {
    _LIT(KColID, "D_MAIL_ID");
    _LIT(KColFrom, "FROM_MAIL");
    _LIT(KColTitle, "TITLE_MAIL");
    _LIT(KColContent, "CONTENT_MAIL");
    _LIT(KColDate, "DATE_MAIL");
    _LIT(KColRead, "IS_READ");
    _LIT(KColDelete, "IS_DELETE");
    _LIT(KColGet, "IS_GET");
    _LIT(KTable, "D_MAIL");
    
        // Create a table definition
    CDbColSet* columns = CDbColSet::NewLC();
        
    TDbCol d_mail_id(KColID, EDbColInt32);
    d_mail_id.iAttributes = TDbCol::EAutoIncrement;
    columns->AddL(d_mail_id);
    
    TDbCol from_mail(KColFrom, EDbColText, 60);
    columns->AddL(from_mail);
    
    TDbCol title_mail(KColTitle, EDbColText, 60);
    columns->AddL(title_mail);
    
    TDbCol content_mail(KColContent, EDbColText);
    columns->AddL(content_mail);
    
    TDbCol date_mail(KColDate, EDbColText, 20);
    columns->AddL(date_mail);
    
    TDbCol is_read(KColRead, EDbColBit);
    columns->AddL(is_read);
    
    TDbCol is_delete(KColDelete, EDbColBit);
    columns->AddL(is_delete);
    
    TDbCol is_get(KColGet, EDbColBit);
    columns->AddL(is_get); 
    
    User::LeaveIfError(aDatabase.CreateTable(KTable, *columns));
        
        // cleanup the column set
    CleanupStack::PopAndDestroy();
    }
    
void CDBbase::CreateTableAccountL(RDbDatabase& aDatabase)
    {
    _LIT(KColID, "D_ACCOUNT_ID");
    _LIT(KColReceiverType, "RECEIVER_TYPE");
    _LIT(KColSendType, "SEND_TYPE");
    _LIT(KColReceiverServer, "RECEIVER_SERVER");
    _LIT(KColSendServer, "SEND_SERVER");
    _LIT(KColUser, "USER_NAME");
    _LIT(KColPass, "USER_PASS");
    _LIT(KTable, "D_ACCOUNT");
    
    CDbColSet* columns = CDbColSet::NewLC();
    
    TDbCol d_account_id(KColID, EDbColInt32);
    d_account_id.iAttributes = TDbCol::EAutoIncrement;
    columns->AddL(d_account_id);
    
    TDbCol receiver_type(KColReceiverType, EDbColText, 20);
    columns->AddL(receiver_type);
    
    TDbCol send_type(KColSendType, EDbColText, 20);
    columns->AddL(send_type);
    
    TDbCol receiver_server(KColReceiverServer, EDbColText, 20);
    columns->AddL(receiver_server);
    
    TDbCol send_server(KColSendServer, EDbColText, 20);
    columns->AddL(send_server);
    
    TDbCol user_name(KColUser, EDbColText, 60);
    user_name.iAttributes = TDbCol::ENotNull;
    columns->AddL(user_name);
    
    TDbCol user_pass(KColPass, EDbColText, 60); 
    columns->AddL(user_pass);
    
    User::LeaveIfError(aDatabase.CreateTable(KTable, *columns));
        
    CleanupStack::PopAndDestroy();
    } 

//////////////////////////////////////////////////////////////////////////
// Return: KErrNone, if the operation is complete or 1, 
// if the operation requires further incremental execution 
// or another of the system-wide error codes.
TInt CDBbase::ExecuteSQL(TDesC& aSQL)
    {
    iStore = CFileStore::OpenLC(iFsSession, iDatabaseFileName.FullName(), EFileRead|EFileWrite);
    iDatabase.OpenL(iStore, iStore->Root());
    
    RDbUpdate update;
    TInt r = update.Execute(iDatabase, aSQL);
    update.Close();

    iDatabase.Close();
        // pop store
    CleanupStack::PopAndDestroy(); 
    return r;
    }

void CDBbase::AddDataToTableMailL()
    {
    iStore = CFileStore::OpenLC(iFsSession, iDatabaseFileName.FullName(), EFileRead|EFileWrite);
    iDatabase.OpenL(iStore, iStore->Root());

    _LIT(KSQLStatement, "select FROM_MAIL from D_MAIL");
    _LIT(KFromMail1, "luw@163.com");

    RDbView view;
    User::LeaveIfError(view.Prepare(iDatabase, TDbQuery(KSQLStatement, EDbCompareNormal)));
    User::LeaveIfError(view.EvaluateAll());

    view.InsertL();

    view.SetColL(1, KFromMail1);

    view.PutL();

    view.Close();

    iDatabase.Close();
        // pop store
    CleanupStack::PopAndDestroy(); 
    }

void CDBbase::AddDataToTableMailL(TDesC& aSQL, CDesCArray& aParamArray)
    {
    iStore = CFileStore::OpenLC(iFsSession, iDatabaseFileName.FullName(), EFileRead|EFileWrite);
    iDatabase.OpenL(iStore, iStore->Root());

    RDbView view;
    User::LeaveIfError(view.Prepare(iDatabase, TDbQuery(aSQL, EDbCompareNormal)));
    User::LeaveIfError(view.EvaluateAll());

    view.InsertL();

    for (int i=1; i<=aParamArray.Count(); i++)
        { 
        view.SetColL(i, aParamArray[i-1]);
        } 

    view.PutL();

    view.Close();

    iDatabase.Close();
        // pop store
    CleanupStack::PopAndDestroy(); 
    }

void CDBbase::SelectSQL(TDesC& aSQL, RDbView* aView)
    {
    iStore = CFileStore::OpenLC(iFsSession, iDatabaseFileName.FullName(), EFileRead|EFileWrite);
    iDatabase.OpenL(iStore, iStore->Root());

    User::LeaveIfError(aView->Prepare(iDatabase, TDbQuery(aSQL, EDbCompareNormal)));
    User::LeaveIfError(aView->EvaluateAll()); 
    
    TInt a = aView->CountL();
    for (aView->FirstL(); aView->AtRow(); aView->NextL())
    {
        aView->GetL();
// TPtrC t = aView->ColDes(1);
    }

    iDatabase.Close();
        // pop store
    CleanupStack::PopAndDestroy(); 
    }

// end of file

原创粉丝点击