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

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

?? qsql_mysql.cpp

?? QT 開發(fā)環(huán)境里面一個(gè)很重要的文件
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/******************************************************************************** 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_mysql.h"#include <qcoreapplication.h>#include <qvariant.h>#include <qdatetime.h>#include <qsqlerror.h>#include <qsqlfield.h>#include <qsqlindex.h>#include <qsqlquery.h>#include <qsqlrecord.h>#include <qstringlist.h>#include <qtextcodec.h>#include <qvector.h>#include <qdebug.h>#ifdef Q_OS_WIN32// comment the next line out if you want to use MySQL/embedded on Win32 systems.// note that it will crash if you don't statically link to the mysql/e library!# define Q_NO_MYSQL_EMBEDDED#endifQ_DECLARE_METATYPE(MYSQL_RES*)Q_DECLARE_METATYPE(MYSQL*)#if MYSQL_VERSION_ID >= 40108Q_DECLARE_METATYPE(MYSQL_STMT*)#endif#if MYSQL_VERSION_ID >= 40100#  define Q_CLIENT_MULTI_STATEMENTS CLIENT_MULTI_STATEMENTS#else#  define Q_CLIENT_MULTI_STATEMENTS 0#endifclass QMYSQLDriverPrivate{public:    QMYSQLDriverPrivate() : mysql(0), tc(0), preparedQuerys(false), preparedQuerysEnabled(false) {}    MYSQL *mysql;    QTextCodec *tc;    bool preparedQuerys;    bool preparedQuerysEnabled;};static inline QString toUnicode(QTextCodec *tc, const char *str){#ifdef QT_NO_TEXTCODEC    Q_UNUSED(tc);    return QString::fromLatin1(str);#else    return tc->toUnicode(str);#endif}static inline QString toUnicode(QTextCodec *tc, const char *str, int length){#ifdef QT_NO_TEXTCODEC    Q_UNUSED(tc);    return QString::fromLatin1(str, length);#else    return tc->toUnicode(str, length);#endif}static inline QByteArray fromUnicode(QTextCodec *tc, const QString &str){#ifdef QT_NO_TEXTCODEC    Q_UNUSED(tc);    return str.toLatin1();#else    return tc->fromUnicode(str);#endif}static inline QVariant qDateFromString(const QString &val){#ifdef QT_NO_DATESTRING    Q_UNUSED(val);    return QVariant(val);#else    if (val.isEmpty())        return QVariant(QDate());    return QVariant(QDate::fromString(val, Qt::ISODate));#endif}static inline QVariant qTimeFromString(const QString &val){#ifdef QT_NO_DATESTRING    Q_UNUSED(val);    return QVariant(val);#else    if (val.isEmpty())        return QVariant(QTime());    return QVariant(QTime::fromString(val, Qt::ISODate));#endif}static inline QVariant qDateTimeFromString(QString &val){#ifdef QT_NO_DATESTRING    Q_UNUSED(val);    return QVariant(val);#else    if (val.isEmpty())        return QVariant(QDateTime());    if (val.length() == 14)        // TIMESTAMPS have the format yyyyMMddhhmmss        val.insert(4, QLatin1Char('-')).insert(7, QLatin1Char('-')).insert(10,                    QLatin1Char('T')).insert(13, QLatin1Char(':')).insert(16, QLatin1Char(':'));    return QVariant(QDateTime::fromString(val, Qt::ISODate));#endif}class QMYSQLResultPrivate : public QMYSQLDriverPrivate{public:    QMYSQLResultPrivate() : QMYSQLDriverPrivate(), result(0),#ifndef QT_NO_TEXTCODEC        tc(QTextCodec::codecForLocale()),#else        tc(0),#endif        rowsAffected(0), hasBlobs(false)#if MYSQL_VERSION_ID >= 40108        , stmt(0), meta(0), inBinds(0), outBinds(0)#endif        {}    MYSQL_RES *result;    MYSQL_ROW row;    QTextCodec *tc;    int rowsAffected;    bool bindInValues();    void bindBlobs();    bool hasBlobs;    struct QMyField    {        QMyField()            : outField(0), nullIndicator(false), bufLength(0ul),              myField(0), type(QVariant::Invalid)        {}        char *outField;        my_bool nullIndicator;        ulong bufLength;        MYSQL_FIELD *myField;        QVariant::Type type;    };    QVector<QMyField> fields;#if MYSQL_VERSION_ID >= 40108    MYSQL_STMT* stmt;    MYSQL_RES* meta;    MYSQL_BIND *inBinds;    MYSQL_BIND *outBinds;#endif};#ifndef QT_NO_TEXTCODECstatic QTextCodec* codec(MYSQL* mysql){#if MYSQL_VERSION_ID >= 32321    QTextCodec* heuristicCodec = QTextCodec::codecForName(mysql_character_set_name(mysql));    if (heuristicCodec)        return heuristicCodec;#endif    return QTextCodec::codecForLocale();}#endif // QT_NO_TEXTCODECstatic QSqlError qMakeError(const QString& err, QSqlError::ErrorType type,                            const QMYSQLDriverPrivate* p){    const char *cerr = mysql_error(p->mysql);    return QSqlError(QLatin1String("QMYSQL: ") + err,                     p->tc ? toUnicode(p->tc, cerr) : QString::fromLatin1(cerr),                     type, mysql_errno(p->mysql));}static QVariant::Type qDecodeMYSQLType(int mysqltype, uint flags){    QVariant::Type type;    switch (mysqltype) {    case FIELD_TYPE_TINY :    case FIELD_TYPE_SHORT :    case FIELD_TYPE_LONG :    case FIELD_TYPE_INT24 :        type = (flags & UNSIGNED_FLAG) ? QVariant::UInt : QVariant::Int;        break;    case FIELD_TYPE_YEAR :        type = QVariant::Int;        break;    case FIELD_TYPE_LONGLONG :        type = (flags & UNSIGNED_FLAG) ? QVariant::ULongLong : QVariant::LongLong;        break;    case FIELD_TYPE_FLOAT :    case FIELD_TYPE_DOUBLE :        type = QVariant::Double;        break;    case FIELD_TYPE_DATE :        type = QVariant::Date;        break;    case FIELD_TYPE_TIME :        type = QVariant::Time;        break;    case FIELD_TYPE_DATETIME :    case FIELD_TYPE_TIMESTAMP :        type = QVariant::DateTime;        break;    case FIELD_TYPE_BLOB :    case FIELD_TYPE_TINY_BLOB :    case FIELD_TYPE_MEDIUM_BLOB :    case FIELD_TYPE_LONG_BLOB :        type = (flags & BINARY_FLAG) ? QVariant::ByteArray : QVariant::String;        break;    default:    case FIELD_TYPE_ENUM :    case FIELD_TYPE_SET :    case FIELD_TYPE_STRING :    case FIELD_TYPE_VAR_STRING :    case FIELD_TYPE_DECIMAL :        type = QVariant::String;        break;    }    return type;}static QSqlField qToField(MYSQL_FIELD *field, QTextCodec *tc){    QSqlField f(toUnicode(tc, field->name),                qDecodeMYSQLType(int(field->type), field->flags));    f.setRequired(IS_NOT_NULL(field->flags));    f.setLength(field->length);    f.setPrecision(field->decimals);    f.setSqlType(field->type);    return f;}#if MYSQL_VERSION_ID >= 40108static QSqlError qMakeStmtError(const QString& err, QSqlError::ErrorType type,                            MYSQL_STMT* stmt){    const char *cerr = mysql_stmt_error(stmt);    return QSqlError(QLatin1String("QMYSQL3: ") + err,                     QString::fromLatin1(cerr),                     type, mysql_stmt_errno(stmt));}static bool qIsBlob(int t){    return t == MYSQL_TYPE_TINY_BLOB           || t == MYSQL_TYPE_BLOB           || t == MYSQL_TYPE_MEDIUM_BLOB           || t == MYSQL_TYPE_LONG_BLOB;}void QMYSQLResultPrivate::bindBlobs(){    int i;    MYSQL_FIELD *fieldInfo;    MYSQL_BIND  *bind;//    Q_ASSERT(meta);    for(i = 0; i < fields.count(); ++i) {        fieldInfo = fields.at(i).myField;        if (qIsBlob(inBinds[i].buffer_type) && meta && fieldInfo) {            bind = &inBinds[i];            bind->buffer_length = fieldInfo->max_length;            delete[] static_cast<char*>(bind->buffer);            bind->buffer = new char[fieldInfo->max_length];            fields[i].outField = static_cast<char*>(bind->buffer);            bind->buffer_type = MYSQL_TYPE_STRING;        }    }}bool QMYSQLResultPrivate::bindInValues(){    MYSQL_BIND *bind;    char *field;    int i = 0;    if (!meta)        meta = mysql_stmt_result_metadata(stmt);    if (!meta)        return false;    fields.resize(mysql_num_fields(meta));    inBinds = new MYSQL_BIND[fields.size()];    memset(inBinds, 0, fields.size() * sizeof(MYSQL_BIND));    MYSQL_FIELD *fieldInfo;    while((fieldInfo = mysql_fetch_field(meta))) {        QMyField &f = fields[i];        f.myField = fieldInfo;        f.type = qDecodeMYSQLType(fieldInfo->type, fieldInfo->flags);        if (qIsBlob(fieldInfo->type)) {            // the size of a blob-field is available as soon as we call            // mysql_stmt_store_result()            // after mysql_stmt_exec() in QMYSQLResult::exec()            fieldInfo->length = 0;            hasBlobs = true;        } else {            fieldInfo->type = MYSQL_TYPE_STRING;        }        bind = &inBinds[i];        field = new char[fieldInfo->length + 1];        memset(field, 0, fieldInfo->length + 1);        bind->buffer_type = fieldInfo->type;        bind->buffer = field;        bind->buffer_length = f.bufLength = fieldInfo->length + 1;        bind->is_null = &f.nullIndicator;        bind->length = &f.bufLength;        f.outField=field;        ++i;    }    return true;}#endifQMYSQLResult::QMYSQLResult(const QMYSQLDriver* db): QSqlResult(db){    d = new QMYSQLResultPrivate();    d->mysql = db->d->mysql;    d->tc = db->d->tc;    d->preparedQuerysEnabled = db->d->preparedQuerysEnabled;}QMYSQLResult::~QMYSQLResult(){    cleanup();    delete d;}QVariant QMYSQLResult::handle() const{#if MYSQL_VERSION_ID >= 40108    return d->meta ? qVariantFromValue(d->meta) : qVariantFromValue(d->stmt);#else    return qVariantFromValue(d->result);#endif}void QMYSQLResult::cleanup(){    if (d->result)        mysql_free_result(d->result);#if MYSQL_VERSION_ID >= 40108    if (d->stmt) {        if (mysql_stmt_close(d->stmt))            qWarning("QMYSQLResult::cleanup: unable to free statement handle");        d->stmt = 0;    }    if (d->meta) {        mysql_free_result(d->meta);        d->meta = 0;    }    int i;    for (i = 0; i < d->fields.count(); ++i)        delete[] d->fields[i].outField;    if (d->outBinds) {        delete[] d->outBinds;        d->outBinds = 0;    }    if (d->inBinds) {        delete[] d->inBinds;        d->inBinds = 0;    }//    for(i = 0; i < d->outFields.size(); ++i)//        delete[] d->outFields.at(i);#endif    d->hasBlobs = false;    d->fields.clear();    d->result = NULL;    d->row = NULL;    setAt(-1);    setActive(false);    d->preparedQuerys = d->preparedQuerysEnabled;}bool QMYSQLResult::fetch(int i){

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品aⅴ在线视频| 国产激情偷乱视频一区二区三区| 色综合激情久久| 18成人在线观看| 91一区在线观看| 亚洲一区在线视频| 欧美久久婷婷综合色| 久久激五月天综合精品| 国产欧美一区二区精品仙草咪 | 国产视频亚洲色图| 国产大陆a不卡| 中文字幕日韩欧美一区二区三区| 欧美影片第一页| 久久er99精品| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 91色|porny| 日本在线不卡视频| 国产精品色噜噜| 欧美日韩黄视频| 国产成人免费视频| 亚洲欧美国产77777| 制服丝袜亚洲播放| 成人高清免费观看| 无码av免费一区二区三区试看| 日韩免费在线观看| 91网站视频在线观看| 日韩电影一区二区三区| 国产精品免费免费| 欧美一二三区在线| 色老综合老女人久久久| 九九久久精品视频| 亚洲中国最大av网站| 久久久不卡网国产精品二区| 欧美午夜精品一区| 粉嫩绯色av一区二区在线观看| 五月婷婷综合激情| 国产精品久久久久久妇女6080 | 7777精品伊人久久久大香线蕉经典版下载 | 中文字幕一区二区三区在线不卡 | 精品国产一区a| 欧美性感一区二区三区| 国产精品一区二区在线观看网站 | 国产精品久久国产精麻豆99网站| 欧美丝袜丝nylons| 成人av电影免费在线播放| 日本在线不卡视频一二三区| 亚洲天天做日日做天天谢日日欢| 日韩女优电影在线观看| 在线观看日韩电影| 成人午夜大片免费观看| 蜜桃av噜噜一区| 亚洲一二三四在线观看| 中文一区二区在线观看| 日韩精品在线一区| 91精品国产综合久久婷婷香蕉 | 久久亚洲捆绑美女| 欧美精品亚洲一区二区在线播放| 91在线丨porny丨国产| 国产精品一区二区视频| 捆绑紧缚一区二区三区视频| 亚洲成av人综合在线观看| 亚洲免费在线观看| 日韩理论片在线| 国产精品理伦片| 欧美国产欧美综合| 久久综合久久久久88| 欧美sm极限捆绑bd| 日韩精品一区二区三区视频在线观看 | 日本一区二区三区视频视频| 欧美精品一区二区三区四区| 日韩欧美中文字幕制服| 欧美日本国产一区| 制服丝袜亚洲播放| 欧美一区二区三区在线电影| 欧美日韩国产高清一区二区| 欧美四级电影网| 在线综合视频播放| 欧美一区二区在线视频| 91精品国产高清一区二区三区蜜臀 | 亚洲免费在线电影| 亚洲乱码日产精品bd| 亚洲欧美韩国综合色| 亚洲一区二区黄色| 香蕉久久夜色精品国产使用方法| 一区二区欧美国产| 午夜激情久久久| 美国毛片一区二区三区| 国产毛片精品国产一区二区三区| 国产福利精品导航| 97成人超碰视| 欧美日韩视频一区二区| 7777女厕盗摄久久久| 久久久午夜精品理论片中文字幕| 国产午夜精品一区二区三区视频| 亚洲国产成人一区二区三区| 亚洲色图在线播放| 日韩中文字幕av电影| 精品无人码麻豆乱码1区2区 | 蜜桃久久久久久| 国产成人免费视| 91国偷自产一区二区开放时间 | 国产成人亚洲精品狼色在线 | 国产二区国产一区在线观看| av一本久道久久综合久久鬼色| 在线看日韩精品电影| 日韩精品在线一区| 国产精品初高中害羞小美女文| 亚洲综合在线视频| 美洲天堂一区二卡三卡四卡视频| 国产精品白丝av| 欧美综合一区二区| 国产精品全国免费观看高清 | 亚洲一本大道在线| 国产一区二区导航在线播放| 色老汉av一区二区三区| 91麻豆精品91久久久久同性| 中文字幕精品综合| 午夜精品福利久久久| 国产资源在线一区| 色噜噜夜夜夜综合网| 精品sm在线观看| 亚洲综合色成人| 国产老妇另类xxxxx| 欧美色区777第一页| 久久久国产午夜精品| 婷婷久久综合九色综合伊人色| 国产揄拍国内精品对白| 欧美性生交片4| 欧美韩日一区二区三区四区| 日韩中文字幕区一区有砖一区 | 看片的网站亚洲| 色综合夜色一区| 欧美激情中文字幕| 午夜私人影院久久久久| 成人av手机在线观看| 精品日本一线二线三线不卡| 亚洲综合在线免费观看| 成人免费视频视频| 欧美不卡视频一区| 亚洲一区二区三区四区在线 | 久久久精品日韩欧美| 日韩二区三区四区| 日本乱码高清不卡字幕| 欧美激情在线一区二区| 日韩高清不卡一区| 欧美在线观看视频一区二区三区| 欧美激情一区二区三区四区| 蜜桃免费网站一区二区三区| 欧美日韩中字一区| 亚洲精品日韩专区silk| 粉嫩蜜臀av国产精品网站| 久久久噜噜噜久噜久久综合| 蜜臀久久久99精品久久久久久| 欧洲国产伦久久久久久久| 亚洲天堂成人在线观看| 懂色av一区二区三区蜜臀| 精品裸体舞一区二区三区| 男女视频一区二区| 欧美浪妇xxxx高跟鞋交| 亚洲自拍偷拍图区| 色狠狠色狠狠综合| 亚洲精品高清视频在线观看| 91热门视频在线观看| 国产精品成人网| av欧美精品.com| 亚洲欧洲韩国日本视频| 不卡av电影在线播放| 国产精品人成在线观看免费| 成人永久aaa| 中文字幕制服丝袜成人av| av亚洲产国偷v产偷v自拍| 亚洲色图一区二区| 一本色道久久综合亚洲精品按摩| 国产精品欧美经典| 色诱视频网站一区| 亚洲二区在线视频| 欧美日韩国产高清一区| 美女脱光内衣内裤视频久久网站| 欧美疯狂做受xxxx富婆| 奇米影视一区二区三区| 日韩欧美色综合| 国产精品18久久久久久久久| 欧美激情一区二区| 一本久久a久久免费精品不卡| 一区二区视频免费在线观看| 欧美三级欧美一级| 免费国产亚洲视频| 久久久精品国产99久久精品芒果| 成人高清免费在线播放| 一区二区三区在线观看网站| 欧美日韩五月天| 久久超碰97中文字幕| 中文字幕欧美日本乱码一线二线| 波多野结衣视频一区| 亚洲黄色性网站| 欧美岛国在线观看| av色综合久久天堂av综合| 日本在线不卡视频| 欧美激情在线一区二区三区| 在线国产亚洲欧美|