亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dbengine.cpp

?? 一個手機書店應用程序
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
 * ============================================================================
 *  Name     : BookstoreDb from DBEngine.cpp
 *  Part of  : BookstoreDb
 *  Created  : 8.12.2003 by Forum Nokia
 *  Version  : 1.0
 *  Copyright: Nokia Corporation
 * ============================================================================
 */

#include <badesca.h>    // CDesCArrayFlat
#include <s32file.h>    // CFileStore & CPermanentFileStore
#include <bautils.h>    // file helpers
#include <eikenv.h>
#include "DBEngine.h"

// Implementation specific constants
const int KCustomSqlMaxLength = 256;
const int KArrayGranularity = 5;     // for CDesCArrayFlat

// ---------------------------------------------------------------------------
// CBookstoreDb::NewL()
//
// Create instance of the bookstore database engine.
// ---------------------------------------------------------------------------
CBookstoreDb* CBookstoreDb::NewL()
    {
    CBookstoreDb* tmp = new (ELeave)CBookstoreDb();
    CleanupStack::PushL(tmp);
    tmp->ConstructL();
    CleanupStack::Pop();
    return tmp;
    }

// ---------------------------------------------------------------------------
// CBookstoreDb::~CBookstoreDb()
//
// Destructor of the bookstore database engine. Release resources.
// ---------------------------------------------------------------------------
CBookstoreDb::~CBookstoreDb()
    {
    Close();  // Just in case, if the user does not close this explicitely
    iFsSession.Close();
    }

// ---------------------------------------------------------------------------
// CBookstoreDb::ConstructL()
//
// Second phase construction. Leaves, if RFs session cannot be created.
// ---------------------------------------------------------------------------
void CBookstoreDb::ConstructL()
    {
    TInt err = iFsSession.Connect();
    if(err)
        User::Leave(err);
    }

// ---------------------------------------------------------------------------
// CBookstoreDb::CBookstoreDb()
//
// Constructor
// ---------------------------------------------------------------------------
CBookstoreDb::CBookstoreDb()
    {
    iOpen = EFalse;
    }

// ---------------------------------------------------------------------------
// CBookstoreDb::OpenDbL()
//
// Open existing bookstore database for exclusive access.
// ---------------------------------------------------------------------------
TInt CBookstoreDb::OpenDbL(const TFileName& aExistingBookstoreFile)
    {
    Close();

    if(!BaflUtils::FileExists(iFsSession, aExistingBookstoreFile))
        {
            return KErrNotFound;
        }

    iFileStore = CPermanentFileStore::OpenL(iFsSession,
        aExistingBookstoreFile, EFileRead|EFileWrite);
    iFileStore->SetTypeL(iFileStore->Layout());       // Set file store type
    iBookstoreDb.OpenL(iFileStore,iFileStore->Root());
    iOpen = ETrue;
    return KErrNone;
    }

// ---------------------------------------------------------------------------
// CBookstoreDb::CreateDbL()
//
// Create a new database. The database will be in exclusive access mode.
// ---------------------------------------------------------------------------
TInt CBookstoreDb::CreateDbL(const TFileName& aNewBookstoreFile)
    {
    Close();

    // Create empty database file.
    iFileStore = CPermanentFileStore::ReplaceL(iFsSession,
        aNewBookstoreFile, EFileRead|EFileWrite);
    iFileStore->SetTypeL(iFileStore->Layout());       // Set file store type
    TStreamId id = iBookstoreDb.CreateL(iFileStore);  // Create stream object
    iFileStore->SetRootL(id);            // Keep database id as root of store
    iFileStore->CommitL();               // Complete creation by commiting

    // Create bookstore tables and indexes
    CreateBooksTableL();
    CreateBooksIndexL();
    iOpen = ETrue;
    return KErrNone;
    }

// ---------------------------------------------------------------------------
// CBookstoreDb::RemoveDbL()
//
// First remove the Books table. Then remove the database file.
// ---------------------------------------------------------------------------
TInt CBookstoreDb::RemoveDbL(const TFileName& aExistingBookstoreFile)
    {
    Close();

    if(!BaflUtils::FileExists(iFsSession, aExistingBookstoreFile))
        {
            return KErrNotFound;
        }

    // It is enough to delete the database file directly. Because this example
    // demonstrates DDL statements, it first opens and drops the Books table.

    OpenDbL(aExistingBookstoreFile);
    DropBooksTableL();
    Close();

    iFsSession.Delete(aExistingBookstoreFile);
    return KErrNone;
    }

