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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? qsql_sqlite.cpp

?? QT 開發(fā)環(huán)境里面一個很重要的文件
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the QtSql module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "qsql_sqlite.h"#include <qcoreapplication.h>#include <qvariant.h>#include <qsqlerror.h>#include <qsqlfield.h>#include <qsqlindex.h>#include <qsqlquery.h>#include <qstringlist.h>#include <qvector.h>#include <qdebug.h>#if defined Q_OS_WIN# include <qt_windows.h>#else# include <unistd.h>#endif#include <sqlite3.h>Q_DECLARE_METATYPE(sqlite3*)Q_DECLARE_METATYPE(sqlite3_stmt*)static QVariant::Type qGetColumnType(const QString &tpName){    const QString typeName = tpName.toLower();    if (typeName == QLatin1String("integer")        || typeName == QLatin1String("int"))        return QVariant::Int;    if (typeName == QLatin1String("double")        || typeName == QLatin1String("float")        || typeName.startsWith(QLatin1String("numeric")))        return QVariant::Double;    if (typeName == QLatin1String("blob"))        return QVariant::ByteArray;    return QVariant::String;}static QSqlError qMakeError(sqlite3 *access, const QString &descr, QSqlError::ErrorType type,                            int errorCode = -1){    return QSqlError(descr,                     QString::fromUtf16(static_cast<const ushort *>(sqlite3_errmsg16(access))),                     type, errorCode);}class QSQLiteDriverPrivate{public:    inline QSQLiteDriverPrivate() : access(0) {}    sqlite3 *access;};class QSQLiteResultPrivate{public:    QSQLiteResultPrivate(QSQLiteResult *res);    void cleanup();    bool fetchNext(QSqlCachedResult::ValueCache &values, int idx, bool initialFetch);    // initializes the recordInfo and the cache    void initColumns(bool emptyResultset);    void finalize();    QSQLiteResult* q;    sqlite3 *access;    sqlite3_stmt *stmt;    uint skippedStatus: 1; // the status of the fetchNext() that's skipped    uint skipRow: 1; // skip the next fetchNext()?    uint utf8: 1;    QSqlRecord rInf;};static const uint initial_cache_size = 128;QSQLiteResultPrivate::QSQLiteResultPrivate(QSQLiteResult* res) : q(res), access(0),    stmt(0), skippedStatus(false), skipRow(false), utf8(false){}void QSQLiteResultPrivate::cleanup(){    finalize();    rInf.clear();    skippedStatus = false;    skipRow = false;    q->setAt(QSql::BeforeFirstRow);    q->setActive(false);    q->cleanup();}void QSQLiteResultPrivate::finalize(){    if (!stmt)        return;    sqlite3_finalize(stmt);    stmt = 0;}void QSQLiteResultPrivate::initColumns(bool emptyResultset){    rInf.clear();    int nCols = sqlite3_column_count(stmt);    if (nCols <= 0)        return;    q->init(nCols);    for (int i = 0; i < nCols; ++i) {        QString colName = QString::fromUtf16(                    static_cast<const ushort *>(sqlite3_column_name16(stmt, i)));        // must use typeName for resolving the type to match QSqliteDriver::record        QString typeName = QString::fromUtf16(                    static_cast<const ushort *>(sqlite3_column_decltype16(stmt, i)));        int dotIdx = colName.lastIndexOf(QLatin1Char('.'));        QSqlField fld(colName.mid(dotIdx == -1 ? 0 : dotIdx + 1), qGetColumnType(typeName));        // sqlite3_column_type is documented to have undefined behavior if the result set is empty        int stp = emptyResultset ? -1 : sqlite3_column_type(stmt, i);        fld.setSqlType(stp);        rInf.append(fld);    }}bool QSQLiteResultPrivate::fetchNext(QSqlCachedResult::ValueCache &values, int idx, bool initialFetch){    int res;    int i;    if (skipRow) {        // already fetched        Q_ASSERT(!initialFetch);        skipRow = false;        return skippedStatus;    }    skipRow = initialFetch;    res = sqlite3_step(stmt);    switch(res) {    case SQLITE_ROW:        // check to see if should fill out columns        if (rInf.isEmpty())            // must be first call.            initColumns(false);        if (idx < 0 && !initialFetch)            return true;        for (i = 0; i < rInf.count(); ++i) {            switch (sqlite3_column_type(stmt, i)) {            case SQLITE_BLOB:                values[i + idx] = QByteArray(static_cast<const char *>(                            sqlite3_column_blob(stmt, i)),                            sqlite3_column_bytes(stmt, i));                break;            case SQLITE_INTEGER:                values[i + idx] = sqlite3_column_int64(stmt, i);                break;            case SQLITE_FLOAT:                values[i + idx] = sqlite3_column_double(stmt, i);                break;            case SQLITE_NULL:                values[i + idx] = QVariant(QVariant::String);                break;            default:                values[i + idx] = QString::fromUtf16(static_cast<const ushort *>(                            sqlite3_column_text16(stmt, i)),                            sqlite3_column_bytes16(stmt, i) / sizeof(ushort));                break;            }        }        return true;    case SQLITE_DONE:        if (rInf.isEmpty())            // must be first call.            initColumns(true);        q->setAt(QSql::AfterLastRow);        sqlite3_reset(stmt);        return false;    case SQLITE_ERROR:    case SQLITE_MISUSE:    case SQLITE_BUSY:    default:        // something wrong, don't get col info, but still return false        q->setLastError(qMakeError(access, QCoreApplication::translate("QSQLiteResult",                        "Unable to fetch row"), QSqlError::ConnectionError, res));        sqlite3_reset(stmt);        q->setAt(QSql::AfterLastRow);        return false;    }    return false;}QSQLiteResult::QSQLiteResult(const QSQLiteDriver* db)    : QSqlCachedResult(db){    d = new QSQLiteResultPrivate(this);    d->access = db->d->access;}QSQLiteResult::~QSQLiteResult(){    d->cleanup();    delete d;}bool QSQLiteResult::reset(const QString &query){    if (!prepare(query))        return false;    return exec();}bool QSQLiteResult::prepare(const QString &query){    if (!driver() || !driver()->isOpen() || driver()->isOpenError())        return false;    d->cleanup();    setSelect(false);    int res = sqlite3_prepare16(d->access, query.constData(), (query.size() + 1) * sizeof(QChar),                                &d->stmt, 0);    if (res != SQLITE_OK) {        setLastError(qMakeError(d->access, QCoreApplication::translate("QSQLiteResult",                     "Unable to execute statement"), QSqlError::StatementError, res));        d->finalize();        return false;    }    return true;}bool QSQLiteResult::exec(){    const QVector<QVariant> values = boundValues();    d->skippedStatus = false;    d->skipRow = false;    clearValues();    setLastError(QSqlError());    int res = sqlite3_reset(d->stmt);    if (res != SQLITE_OK) {        setLastError(qMakeError(d->access, QCoreApplication::translate("QSQLiteResult",                     "Unable to reset statement"), QSqlError::StatementError, res));        d->finalize();        return false;    }    int paramCount = sqlite3_bind_parameter_count(d->stmt);    if (paramCount == values.count()) {        for (int i = 0; i < paramCount; ++i) {            res = SQLITE_OK;            const QVariant value = values.at(i);            if (value.isNull()) {                res = sqlite3_bind_null(d->stmt, i + 1);            } else {                switch (value.type()) {                case QVariant::ByteArray: {                    const QByteArray *ba = static_cast<const QByteArray*>(value.constData());                    res = sqlite3_bind_blob(d->stmt, i + 1, ba->constData(),                                            ba->size(), SQLITE_STATIC);                    break; }                case QVariant::Int:                    res = sqlite3_bind_int(d->stmt, i + 1, value.toInt());                    break;                case QVariant::Double:                    res = sqlite3_bind_double(d->stmt, i + 1, value.toDouble());

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产传媒欧美日韩成人| 亚洲国产精品激情在线观看| 亚洲免费在线视频| 91啪九色porn原创视频在线观看| 久久蜜桃一区二区| 丝袜亚洲精品中文字幕一区| 在线欧美日韩精品| 一区二区三区毛片| 欧美日韩一级黄| 日韩精品一二三区| 69精品人人人人| 麻豆一区二区在线| 欧美日韩高清不卡| 日韩在线卡一卡二| xnxx国产精品| 日韩不卡一区二区三区| 欧美视频中文字幕| 亚洲专区一二三| 欧美精选午夜久久久乱码6080| 亚洲国产美女搞黄色| 欧美日韩国产成人在线91| 天天综合日日夜夜精品| 欧美一区二区久久久| 久久99蜜桃精品| 国产亚洲一本大道中文在线| 国产在线乱码一区二区三区| 国产精品视频九色porn| 91网站视频在线观看| 亚洲一区二区在线观看视频| 91精品在线免费观看| 蜜臀久久99精品久久久画质超高清 | 夜夜嗨av一区二区三区| 欧美老年两性高潮| 国产精品18久久久久久久久| 中文文精品字幕一区二区| 成人黄色软件下载| 亚洲成av人片观看| 26uuu色噜噜精品一区二区| 成人精品免费看| 亚洲第一主播视频| 国产日韩v精品一区二区| 91啦中文在线观看| 麻豆国产欧美一区二区三区| 国产精品三级视频| 欧美日韩中文字幕精品| 免费成人美女在线观看.| 国产精品亲子伦对白| 欧美丰满少妇xxxxx高潮对白| 国产精品12区| 亚洲国产wwwccc36天堂| 精品久久久久久久久久久久包黑料 | 国产91色综合久久免费分享| 香蕉加勒比综合久久| 国产精品久久久久久户外露出| 91精品久久久久久久99蜜桃| 一本到不卡免费一区二区| 国产成人av一区二区三区在线| 美国十次综合导航| 三级欧美在线一区| 亚洲一区二区视频在线观看| www久久精品| 在线电影欧美成精品| 99国产欧美另类久久久精品| 久久69国产一区二区蜜臀| 亚洲午夜精品网| 国产精品久久久久久久久图文区 | 亚洲va欧美va天堂v国产综合| 国产视频一区二区在线| 欧美揉bbbbb揉bbbbb| 国产成人久久精品77777最新版本| 亚洲黄色片在线观看| 中文字幕第一区二区| 精品免费视频.| 欧美性大战xxxxx久久久| 成人av免费在线观看| 国产在线国偷精品产拍免费yy | 色综合激情五月| 成人永久免费视频| 久久69国产一区二区蜜臀| 香蕉成人伊视频在线观看| 中文字幕欧美一| 中文字幕欧美激情| 精品久久久久一区二区国产| 91精品欧美一区二区三区综合在| 欧美亚洲自拍偷拍| 欧洲日韩一区二区三区| 国产精品资源站在线| 久久精品国产成人一区二区三区| 图片区小说区区亚洲影院| 一区二区国产盗摄色噜噜| 国产精品久久久久久久久免费樱桃| 精品人伦一区二区色婷婷| 成熟亚洲日本毛茸茸凸凹| 国产一区二区精品久久| 国产一区二区三区香蕉| 国产九色精品成人porny| 国内精品免费**视频| 国产一区二区伦理| 亚洲午夜精品在线| 日韩国产一二三区| 久久99精品久久只有精品| 久久av中文字幕片| 国产成人av电影在线| 成人亚洲一区二区一| av资源站一区| 欧美日韩中文精品| 欧美精品1区2区| 精品久久一区二区三区| 久久综合狠狠综合久久综合88| 久久久久久久久蜜桃| 国产欧美一区二区精品秋霞影院 | 懂色一区二区三区免费观看| 国产成人亚洲综合a∨婷婷图片| 国产一区 二区| 99久久综合精品| 欧美在线一二三四区| 欧美精品乱码久久久久久按摩| 欧美色图一区二区三区| 91精品久久久久久久99蜜桃| 久久美女艺术照精彩视频福利播放| 久久精品男人的天堂| 中文字幕亚洲欧美在线不卡| 亚洲欧洲av在线| 五月天激情综合网| 久久精品国产**网站演员| 日本91福利区| 波多野结衣中文一区| 欧美日韩国产一二三| 精品美女在线播放| 成人欧美一区二区三区小说| 亚洲成人第一页| 国产一区二区三区在线看麻豆| 91在线观看美女| 91精品国产丝袜白色高跟鞋| 久久久久久免费毛片精品| 亚洲色图第一区| 免费成人你懂的| 91视视频在线观看入口直接观看www | 久久久精品影视| 国产性天天综合网| 一区二区三区在线免费| 久久精品国产亚洲一区二区三区| jlzzjlzz亚洲女人18| 91精品国产91久久综合桃花| 国产片一区二区| 视频在线在亚洲| 99精品一区二区| 国产亚洲精品免费| 日韩精品视频网站| 91久久国产综合久久| 精品国产乱码91久久久久久网站| 亚洲人成网站色在线观看| 久久成人免费网| 欧美日韩国产综合草草| 中文字幕av资源一区| 麻豆91免费看| 精品久久久久久久一区二区蜜臀| 日韩av成人高清| 欧美一区二区三区在线电影 | 亚洲日本电影在线| 成人免费视频一区二区| 久久精品亚洲麻豆av一区二区 | 丰满岳乱妇一区二区三区| 久久婷婷成人综合色| 久久精品72免费观看| 91精品国产一区二区三区香蕉| 爽好久久久欧美精品| 欧美日韩精品一区二区三区四区 | 精品88久久久久88久久久| 欧美aaa在线| 精品久久久影院| 国产在线播放一区| 欧美国产精品v| 91免费视频网址| 香港成人在线视频| 欧美一区日本一区韩国一区| 全国精品久久少妇| 精品粉嫩aⅴ一区二区三区四区| 精品亚洲成a人在线观看| 久久久精品黄色| 欧美日本精品一区二区三区| 欧美aaaaaa午夜精品| 久久综合999| 成人高清免费观看| 一区二区在线免费观看| 欧美肥妇free| 国产高清不卡二三区| 最新不卡av在线| 欧美三级日韩三级| 精品一区二区三区在线观看 | 日韩欧美一级在线播放| 激情综合色播激情啊| 欧美精彩视频一区二区三区| 91浏览器入口在线观看| 亚洲小说春色综合另类电影| 欧美一区二区视频在线观看2022| 国产资源精品在线观看| 亚洲女子a中天字幕| 91精品综合久久久久久| 成人在线一区二区三区|