如何用Qt连接数据库并导入文件?

如何用Qt连接数据库并导入文件?,第1张

可以使用QT自带的数据库完成 *** 作,以下是参考代码:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE")   //添加数据库

db.setDatabaseName("note.db")    //创建一个note.db的文件存储数据

db.open()  //开启数据库

query = QSqlQuery(db) //获得访问数据库的query

query.exec(XXX)  //执行指令(XXX为SQL指令)

db.close()  //关闭数据库

一般而言会将db变量作为全局变量或者数据成员,当需要访问的时候就获取一个query就可以了。

要实现所提到的功能,要好好看看QString、QStringList,这两玩意主要是临时存放数据、分割数据等作用,另外,要看QFile、QDir、QFileInfo、QTextStream,这四个主要用来读取文本数据。看看QVector或者QList等来存放读出来的数据。

另外,要实现这玩意,SQL的语句不要求精通,但是基本的Create、Insert、Select、Delete等 *** 作要准确无误。否则出错了QT是看不出来的。QT不会检测SQL的准确性的。

QT SQL 变量值 条件查询 插入数据

(本文只是总结网络上的教程)

在 *** 作数据库时

SQL语句中难免会用到变量

比如

在条件值已知的情况下

INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)SELECT * FROM Persons WHERE FirstName='Bush'

在条件值是变量的情况下

INSERT INTO table_name (列1, 列2,...) VALUES (变量1, 变量2,....)SELECT * FROM Persons WHERE FirstName='变量'

或者SELECT * FROM Persons WHERE 变量='变量'

方法据我所知有两种

1:用query的绑定特性来做

2:利用字符串特性,来组合SQL字符串(+,&,arg())详情可参考qstring,string用法(提示:qstring在执行sql语句时相当有用,当深入研究之http://developer.qt.nokia.com/doc/qt-4.8/qstring.htmlhttp://www.kuqin.com/qtdocument/qstring.htmlhttp://caterpillar.onlyfun.net/Gossip/Qt4Gossip/QString.htmlhttp://ibeyond.blog.51cto.com/1988404/373948百度文库也有个很好的官方ppt 讲的QT 数据类型 也可以参考之)

第一步:

简单介绍下qstring常用 *** 作

1-----------------组合1-----

把str添加到字符串中并且返回结果的引用。

string = "Test"

string.append( "ing" ) // string == "Testing"等于operator+=()。

2-------------------组合2-------

QString firstName( "Joe" )

QString lastName( "Bloggs" )

QString fullName

fullName = QString( "First name is '%1', last name is '%2'" ).arg( firstName )

.arg( lastName )

// fullName == First name is 'Joe', last name is 'Bloggs'

QString str

str = QString( "Decimal 63 is %1 in hexadecimal" ).arg( 63, 0, 16 )

// str == "Decimal 63 is 3fin hexadecimal"3------------------组合3--------+,+=

QString str = "1234"

cout <<&str <<endl

str += str

cout <<qPrintable(str) <<endl

str = str + "5678"

cout <<qPrintable(str) <<endl

4----------------检测是否为空

QString a( "" )

a.isEmpty() // 真

a.isNull()// 假

QString b

b.isEmpty() // 真

b.isNull()// 真

如果它不是零字符串,返回真,否则返回假。

QString name =getName()

if ( !name )

name = "Rodney"

5------------------转换

int 转 QString

int a=10

QString b

b=QString::number(a)

QString 转int

QString a="120"

int b

b=a.toInt()

第二步:

回顾一下QT下 *** 作,显示数据库的方法

底层数据库:SQLITE,MYSQL,MSSQL,ACCESS,ORACLE…….

中间层处理:QUERY,QUERYMODEL,TABLEMODEL,RetinoalTABLEMODEL顶层显示:DEBUG(MSGBOX),TABLEVIEW,TREEVIEW,TABLEWIDGET,COMBOX第三步:

下面总结下在不同中间层的情况下,待变量SQL语句的执行方法这里只介绍查询和插入的方法,关於更新方法类似1----------------------使用query做中间层

SQL查询:

SQL插入:

2----------------------使用querymodel做中间层查询:

插入:

3----------------------使用tablemodel做中间层查询:

插入:

4----------------------使用T-tablemodel做中间层查询:

插入:

1----------------------使用query做中间层(绑定或组合SQL字符串)SQL查询:(主要是用的绑定,其他捆绑方法可查询帮助文档,或者参考插入的sql语句格式)QSqlQuery query

query.prepare("select name from student where id = ?")int id = ui->linetext->value()//从界面获取id的值query.addBindValue(id)//将id值进行绑定

query.exec()

SQL插入:

(ODBC)

QSqlQuery query

query.prepare("insert into student (id, name) values (:id, :name)")query.bindValue(0, 5)

query.bindValue(1, "sixth")

query.exec()

或者用名称进行索引

query.prepare("insert into student (id, name) values (:id, :name)")query.bindValue(":id", 5)

query.bindValue(":name", "sixth")

query.exec()

(ORACLE)

query.prepare("insert into student (id, name) values (?, ?)")query.bindValue(0, 5)

query.bindValue(1, "sixth")

query.exec()

或者省去索引

query.prepare("insert into student (id, name) values (?, ?)")query.addBindValue(5)

query.addBindValue("sixth")

query.exec()

批量插入:

QSqlQuery q

q.prepare(“insert into student values (?, ?)”)QVariantList intsints <<10 <<11 <<12 <<13q.addBindValue(ints)

QVariantList namesnames <<“xiaoming” <<“xiaoliang” <<“xiaogang” <<QVariant(QVariant::String)//最后一个是空字符串,应与前面的格式相同q.addBindValue(names)

if (!q.execBatch()) //进行批处理,如果出错就输出错误qDebug() <<q.lastError()

2----------------------使用querymodel做中间层(组合SQL字符串法可参考3)QString name = userNameLine->text()

QString passwd = userPwdLine->text()

QString sql = "select name, password from users where name = '"+ name + "'and password ='" + passwd + "'"查询:

QSqlQueryModel *model = new QSqlQueryModelmodel->setQuery(“select * from student”)插入:

3----------------------使用tablemodel做中间层(组合sql字符串法)QString name = userNameLine->text()

QString passwd = userPwdLine->text()

QString sql = "select name, password from users where name = '"+ name + "'and password ='" + passwd + "'"查询

QSqlTableModel *model = new QSqlTableModelmodel->setTable("employee")

model->setEditStrategy(QSqlTableModel::OnManualSubmit)model->select()

model->removeColumn(0)// don't show the IDmodel->setHeaderData(0, Qt::Horizontal, tr("Name"))model->setHeaderData(1, Qt::Horizontal, tr("Salary"))QTableView *view = new QTableView

view->setModel(model)

view->show()

条件查询:

QString name = ui->lineEdit->text()

model->setFilter(QObject::tr(“name = ‘%1′”).arg(name))//根据姓名进行筛选model->select()//显示结果

分类

model->setSort(0,Qt::DescendingOrder)

model->select()

插入:

int rowNum = model->rowCount()//获得表的行数int id = 10model->insertRow(rowNum)//添加一行model->setData(model->index(rowNum,0),id)4----------------------使用Relationaltablemodel做中间层(组合SQL字符串法)查询:

插入:

前提是在同一个局域网,或者网络IP可以互相ping通1、本地创建ORACLE监听2、防火墙开通端口3、远程安装ORACLE客户端,根据服务端的数据库名称、IP地址、端口配置TNS连接


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9534155.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存