// ---------------------------------------------------------------------------
// CBookstoreDb::Close()
//
// Close the database.
// ---------------------------------------------------------------------------
TInt CBookstoreDb::Close()
    {
    iBookstoreDb.Close();
    if(iFileStore)
        {
        delete iFileStore;
        iFileStore = NULL;
        }
    iOpen = EFalse;
    return KErrNone;
    }

// ---------------------------------------------------------------------------
// CBookstoreDb::IsOpen()
//
// Return open status of the database.
// ---------------------------------------------------------------------------
TBool CBookstoreDb::IsOpen() const
    {
    return iOpen;
    }

// ---------------------------------------------------------------------------
// CBookstoreDb::CreateBooksTableL()
//
// Creates Books table. Leaves, if the table cannot be created.
// ---------------------------------------------------------------------------
void CBookstoreDb::CreateBooksTableL()
    {

    // Specify columns for Books table
    TDbCol authorCol(KBooksAuthorCol, EDbColText);   // Using default length
    TDbCol titleCol(KBooksTitleCol, EDbColText, KTitleMaxLength);
    titleCol.iAttributes = TDbCol::ENotNull;
    TDbCol descriptionCol(KBooksDescriptionCol, EDbColLongText); // Stream Data

    // Add the columns to column set
    CDbColSet* bookColSet = CDbColSet::NewLC();
    bookColSet->AddL(authorCol);
    bookColSet->AddL(titleCol);
    bookColSet->AddL(descriptionCol);

    // Create the Books table
    User::LeaveIfError(iBookstoreDb.CreateTable(KBooksTable,
        *bookColSet));
    CleanupStack::PopAndDestroy(bookColSet);
    }

// ---------------------------------------------------------------------------
// CBookstoreDb::CreateBooksIndexL()
//
// Creates an index for Books table. Leaves, if the index cannot be created.
// ---------------------------------------------------------------------------
void CBookstoreDb::CreateBooksIndexL()
    {
    // Create index consisting of two columns
    TDbKeyCol authorCol(KBooksAuthorCol);
    TDbKeyCol titleCol(KBooksTitleCol);

    CDbKey* index = CDbKey::NewLC();   // create index key set
    index->AddL(titleCol);
    index->AddL(authorCol);
    User::LeaveIfError(iBookstoreDb.CreateIndex(
        KBooksIndexName, KBooksTable, *index));
    CleanupStack::PopAndDestroy(index);
    }

// ---------------------------------------------------------------------------
// CBookstoreDb::DropBooksTableL()
//
// Drop the Books table incrementally. Uses RDbIncremental and DDL statement.
// ---------------------------------------------------------------------------
void CBookstoreDb::DropBooksTableL()
    {
    _LIT(KDropTable, "DROP TABLE ");

    // Sql: DROP TABLE Books
    TBuf<KCustomSqlMaxLength> sqlStr;
    sqlStr.Append(KDropTable);
    sqlStr.Append(KBooksTable);

    RDbIncremental incOp;
    TInt incStep = 0xFFFF;
    // Initialise Execution
    TInt incStat = incOp.Execute(iBookstoreDb, sqlStr, incStep);
    while (incStep>0 && incStat==KErrNone)
        {
        incStat = incOp.Next(incStep); // Do the work
        }
    incOp.Close();
    }

// ---------------------------------------------------------------------------
// CBookstoreDb::AddBookWithSqlL()
//
// Add a book to database using RDbView and SQL
// ---------------------------------------------------------------------------
TInt CBookstoreDb::AddBookWithSqlL(const TDesC& aAuthor,
                         const TDesC& aTitle,
                         const TDesC& aDescription)
    {

    if(aAuthor.Length()==0 || aTitle.Length()==0 || aDescription.Length()==0)
        {
        return KErrGeneral;
        }

    // Sql: SELECT Author, Title, Description FROM Books ORDER BY Title, Author
    TBuf<KCustomSqlMaxLength> sqlStr;
    sqlStr.Append(_L("SELECT "));
    sqlStr.Append(KBooksAuthorCol);
    sqlStr.Append(_L(", "));
    sqlStr.Append(KBooksTitleCol);
    sqlStr.Append(_L(", "));
    sqlStr.Append(KBooksDescriptionCol);
    sqlStr.Append(_L(" FROM "));
    sqlStr.Append(KBooksTable);
    sqlStr.Append(_L(" ORDER BY "));
    sqlStr.Append(KBooksTitleCol);
    sqlStr.Append(_L(", "));
    sqlStr.Append(KBooksAuthorCol);

    RDbView view;    // Create a view on the database
    User::LeaveIfError(
        view.Prepare(iBookstoreDb, TDbQuery(sqlStr, EDbCompareFolded)));
    User::LeaveIfError(view.EvaluateAll());

    view.InsertL();  // Insert a row. Column order matches sql select statement

    view.SetColL(1, aAuthor);
    view.SetColL(2, aTitle);
    RDbColWriteStream writeStream;  // Use stream to insert the description
    writeStream.OpenLC(view, 3);
    writeStream.WriteL(aDescription);
    CleanupStack::Pop();
    writeStream.Close();

    view.PutL();     // Complete insertion

    view.Close();
    return KErrNone;
    }

