使用-Oracle连接测试
-
引入
必要目录:include,inl,lib
必要文件:QxOrm.pri,此文件中包含必要必要的定义,export.h,precompiled.h,这两文件可以直接使用test目录中demo的文件
引用目录结构如下:
-
配置
项目pro文件引入QxOrm.pri文件
include(./QxOrm/QxOrm.pri)
为便于QxOrm项目使用,将QxOrm相关的项目配置直接补充到QxOrm.pri中,如图
#补充内容
INCLUDEPATH += $$PWD\
$$PWD/include\
$$PWD/inl\
$$PWD/lib\
HEADERS += \
$$PWD/export.h \
$$PWD/precompiled.h \
win32: LIBS += -L$$PWD/lib/ -lQxOrm
DEPENDPATH += $$PWD/lib
- 新建表结构类
#ifndef USER_H
#define USER_H
#include "precompiled.h"
#include <QString>
#define QXORM_TABLENAME_USER "USER"
class QX_DLL_EXPORT_HELPER User
{
public:
User();
public:
long long id;//编号,主键
QString strName;//姓名
QString strPerCode;//工号
/*固定SQL语句*/
public:
static QString strSQLQueryAll;
static QString strSQLQueryMaxNBBH;
};
typedef QSharedPointer<User> UserPtr;
typedef qx::QxCollection<int, UserPtr> List_user;
QX_REGISTER_PRIMARY_KEY(User, long long) //否则默认是long,精度可能不够
QX_REGISTER_HPP_APP(User, qx::trait::no_base_class_defined, 1)
#endif // USER_H
#include "user.h"
#include <QxOrm_Impl.h>
QX_REGISTER_CPP_APP(User)
namespace qx{
template<> void register_class(QxClass<User> & t)
{
qx::IxDataMember * pPk = t.id(&User::id, "NBBH");
pPk->setAutoIncrement(false);//Oracle 不支持字段自增,需取消
t.data(&User::strName, "NAME");
t.data(&User::strPerCode, "PERCODE");
t.setName(QXORM_TABLENAME_USER);
}
}
QString User::strSQLQueryAll = QString("select * from ") + QXORM_TABLENAME_USER;
QString User::strSQLQueryMaxNBBH = QString("select MAX(NBBH) as MAXID from ") + QXORM_TABLENAME_USER;
User::User()
{
}
- 调用
#include "mainwindow.h"
#include <QApplication>
#include "precompiled.h"
#include "user.h"
#include <QxOrm_Impl.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 初始化参数,用于和数据库交互
qx::QxSqlDatabase::getSingleton()->setDriverName("QOCI");
qx::QxSqlDatabase::getSingleton()->setDatabaseName("*****");//Oracle服务名SID
qx::QxSqlDatabase::getSingleton()->setHostName("127.0.0.1");
qx::QxSqlDatabase::getSingleton()->setUserName("admin");
qx::QxSqlDatabase::getSingleton()->setPassword("password");
QSqlError daoError;
/* 在数据库中创建表*/
/*
daoError = qx::dao::create_table<User>();//若User未指定表名,则会将类名做表名
*/
/*查询操作*/
//通过SQL进行检索,映射到 typedef qx::QxCollection<int, User_ptr> List_user;中
List_user list_user;
qx_query query(User::strSQLQueryAll);
daoError = qx::dao::execute_query(query, list_user);
List_user::iterator it = list_user.begin();
qDebug() << "------------------分隔,在这给我分割------------------";
while(it != list_user.end()){
qDebug() << "id:" << it.i->t().second->id;
qDebug() << "name:" << it.i->t().second->strName;
qDebug() << "percode:" << it.i->t().second->strPerCode;
it++;
}
qDebug() << "------------------分隔,在这给我分割------------------";
/*
int nbbh = 1000;
UserPtr u1;
u1.reset(new User());
u1->id = nbbh++;
u1->strName = "zhao1";
u1->strPerCode = "9001";
UserPtr u2;
u2.reset(new User());
u2->id = nbbh++;
u2->strName = "zhao2";
u2->strPerCode = "9002";
UserPtr u3;
u3.reset(new User());
u3->id = nbbh++;
u3->strName = "zhao3";
u3->strPerCode = "9003";
// 将所有用户插入容器中
// 可以使用 std、boost、Qt 和 qx::QxCollection<Key,Value> 中的许多容器
typedef QVector<UserPtr> VectorUser;
VectorUser users;
users.push_back(u1);
users.push_back(u2);
users.push_back(u3);
// 将容器中的所有用户插入到数据库中
daoError = qx::dao::insert(users);
*/
MainWindow w;
w.show();
return a.exec();
}