IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 金仓数据库KingbaseES qodbc编译使用指南 -> 正文阅读

[大数据]金仓数据库KingbaseES qodbc编译使用指南

一、linux编译Qt4?odbc驱动

1)编译qodbc

./configure --prefix=`pwd`/release -no-phonon -no-phonon-backend -no-opengl -no-gtkstyle -no-xinput -no-xkb -no-webkit -no-multimedia -no-script -no-scripttools -no-javascript-jit -no-declarative -no-qt3support -no-audio-backend -no-svg -nomake demos -nomake docs -nomake examples -fast?-qt-sql-odbc -plugin-sql-odbc -I/home/xing/xjjia_odbc/unixODBC-2.3.7/release/include -L/home/xing/xjjia_odbc/unixODBC-2.3.7/release/lib

备注:

-I/home/xing/xjjia_odbc/unixODBC-2.3.7/release/include?该参数为unixodbc的头文件所在路径

-L/home/xing/xjjia_odbc/unixODBC-2.3.7/release/lib?该参数为unixodbc的库文件所在路径

2)编译之后,在/release/plugins/sqldrivers下,可见libqsqlodbc.so即可为qodbc驱动

二、linux下使用QODBC

1、配置odbc连接

1)安装unixodbc,使用 odbcinst –j 查看读取的配置文件所在的路径

2) 修改odbcinst.ini,配置驱动所在路径,如下图

3)在odbc.ini中,配置连接数据库信息

2、下面是一个测试程序用例

#include <QCoreApplication>
#include <iostream>
#include <QtDebug>
#include <QByteArray>
#include <QDate>
#include <QFile>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QStringList>

const QString host = "10.10.11.152";
const int port = 54332;
const QString dbName = "kdbodbc_test_dsn";
const QString user = "xjjia";
const QString password = "123456";

static int failed = 0;
static int cases = 0;

void check(bool b, const char *f)
{
    if (!b) {
        failed++;
    }
    cases++;
    std::cout << "test " << f << (b ? " success!" : " failed!") << std::endl;
    std::cout << "---------------------------------" << std::endl;
}

bool testConnect(QSqlDatabase &db)
{
    db = QSqlDatabase::addDatabase("QODBC");
    db.setHostName(host);
    db.setDatabaseName(dbName);
    db.setUserName(user);
    db.setPassword(password);
    db.setPort(port);
    db.setConnectOptions("connect_timeout=2");

    db.open();

    if (!db.isOpen()) {
        qDebug() << db.lastError();
        return false;
    }

    QSqlQuery q(db);
    q.exec("select * from pg_type");
    while (q.next()) {
        qDebug() << q.value(0).toInt();
    }

    q.exec("select version()");
    while (q.next()) {
        qDebug() << q.value(0).toString();
    }
    return true;
}

bool testCreate(QSqlDatabase &db)
{
    QSqlQuery q(db);
    bool ret;

    ret = q.exec("create temp table Q_test_v8r6(id int, val text)");
    if (!ret) {
        qDebug() << q.lastError();
        return false;
    }

    ret = q.exec("insert into Q_test_v8r6(id, val) values(100, '中文测试')");
    if (!ret) {
        qDebug() << q.lastError();
        return false;
    }

    return true;
}

bool testPrepare(QSqlDatabase &db)
{
    QSqlQuery q(db);
    bool ret;

    ret = q.prepare("insert into Q_test_v8r6(id) values(?)");
    if (!ret)
    {
        qDebug()<<q.lastError();
        return false;
    }

    q.bindValue(0, 200);
    ret = q.exec();
    if (!ret)
    {
        qDebug()<<q.lastError();
        return false;
    }

    return true;
}

bool testBatch(QSqlDatabase &db)
{
    QSqlQuery q(db);
    QVariantList ints;
    bool ret;

    ints << 500 << 2 << 3 << 400 << 20000 << -100;
    q.addBindValue(ints);

    ret = q.execBatch();
    if (!ret)
    {
        qDebug()<<q.lastError();
        return false;
    }

    return true;
}

bool testLob(QSqlDatabase &db)
{
    QSqlQuery q(db);
    bool ret;

    ret = q.exec("create temp table Q_test_lob(id int, b blob, c clob)");
    if (!ret)
    {
        qDebug()<<q.lastError();
        return false;
    }

    ret = q.prepare("insert into Q_test_lob(id,b,c) values(?,?,?)");
    if (!ret)
    {
        qDebug()<<q.lastError();
        return false;
    }

    QByteArray ba("中文测试数据ABCDEF12345!@#$%");
    QString str("中文测试数据ABCDEF12345!@#$%");

    qDebug() << "byte data:" << ba;

    for (int i = 0; i < 3; i++) {
        q.bindValue(0, i);
        q.bindValue(1, ba);
        q.bindValue(2, str);
        q.exec();
    }

    ret = q.exec("select * from Q_test_lob");
    if (!ret)
    {
        qDebug()<<q.lastError();
        return false;
    }

    while (q.next()) {
        qDebug() << q.value(0).toInt();
        qDebug() << q.value(1).toByteArray();
        qDebug() << q.value(2).toString();
    }
    return true;
}


bool testQuery(QSqlDatabase &db)
{
    QSqlQuery q(db);
    q.exec("select * from Q_test_v8r6");

    while (q.next()) {
        qDebug() << q.value(0).toInt();
        qDebug() << q.value(1).toString();
    }

    q.exec("select version()");
    while (q.next()) {
        qDebug() << q.value(0).toString();
    }

    return true;
}

int main()
{
    QCoreApplication::addLibraryPath("./");

    qDebug() << "The driver should be put in this path:" << QCoreApplication::libraryPaths();

    qDebug() << "Available drivers:" << QSqlDatabase::drivers() << "\n\n";

    QSqlDatabase db;

    check(testConnect(db), "testConnect");

    check(testCreate(db), "testCreate");

    check(testPrepare(db), "testPrepare");

    check(testQuery(db), "testQuery");

    check(testLob(db), "testLob");

    std::cout << "\nAll test cases hava been done!" << std::endl;
    std::cout << "All cases:" << cases << ", failed cases:" << failed << std::endl;

    return 0;
}

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:27:35  更:2022-03-16 22:30:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:59:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码