Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT创建者+;SQLite。插入速度非常慢_C++_Qt_Sqlite_Windows Xp_32 Bit - Fatal编程技术网

C++ QT创建者+;SQLite。插入速度非常慢

C++ QT创建者+;SQLite。插入速度非常慢,c++,qt,sqlite,windows-xp,32-bit,C++,Qt,Sqlite,Windows Xp,32 Bit,我制作了一个小终端应用程序,可以在Windows32位上运行 此应用程序从UDP端口侦听并在SQLite数据库上写入数据 守则: #include <QUdpSocket> #include <QTextStream> #include <QSqlDriver> #include <QSqlDatabase> #include <QSqlQuery> int main() { int i; QTextStream q

我制作了一个小终端应用程序,可以在Windows32位上运行

此应用程序从UDP端口侦听并在SQLite数据库上写入数据

守则:

#include <QUdpSocket>
#include <QTextStream>
#include <QSqlDriver>
#include <QSqlDatabase>
#include <QSqlQuery>


int main()
{
    int i;
    QTextStream qout(stdout);

    //db conn or create db
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setHostName("localhost");
    db.setDatabaseName("C:\\db_test\\db.sqlite");

    db.open();
    //create db structure
    QSqlQuery *query = new QSqlQuery(db);
    query->prepare("CREATE TABLE "
                   "MYTABLE("
                   "FIELD_1 VARCHAR(100) NOT NULL, "
                   "FIELD_2 VARCHAR(100) NOT NULL)"
                   );

    if(query->exec() == true){
        qout << "New Database Created" << endl;
    } else {
        qout <<"Database Alredy Exists" << endl;
    }


   //start UDP listener
    QUdpSocket *udpSocket = new QUdpSocket(0);
    udpSocket->bind(7755, QUdpSocket::ShareAddress);
    i=1;

    while (udpSocket->waitForReadyRead(-1)) {

        while(udpSocket->hasPendingDatagrams()) {
            QByteArray datagram;
            datagram.resize(udpSocket->pendingDatagramSize());
            QHostAddress sender;
            quint16 senderPort;

            udpSocket->readDatagram(datagram.data(), datagram.size(),
                                    &sender, &senderPort);

            QString Rec_Data = datagram.data();
            QString Sender_Address = sender.toString();

            QString InsertStr = "INSERT INTO MYTABLE VALUES (:val1, :val2)";
            qout << InsertStr << " " << i << endl;
            query->prepare(InsertStr);
            query->bindValue(":val1", Rec_Data);
            query->bindValue(":val2", Sender_Address);
            if(query->exec() == true){
                qout << "Data stored" << endl;
            } else {
                qout <<"Store Error" << endl;
            }

            i=i+1;
        }
    }
}
#包括
#包括
#包括
#包括
#包括
int main()
{
int i;
QTextStream-qout(stdout);
//数据库连接或创建数据库
QSqlDatabase db=QSqlDatabase::addDatabase(“QSQLITE”);
db.setHostName(“localhost”);
db.setDatabaseName(“C:\\db\u test\\db.sqlite”);
db.open();
//创建数据库结构
QSqlQuery*query=新的QSqlQuery(db);
查询->准备(“创建表”
“MYTABLE(”
字段_1 VARCHAR(100)不为空
“字段_2 VARCHAR(100)不为空”
);
如果(查询->执行()==true){
qout读取数据报(datagram.data(),datagram.size(),
&发送方和发送方端口);
QString Rec_Data=datagram.Data();
QString Sender_Address=Sender.toString();
QString InsertStr=“插入MYTABLE值(:val1,:val2)”;
qout exec()=真){

qout将多个插入操作批处理到单个事务中

单独执行插入操作会将吞吐量限制在每秒60个插入操作,因为当SQLite进行写后读验证时,硬盘必须完全旋转

进一步阅读

非常感谢!您给了我一个重要的解决方法。对于特定于Qt的事务支持: