2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

时间:2022-01-07 17:25:02

  1. Linux下的qt安装,命令时:sudoapt-get install qt-sdk

  2. 安装mysql数据库,安装方法參考博客:http://blog.csdn.net/tototuzuoquan/article/details/39565783

  3. 假设行想进数据库开发。须要安装libqt5sql5-mysql.命令是:

sudo apt-get install libqt5sql5-mysql

2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

4 创建一个项目

要调用数据库。须要加上QT += gui widgets sql  也就是说要加上sql库

注意假设是在windows平台下:要将C:/MySQL/bin文件夹下的libmySQL.dll复制到项目编译后的生成的exe文件所在的同级文件夹下(比方文件夹E:\QT\build-Database01-Desktop_Qt_5_3_MinGW_32bit-Debug\debug下。在此文件夹下有Database01.exe)。比方截图:

2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

A 假设是在Linux文件夹下,输入下面命令:mysql-u
root -p123456

创建数据库:

2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

B使用数据库d0718,并创建所需的数据库表

表内容例如以下:

CREATE TABLE `tcontact` (

`username` varchar(32) NOT NULL,

`mobile` varchar(16) NOT NULL,

`mobile2` varchar(16) NOT NULL,

`telephone` varchar(32) DEFAULT NULL,

`home` varchar(32) DEFAULT NULL,

`homeaddr` varchar(1024) DEFAULT NULL,

`company` varchar(128) DEFAULT NULL,

`companyaddr` varchar(1024) DEFAULT NULL,

`title` varchar(16) DEFAULT NULL,

PRIMARY KEY (`mobile`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `tuser` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'this is userid',

`username` varchar(32) NOT NULL COMMENT 'username',

`password` varchar(32) NOT NULL COMMENT 'password',

`gender` int(11) NOT NULL COMMENT '1 is male 0 is female',

PRIMARY KEY (`id`),

UNIQUE KEY `username` (`username`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

C 编写项目代码:

Database01.pro

SOURCES+=\

main.cpp

QT+=gui
widgets sql

CONFIG+=C++11

main.cpp

#include <QApplication>
#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>
#include <QWidget>
 
int main(int argc,char* argv[])
{
    QApplication app(argc,argv);
    QWidget w;
 
    /*QT能够操作 QSLITE QODBC,QPLSQL 这些数据库*/
    //以下表示使用mysql数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");  //设置数据库所在位置
    db.setUserName("root");       //设置数据库的username
    db.setPassword("123456");     //设置数据库的password
    db.setDatabaseName("d0718");  //设置数据库名称
    bool bRet = db.open();        //打开数据库连接
    if(bRet == false)
{
    //说明能够通过db.lastError()的方式得到错误信息
        qDebug() << "error open database" << db.lastError().text();
        exit(0);
    }
    qDebug() << "open database success";
 
    w.show();
    return app.exec();
}

执行结果:

2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

案例二:

Database01.pro的内容例如以下:

SOURCES += \
    main.cpp \
    Widget01.cpp
 
QT += gui widgets sql
#假设用到C++11的才会用到。否则不用
CONFIG += C++11
 
HEADERS += \
    Widget01.h

Widget01.h的内容例如以下:

#ifndef WIDGET01_H
#define WIDGET01_H
 
#include <QWidget>
 
class Widget01 : public QWidget
{
    Q_OBJECT
public:
    explicit Widget01(QWidget *parent = 0);
 
signals:
 
public slots:
 
};
 
#endif // WIDGET01_H

Widget01.cpp的内容例如以下:

#include "Widget01.h"
 
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlResult>
 
#include <QDebug>
 
Widget01::Widget01(QWidget *parent) :
    QWidget(parent)
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");
    db.setUserName("root");
    db.setPassword("123456");
    db.setDatabaseName("d0718");
    bool bRet = db.open();
    if(bRet == false)
    {
        qDebug() << "error open database" << db.lastError().text();
        exit(0);
    }
    qDebug() << "open database success";
 
    //向数据库中加入数据
    db.exec("insert into tuser(username,password,gender) values('涂作权','123456','1')");
    db.close();
}

main.cpp的内容例如以下:

#include <QApplication>
#include "Widget01.h"
 
int main(int argc,char* argv[])
{
    QApplication app(argc,argv);
    Widget01 w;
    w.show();
    return app.exec();
}

执行结果:

2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

案例2,使用QSqlTableModel

Database01.pro

SOURCES += \
    main.cpp \
    Widget02.cpp
 
QT += gui widgets sql
 
CONFIG += C++11
 
HEADERS += \
    Widget02.h

Widget02.h

#ifndef WIDGET02_H
#define WIDGET02_H
 
#include <QWidget>
 
class Widget02 : public QWidget
{
    Q_OBJECT
public:
    explicit Widget02(QWidget *parent = 0);
 
signals:
 
public slots:
 
};
 
#endif // WIDGET02_H

Widget02.cpp

#include "Widget02.h"
#include <QSqlDatabase>
#include <QSqlTableModel>
#include <QSqlRecord>
#include <QDebug>
#include <QSqlError>
 
Widget02::Widget02(QWidget *parent) :
    QWidget(parent)
{
    // QSqlTableModel: 数据表相应的数据结构
    QSqlTableModel model;
    //设置表名。通过这样的方式不用写sql语句了
    model.setTable("tuser");
    //设置过滤器,当加上这一句的时候仅仅返回username不是"toto"数据
    //model.setFilter("username<>'toto'");
    model.select();  // exec query
    int ret = model.rowCount();
 
    // read data from database
    for(int i=0; i<ret; ++i)
    {
        QSqlRecord record = model.record(i);
        for(int j=0; j<record.count(); j++)
        {
            qDebug() << record.value(j);
        }
    }
 
    // update data to database
    //将第0行(脚标以0開始),第1列的数据改成toto
    //注意仅仅能改动上满select出来的结果。
    model.setData(model.index(2, 1), "tototuzuoquan");
    //要想让上面的这一句也运行成功。要放开以下一句
    model.submitAll();
 
    // insert data to database
    QSqlRecord record = model.record();
    //能够指定id的值,通过以下的方式实现向数据库中插入一条记录
    // record.setValue("id", );
    record.setValue("username", "toto12");
    record.setValue("password", "password12");
    record.setValue("gender", 1);
    model.insertRecord(-1, record);
    model.submitAll();
}

main.cpp

#include <QApplication>
#include "Widget02.h"
#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>
 
int main(int argc,char* argv[])
{
    QApplication app(argc,argv);
 
    /*QT能够操作 QSLITE QODBC,QPLSQL 这些数据库*/
    //以下表示使用mysql数据库。由于这里的db没实用到db。所以能够把它放在main中
    //本质:在QT里面打开一个数据库之后,就会保存一个数据库连接,
    //其他的位置就能够随意使用这个全局的变量了
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");  //设置数据库所在位置
    db.setUserName("root");       //设置数据库的username
    db.setPassword("123456");     //设置数据库的password
    db.setDatabaseName("d0718");  //设置数据库名称
    bool bRet = db.open();        //打开数据库连接
 
    if(bRet == false)
    {
        //说明能够通过db.lastError()的方式得到错误信息
        qDebug() << "error open database" << db.lastError().text();
        exit(0);
    }
    qDebug() << "open database success";
 
    //注意Widget02要写在上面代码的以下
    Widget02 w;
    w.show();
    return app.exec();
}

执行结果:

2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

数据库中的变化的内容例如以下:

2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

案例三(QTableView),事务操作:

Database01.pro

SOURCES += \
    main.cpp \
    Widget03.cpp
 
QT += gui widgets sql
 
CONFIG += C++11
 
HEADERS += \
    Widget03.h

Widget03.h

#ifndef WIDGET03_H
#define WIDGET03_H
 
#include <QObject>
#include <QSqlTableModel>
#include <QTableView> // show table
 
class Widget03 : public QWidget
{
    Q_OBJECT
public:
    explicit Widget03(QWidget *parent = 0);
 
    QSqlTableModel* _model;
    QTableView* _view;
 
signals:
 
public slots:
    void slotSubmitClicked();
    void slotDelClicked();
    void slotAddClicked();
};
 
#endif // WIDGET03_H

Widget03.cpp

#include "Widget03.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QPushButton>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlDatabase>
#include <QSqlRecord>
 
Widget03::Widget03(QWidget *parent) :
    QWidget(parent)
{
    _model = new QSqlTableModel;
    _model->setTable("tuser");
    _model->select();
    _model->setEditStrategy(QSqlTableModel::OnManualSubmit);
 
    _model->setHeaderData(0, Qt::Horizontal, "编号");
    _model->setHeaderData(1, Qt::Horizontal, "username");
    _model->setHeaderData(2, Qt::Horizontal, "password");
    _model->setHeaderData(3, Qt::Horizontal, "性别");
 
    _view = new QTableView;
    //_view中加入_model
    _view->setModel(_model);
    //隐藏第3列
    //_view->hideColumn(2);
 
    QVBoxLayout* lay = new QVBoxLayout(this);
    lay->addWidget(_view);
 
    QHBoxLayout* hBox = new QHBoxLayout;
    lay->addLayout(hBox);
    hBox->addStretch();
 
    //删除的信号和槽
    QPushButton* del = new QPushButton("del");
    connect(del, SIGNAL(clicked()), this, SLOT(slotDelClicked()));
    hBox->addWidget(del);
 
    //提交的信号和槽
    QPushButton* submit = new QPushButton("submit");
    connect(submit, SIGNAL(clicked()), this, SLOT(slotSubmitClicked()));
    hBox->addWidget(submit);
 
    //加入的信号和槽
    QPushButton* add = new QPushButton("add");
    connect(add, SIGNAL(clicked()), this, SLOT(slotAddClicked()));
    hBox->addWidget(add);
}
 
/**
 * @brief Widget03::slotAddClicked 加入的槽
 */
void Widget03::slotAddClicked()
{
    //开启事务
    _model->database().transaction();
 
    QSqlRecord record = _model->record();
    _model->insertRecord(-1,record);
}
 
/**
 * @brief Widget03::slotDelClicked 删除的信号槽
 */
void Widget03::slotDelClicked()
{
    // 通过_view去获取被选中的部分的数据model
    QItemSelectionModel * selectModel = _view->selectionModel();
    // 通过选中的数据结构,获取这些格子的ModelIndex
    QModelIndexList selectList =  selectModel->selectedIndexes();
    QList<int> delRow;
 
    // 遍历这些格子。获取格子所在行,由于可能存在同样的行,所以要去重
    for(int i=0; i<selectList.size(); ++i)
    {
        QModelIndex index = selectList.at(i);
        //  _model->removeRow(index.row());
        delRow << index.row();
    }
 
    while(delRow.size() > 0)
    {
        int row = delRow.at(0);
        delRow.removeAll(row);
        _model->removeRow(row);
    }
 
    _model->submitAll();
}
 
void Widget03::slotSubmitClicked()
{
    if(!_model->submitAll())
    {
        QMessageBox::critical(this, "Error", QSqlDatabase().lastError().text());
        _model->database().rollback();
    }
    else
    {
        _model->database().commit();
    }
}

main.cpp

#include <QApplication>
#include "Widget03.h"
#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>
 
int main(int argc,char* argv[])
{
    QApplication app(argc,argv);
 
    /*QT能够操作 QSLITE QODBC,QPLSQL 这些数据库*/
    //以下表示使用mysql数据库,由于这里的db没实用到db,所以能够把它放在main中
    //本质:在QT里面打开一个数据库之后,就会保存一个数据库连接,
    //其他的位置就能够随意使用这个全局的变量了
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");  //设置数据库所在位置
    db.setUserName("root");       //设置数据库的username
    db.setPassword("123456");     //设置数据库的password
    db.setDatabaseName("d0718");  //设置数据库名称
    bool bRet = db.open();        //打开数据库连接
 
    if(bRet == false)
    {
        //说明能够通过db.lastError()的方式得到错误信息
        qDebug() << "error open database" << db.lastError().text();
        exit(0);
    }
    qDebug() << "open database success";
 
    //注意Widget02要写在上面代码的以下
    Widget03 w;
    w.show();
    return app.exec();
}

执行结果:

2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

案例四:关于QItemDelegate代理

Database01.pro

SOURCES+=\

main.cpp\

Widget04.cpp

QT+=gui
widgets sql

CONFIG+=C++11

HEADERS+=\

Widget04.h

Widget04.h

#ifndefWIDGET04_H

#defineWIDGET04_H

#include<QObject>

#include<QSqlTableModel>

#include<QTableView>//showtable

#include<QItemDelegate>

#include<QComboBox>

/**

*@briefTheTUserDelegateclass对整张表进行代理

*/

classTUserDelegate:publicQItemDelegate

{

QWidget*createEditor(QWidget*parent,

constQStyleOptionViewItem&option,

constQModelIndex&index)const

{

if(index.column()==0)

returnNULL;

if(index.column()==3)

{

QComboBox* combo=newQComboBox(parent);

combo->addItem("男");

combo->addItem("女");

returncombo;

}

returnQItemDelegate::createEditor(parent,option,index);

}

};

/**

*@briefTheReadOnlyDelegateclass做一个仅仅读的代理

*/

classReadOnlyDelegate:publicQItemDelegate

{

QWidget*createEditor(QWidget*,

constQStyleOptionViewItem&,

constQModelIndex&)const

{

returnNULL;

}

};

/**

*@briefTheGenderDelegateclass对指定列进行代理

*/

classGenderDelegate:publicQItemDelegate

{

public:

QWidget*createEditor(QWidget*parent,

constQStyleOptionViewItem&,

constQModelIndex&)const

{

QComboBox* combo=newQComboBox(parent);

combo->addItem("男");

combo->addItem("女");

returncombo;

}

};

/**

*@briefTheMyTableModelclass对TableModel的重写

*/

classMyTableModel:publicQSqlTableModel

{

public:

QVariantdata(constQModelIndex&idx,introle=Qt::DisplayRole)const

{

//  if(role==Qt::DisplayRole)

//      returnQSqlTableModel::data(idx,role);

//假设不是第三列,直接返回

if(idx.column()!=3)

returnQSqlTableModel::data(idx,role);

//假设是第三列

QVariantvar=QSqlTableModel::data(idx,role);

if(var==0)

{

return"女";

}

return"男";

}

boolsetData(constQModelIndex&index,constQVariant&value,introle=Qt::EditRole)

{

if(index.column()!=3)

returnQSqlTableModel::setData(index,value,role);

if(value=="男")

returnQSqlTableModel::setData(index,1,role);

returnQSqlTableModel::setData(index,0,role);

}

};

classWidget04:publicQWidget

{

Q_OBJECT

public:

explicitWidget04(QWidget*parent=
0);

MyTableModel*_model;

QTableView*_view;

signals:

publicslots:

voidslotSubmitClicked();

voidslotDelClicked();

voidslotAddClicked();

};

#endif//WIDGET04_H

Widget04.cpp

#include"Widget04.h"

#include<QVBoxLayout>

#include<QHBoxLayout>

#include<QPushButton>

#include<QMessageBox>

#include<QSqlError>

#include<QSqlDatabase>

#include<QSqlRecord>

Widget04::Widget04(QWidget*parent):

QWidget(parent)

{

_model=newMyTableModel;

_model->setTable("tuser");

_model->select();

//数据库的提交策略是手动提交

_model->setEditStrategy(QSqlTableModel::OnManualSubmit);

//改变现实的表的名字

_model->setHeaderData(0,Qt::Horizontal,"编号");

_model->setHeaderData(1,Qt::Horizontal,"username");

_model->setHeaderData(2,Qt::Horizontal,"password");

_model->setHeaderData(3,Qt::Horizontal,"性别");

_view=newQTableView;

_view->setModel(_model);

//   _view->hideColumn(2);

//以下是为指定的列设置代理

// _view->setItemDelegateForColumn(3,newGenderDelegate);

//_view->setItemDelegateForColumn(0,newReadOnlyDelegate);

//为整个表设置代理

_view->setItemDelegate(newTUserDelegate);

QVBoxLayout*lay=newQVBoxLayout(this);

lay->addWidget(_view);

QHBoxLayout*hBox=newQHBoxLayout;

lay->addLayout(hBox);

hBox->addStretch();

//删除button

QPushButton*del=newQPushButton("del");

connect(del,SIGNAL(clicked()),this,SLOT(slotDelClicked()));

hBox->addWidget(del);

//提交button

QPushButton*submit=newQPushButton("submit");

connect(submit,SIGNAL(clicked()),this,SLOT(slotSubmitClicked()));

hBox->addWidget(submit);

//加入button

QPushButton*add=newQPushButton("add");

connect(add,SIGNAL(clicked()),this,SLOT(slotAddClicked()));

hBox->addWidget(add);

}

voidWidget04::slotAddClicked()

{

QSqlRecordrecord=_model->record();

_model->insertRecord(-1,record);

}

voidWidget04::slotDelClicked()

{

//通过_view去获取被选中的部分的数据model

QItemSelectionModel*selectModel=_view->selectionModel();

//通过选中的数据结构,获取这些格子的ModelIndex

QModelIndexListselectList= selectModel->selectedIndexes();

QList<int>delRow;

//遍历这些格子,获取格子所在行,由于可能存在同样的行。所以要去重

for(inti=0;i<selectList.size();++i)

{

QModelIndexindex=selectList.at(i);

// _model->removeRow(index.row());

delRow<<index.row();

}

while(delRow.size()>0)

{

introw=delRow.at(0);

delRow.removeAll(row);

_model->removeRow(row);

}

_model->submitAll();

}

/**

*@briefWidget04::slotSubmitClicked提交button

*/

voidWidget04::slotSubmitClicked()

{

if(!_model->submitAll())

{

QMessageBox::critical(this,"Error",QSqlDatabase().lastError().text());

}

}

main.cpp

#include<QApplication>

#include"Widget04.h"

#include<QSqlDatabase>

#include<QSqlError>

#include<QDebug>

intmain(intargc,char*argv[])

{

QApplicationapp(argc,argv);

/*QT能够操作QSLITEQODBC,QPLSQL这些数据库*/

//以下表示使用mysql数据库。由于这里的db没实用到db,所以能够把它放在main中

//本质:在QT里面打开一个数据库之后。就会保存一个数据库连接,

//其他的位置就能够随意使用这个全局的变量了

QSqlDatabasedb=QSqlDatabase::addDatabase("QMYSQL");

db.setHostName("127.0.0.1"); //设置数据库所在位置

db.setUserName("root");      //设置数据库的username

db.setPassword("123456");    //设置数据库的password

db.setDatabaseName("d0718"); //设置数据库名称

boolbRet=db.open();       //打开数据库连接

if(bRet==false)

{

//说明能够通过db.lastError()的方式得到错误信息

qDebug()<<"erroropendatabase"<<db.lastError().text();

exit(0);

}

qDebug()<<"opendatabasesuccess";

//注意Widget02要写在上面代码的以下

Widget04w;

w.show();

returnapp.exec();

}

执行结果:

2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

Widget05.h

#ifndef
WIDGET05_H

#define
WIDGET05_H

#include
<QWidget>

#include
<QSqlQueryModel>

#include
<QTableView>

class
Widget05
:
public
QWidget

{

Q_OBJECT

public:

explicit
Widget05(QWidget
*parent
= 0);

QSqlQueryModel*
_model;

QTableView
*_view;

signals:

public
slots:

};

#endif
//
WIDGET05_H

Widget05.cpp

#include
"Widget05.h"

#include
<QSqlQuery>

#include
<QVBoxLayout>

Widget05::Widget05(QWidget
*parent)
:

QWidget(parent)

{

_model
=
new
QSqlQueryModel;

_view
=
new
QTableView(this);

_view->setModel(_model);

_model->setQuery("select
*
from
tuser");

_model->query();

QVBoxLayout*
lay
=
new
QVBoxLayout(this);

lay->addWidget(_view);

}

main.cpp

#include <QApplication>
#include "Widget05.h"
#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>
#include "Contact.h"
 
int main(int argc,char* argv[])
{
    QApplication app(argc,argv);
 
    /*QT能够操作 QSLITE QODBC,QPLSQL 这些数据库*/
    //以下表示使用mysql数据库,由于这里的db没实用到db。所以能够把它放在main中
    //本质:在QT里面打开一个数据库之后,就会保存一个数据库连接,
    //其他的位置就能够随意使用这个全局的变量了
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");  //设置数据库所在位置
    db.setUserName("root");       //设置数据库的username
    db.setPassword("123456");     //设置数据库的password
    db.setDatabaseName("d0718");  //设置数据库名称
    bool bRet = db.open();        //打开数据库连接
 
    if(bRet == false)
    {
        //说明能够通过db.lastError()的方式得到错误信息
        qDebug() << "error open database" << db.lastError().text();
        exit(0);
    }
    qDebug() << "open database success";
 
    //注意Widget02要写在上面代码的以下
    Widget05 w;
    w.show();
    return app.exec();
}
执行结果:
2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

版权声明:本文博客原创文章,博客,未经同意,不得转载。

2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理的更多相关文章

  1. 2&period;关于QT中数据库操作,简单数据库连接操作,数据库的增删改查,QSqlTableModel和QTableView,事务操作,关于QItemDelegate 代理

     Linux下的qt安装,命令时:sudoapt-get install qt-sdk 安装mysql数据库,安装方法参考博客:http://blog.csdn.net/tototuzuoquan ...

  2. 第三百零七节,Django框架&comma;models&period;py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  3. 五 Django框架&comma;models&period;py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  4. Mybatis实现简单的CRUD(增删改查)原理及实例分析

    Mybatis实现简单的CRUD(增删改查) 用到的数据库: CREATE DATABASE `mybatis`; USE `mybatis`; DROP TABLE IF EXISTS `user` ...

  5. 数据库开发基础-SQl Server 控制数据库的服务&plus;数据库的创建与管理(增删改查)

    控制数据库的服务: 方法一: 1.Windows+R 打开运行  打开cmd 2.输入net start MSSQLserver 启动数据库服务 输入net stop MSSQLserver 关闭数据 ...

  6. 数据库开发基础-&starf;SQl Server 控制数据库的服务&plus;数据库的创建与管理(增删改查)&starf;

    控制数据库的服务: 方法一: 1.Windows+R 打开运行  打开cmd 2.输入net start MSSQLserver 启动数据库服务 输入net stop MSSQLserver 关闭数据 ...

  7. 【黑马Android】&lpar;04&rpar;数据库的创建和sql语句增删改查&sol;LinearLayout展示列表数据&sol;ListView的使用和BaseAdater&sol;内容提供者创建

    数据库的创建和sql语句增删改查 1. 载入驱动. 2. 连接数据库. 3. 操作数据库. 创建表: create table person( _id integer primary key, nam ...

  8. django之创建第8-1个项目-数据库之增删改查&sol;数据库数据显示在html页面

    1.为test.DB数据库预先创建下面数据 1    张三    16    2015-01-02    12    李四    17    2015-01-04    13    王五    14  ...

  9. 啊啊啊啊啊啊啊今天就写&comma;炒鸡简单 数据库Sqlite的创建&comma;库的增删改查

    啦啦啦啦啦啦啦 写这个不用多长时间,我直接写代码注释都是些语句,Sql语句和Api来操作数据库 ,语句的参数我会注释 SQLite数据库创建数据库需要使用的api:SQLiteOpenHelper必须 ...

  10. 关于android中数据库的创建以及基础的增删改查的相应操作

    这里主要是掌握一些基本的相应的知识,具体的是阿金是等到明天在进行. 相应的知识点如下: 对于数据库中的一些常识.SQLite 没有服务器进程,它通过文件保存数据,该文件是跨平台的,可以放在其他平台中使 ...

随机推荐

  1. SP2-0618&colon; 无法找到会话标识符。启用检查 PLUSTRACE 角色 SP2-0611&colon; 启用 STATISTICS 报告时出错

    援引: SP2-0618: 无法找到会话标识符.启用检查 PLUSTRACE 角色 SP2-0611: 启用 STATISTICS 报告时出错 问题描述及解决方法: SQL*Plus: Release ...

  2. UITableView代理方知多少&plus;执行顺序

    一.前言 iOS中UITableView是最常用的一个控件.看了一下UITableView的代理:UITableViewDelegate 和 UITableViewDataSource.其中UITab ...

  3. HBase 专题技术收录

    HBase系列: 博客地址:http://www.cnblogs.com/panfeng412/tag/HBase/ 技术专题文章: HBase中MVCC的实现机制及应用情况 HBase在单Colum ...

  4. sql-in和not in

    IN .NOT IN这个指令可以让我们依照一或数个不连续 (discrete) 的值的限制之内抓出数据库中的值 in和not in in:存在与...里面的 not in:不存在与..里面的 其指令语 ...

  5. URAL 2030 Awesome Backup System

    Awesome Backup System Time limit: 2.0 secondMemory limit: 64 MB It is known that all people can be d ...

  6. Ubuntu的LTS版本

    Ubuntu的LTS版本什么意思 LTS是长期支持(Long Term Support)的缩写. 我们每六个月制作一个新的Ubuntu桌面和服务器的版本,这意味着你总能拥有开源世界提供的最新最好的应用 ...

  7. sqlite数据库方言配置

    1. application.properties配置sqlite数据库 spring.datasource.url = jdbc:sqlite:C:/test/sqlite/DB/sqlite.db ...

  8. xcode单步调试快捷键

    xcode单步调试快捷键f6,但是磨人f6是用来调节键盘亮度的,在系统偏好,键盘设置里面,做如下设置就可以了.

  9. Python&lowbar;语法和界面设计

    http://www.runoob.com/python/python-gui-tkinter.html  http://www.python-course.eu/python_tkinter.php

  10. java字符串集合

    一,java的接口跟C语言所能做到的相比确实是让人眼前一亮的东西.利用接口可以将多种东西放到一起,在编程过程中就能省略掉相同类的很多重复代码,将代码进行分类别的,统一的处理. 二,java中的字符串处 ...