// ---------------------------------------------------------------------------
// CBookstoreDb::AddBookWithCppApiL()
//
// Add a book to database using RDbTable API
// ---------------------------------------------------------------------------
TInt CBookstoreDb::AddBookWithCppApiL(const TDesC& aAuthor,
                            const TDesC& aTitle,
                            const TDesC& aDescription)
    {

    if(aAuthor.Length()==0 || aTitle.Length()==0 || aDescription.Length()==0)
        {
        return KErrGeneral;
        }

    // Create an updateable database table object
    RDbTable table;
    TInt err = table.Open(iBookstoreDb, KBooksTable, table.EUpdatable);
    User::LeaveIfError(err);

    CDbColSet* booksColSet = table.ColSetL();
    CleanupStack::PushL(booksColSet);

    table.Reset();
    table.InsertL();
    table.SetColL(booksColSet->ColNo(KBooksAuthorCol), aAuthor); // col = 1
    table.SetColL(booksColSet->ColNo(KBooksTitleCol), aTitle);   // col = 2

    // Use a stream for the long text column
    RDbColWriteStream writeStream;
    writeStream.OpenLC(table, booksColSet->ColNo(KBooksDescriptionCol));
    writeStream.WriteL(aDescription);
    writeStream.Close();
    CleanupStack::Pop();

    CleanupStack::PopAndDestroy(booksColSet);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
a在线欧美一区| 国产美女精品一区二区三区| 亚洲欧美另类小说| 国产亚洲欧美一级| 久久精品综合网| 中文字幕不卡在线播放| 国产日产欧美精品一区二区三区| 国产欧美一区二区三区鸳鸯浴 | 日本sm残虐另类| 日韩av网站在线观看| 免费成人你懂的| 狠狠网亚洲精品| 国产69精品久久777的优势| 成人高清免费在线播放| 97久久精品人人做人人爽| 色呦呦一区二区三区| 欧美日韩国产片| 精品日韩99亚洲| 国产精品日产欧美久久久久| 一区二区三区日本| 日韩av电影一区| 福利一区二区在线| 91久久精品一区二区三区| 欧美日韩国产小视频在线观看| 精品国产伦一区二区三区免费| 国产精品日产欧美久久久久| 亚洲国产精品欧美一二99| 久久国产综合精品| 波多野结衣中文字幕一区二区三区| 93久久精品日日躁夜夜躁欧美| 欧美精品vⅰdeose4hd| 久久精品一区蜜桃臀影院| 一区二区三区精品视频| 国内外成人在线| 91福利区一区二区三区| 久久这里都是精品| 亚洲国产综合在线| 国产成人av资源| 欧美精品tushy高清| 国产精品三级久久久久三级| 日本在线不卡一区| 91天堂素人约啪| 精品三级在线看| 夜夜操天天操亚洲| 国产在线精品一区二区夜色| 欧美日韩另类国产亚洲欧美一级| 国产视频一区二区在线观看| 免费一级欧美片在线观看| 色综合久久99| 国产精品嫩草久久久久| 捆绑紧缚一区二区三区视频| 欧美伊人久久久久久久久影院| 中文字幕精品三区| 国产精品99久久久| 日韩欧美国产综合在线一区二区三区| 一区二区三区视频在线看| 成人aa视频在线观看| 国产亚洲欧美日韩俺去了| 免费在线视频一区| 欧美久久一区二区| 亚洲国产精品久久人人爱蜜臀| 97久久精品人人爽人人爽蜜臀| 久久精品综合网| 国产99精品国产| 国产亚洲一二三区| 国产伦精一区二区三区| 欧美v日韩v国产v| 蜜桃视频免费观看一区| 欧美日韩亚洲综合在线| 亚洲成人在线网站| 欧美日韩免费一区二区三区 | 欧美色精品天天在线观看视频| 国产精品成人在线观看| 成人午夜av在线| 中文字幕乱码久久午夜不卡| 成人免费毛片a| 国产精品激情偷乱一区二区∴| 国产黑丝在线一区二区三区| 国产亚洲精品资源在线26u| 国产永久精品大片wwwapp| 日韩美女主播在线视频一区二区三区| 蜜臀av性久久久久av蜜臀妖精| 日韩欧美国产一区在线观看| 韩国成人在线视频| 日本一二三不卡| 色噜噜狠狠色综合中国| 亚洲一区在线视频| 欧美人伦禁忌dvd放荡欲情| 日韩影院免费视频| 日韩欧美电影在线| 国产成人午夜高潮毛片| 亚洲人妖av一区二区| 欧洲精品一区二区| 青青草一区二区三区| 久久久99久久| 99精品视频在线观看免费| 亚洲影院免费观看| 欧美电视剧免费观看| 粉嫩aⅴ一区二区三区四区五区| 亚洲欧洲精品一区二区三区不卡 | 韩国欧美国产一区| 欧美极品aⅴ影院| 欧美三级电影网站| 国产精品一二三四区| 亚洲免费在线看| 日韩欧美另类在线| 色伊人久久综合中文字幕| 狂野欧美性猛交blacked| 中文字幕在线观看一区| 欧美久久婷婷综合色| 国产91丝袜在线播放0| 亚洲国产成人av好男人在线观看| 亚洲精品一区二区三区福利| 色综合久久久久网| 精品在线一区二区三区| 亚洲欧洲韩国日本视频| 日韩欧美另类在线| 在线精品视频一区二区三四| 国产精品影视天天线| 午夜精品视频在线观看| 亚洲国产电影在线观看| 欧美一区二区三区精品| 99精品视频在线观看| 国产一区二区久久| 日本成人中文字幕| 亚洲精品国产视频| 中文字幕va一区二区三区| 日韩欧美一级二级三级久久久| 99九九99九九九视频精品| 国产一区二区视频在线| 日韩和欧美的一区| 亚洲成人动漫一区| 亚洲激情六月丁香| 国产精品欧美极品| 国产欧美日韩三区| 久久天天做天天爱综合色| 欧美在线你懂的| 色婷婷综合久久久久中文一区二区 | 99麻豆久久久国产精品免费优播| 麻豆精品蜜桃视频网站| 视频在线观看一区二区三区| 国产精品久久久久一区二区三区| 2020国产精品| 久久久久免费观看| 久久精品男人的天堂| 久久久久久99久久久精品网站| 精品蜜桃在线看| 精品久久久久久久一区二区蜜臀| 日韩亚洲欧美综合| 日韩一区二区电影网| 3atv一区二区三区| 日韩区在线观看| 欧美电视剧在线看免费| 精品国产91久久久久久久妲己| 欧美不卡一区二区三区| 精品国产污网站| 国产欧美日本一区视频| 国产精品欧美综合在线| 亚洲欧美色一区| 亚洲不卡在线观看| 日本美女一区二区三区| 国产一区二区精品久久91| 国产精品99精品久久免费| 成人激情图片网| 91色九色蝌蚪| 欧美精选午夜久久久乱码6080| 欧美一区在线视频| 国产亚洲精久久久久久| 中文字幕一区二区视频| 亚洲国产精品久久人人爱蜜臀| 免费一区二区视频| www.亚洲国产| 欧美日韩精品二区第二页| 精品国产乱码久久久久久久久| 国产精品免费人成网站| 亚洲丶国产丶欧美一区二区三区| 麻豆国产精品官网| 成人精品视频一区| 欧美日韩在线电影| 欧美精品一区二区三区在线| 国产精品青草久久| 日韩国产精品久久久| 国产成人亚洲综合a∨猫咪| 日本精品一区二区三区高清| 91精品婷婷国产综合久久性色| 国产精品视频一二三区| 婷婷综合五月天| 成人精品视频一区| 日韩午夜激情视频| 一区二区在线看| 国产在线精品国自产拍免费| 欧美日韩免费一区二区三区视频| 欧美日韩一卡二卡| 欧美tk丨vk视频| 亚洲三级在线免费| 国产老肥熟一区二区三区| 欧美网站一区二区| 国产精品网友自拍| 奇米888四色在线精品| 一本色道久久综合亚洲91|