<二> Qt更新sqlite3插件

    今天在Qt的帮助手册里看到,可以用自己编译的sqlite库来替换qt源码中所带的sqlite。这样就好办了,可以更新Qt的sqlite3插件,编程的时候直接用Qt的数据库语句,上一章中用sqlite3的函数来编程,总感觉怪怪的。毕竟是写Qt sqlite程序,应该写成Qt的风格,后面使用Qt的数据模型就比较方便。

    上一章中已经说了sqlite3源码的编译,这里我把通过交叉编译后安装在虚拟机上的qte目录和sqlite3目录打印下。

ws@ubuntu:~$ ls /usr/local/Trolltech/QtEmbedded-4.8.5-arm/
bin  demos  examples  include  lib  mkspecs  plugins  tests  translations
ws@ubuntu:~$ ls /usr/local/arm_sqlite/
bin  include  lib  share
    接下来开始更新sqlite3插件。首先跳转到qt源码目录,依次执行以下命令。

cd /opt/FriendlyARM/mini210/linux/arm-qte-4.8.5/qt-everywhere-opensource-src-4.8.5/src/plugins/sqldrivers/sqlite
export SQLITE=/usr/local/arm_sqlite
/usr/local/Trolltech/QtEmbedded-4.8.5-arm/bin/qmake "INCLUDEPATH+=$SQLITE/include" "LIBS+=-L$SQLITE/lib -lsqlite3"
make 
make install
    更新后的插件被安装在如下目录。

ws@ubuntu:~$ ls /usr/local/Trolltech/QtEmbedded-4.8.5-arm/plugins/sqldrivers/
libqsqlite.so
    将这个libsqlite.so拷贝到开发板上的相同路径即可。

    接下来把上一章的工程修改下,按照Qt数据库应用来写,界面不变,功能不变,只是源码变了。相对而言,代码要简洁的多,效率就不大清楚了,回头测试一下。

    首先看数据库的打开,代码如下。

//连接数据库
    db = QSqlDatabase::addDatabase ("QSQLITE");  //设置驱动
    db.setDatabaseName ("/apps/test.db");
	if(!db.open ())
	{
		QMessageBox::warning (0, QObject::tr("Database error"), db.lastError ().text ());
        return;
	}
    qDebug()<<"Connect success\n";

    然后是创建表格,插入数据,删除数据,删除表格。

void MainWindow::on_pushButton_ct_clicked()
{
    const char *sSQL = "create table users ("
                       "id integer PRIMARY KEY AUTOINCREMENT, "
                       "name varchar(40) NOT NULL, "
                       "age integer NOT NULL, "
                       "birthday datetime NOT NULL, "
                       "email varchar(40) NOT NULL);";
    //执行建表SQL
    QSqlQuery query;
    query.exec(sSQL);

    rows = 0;
    index = 0;
    qDebug()<<"Datebase table creator success!!\n";
}

void MainWindow::on_pushButton_ic_clicked()
{
    rows++;

    QString sSQL = QString("insert into users values"
                            "(%1, 'ws_%2', %3, '1989-5-4', '[email protected]');")
                            .arg(rows).arg(rows).arg(20+rows);
    //执行插入数据
    QSqlQuery query;
    query.exec(sSQL);

    ui->horizontalSlider->setMaximum(rows);
    qDebug()<<"Datebase insert success!\n";
}

void MainWindow::on_pushButton_dc_clicked()
{
    if(rows > 0)  rows--;
    else{
        qDebug()<<"No more row..";
        return;
    }

    QString sSQL = QString("delete from users where id=%1").arg(rows+1);

    //执行删除数据
    QSqlQuery query;
    query.exec(sSQL);

    ui->horizontalSlider->setMaximum(rows);
    qDebug()<<"Datebase delete success!\n";
}

void MainWindow::on_pushButton_dt_clicked()
{
    const char *sSQL = "drop table users";

    //delete table
    QSqlQuery query;
    query.exec(sSQL);

    rows = 0;
    index = 0;
    qDebug()<<"Datebase table delete success!!\n";
}
    查询操作也要简单的多,没有回调函数了。

void MainWindow::on_pushButton_sn_clicked()
{
    if(index < rows)   index++;
    else index = rows;

    ui->textEdit->clear();
    QString sSQL = QString("select * from users where id=%1").arg(index);

    //执行查询操作
    QSqlQuery query;
    query.exec(sSQL);

    while(query.next()){

        ui->textEdit->append(QString("id:       ") + query.value(0).toString());
        ui->textEdit->append(QString("name:     ") + query.value(0).toString());
        ui->textEdit->append(QString("age:      ") + query.value(0).toString());
        ui->textEdit->append(QString("birthday: ") + query.value(0).toString());
        ui->textEdit->append(QString("email:    ") + query.value(0).toString());
    }

    ui->horizontalSlider->setValue(index);
    qDebug()<<"Datebase inquire success!!\n";
}
    查询表格最大行数也要简单多了,两句代码搞定。

//查询user表格中已有数据的行数
    QSqlQuery query;
    query.exec("SELECT COUNT(*) FROM users");
    if(query.next())
        rows = query.value(0).toInt();
    程序在http://download.csdn.net/detail/westlor/9399394可以下载。




你可能感兴趣的:(数据库,插件,qt,sqlite3)