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