目录
1 测试平台
2 功能设计
3 代码实现
1 测试平台
采用qt4和mysql实现,其中mysql使用wamp自带,且开启服务。
2 功能设计
主要有8个功能:
(1)查看驱动,查看当前支持的数据库类型;
(2)设置连接参数,设置主机,用户,密码等;
(3)数据库连接和列表显示:展示当前数据库清单;
(4)打开数据库:打开所选的数据库并显示其中的表
(5)创建表:采用sql创建新表
(6)打开表:打开已有的表
(7)插入记录:
(8)查询表的字段个数
3 代码实现
首先新建widget工程:
开始从头实现各项功能:首先是查看驱动:
// 获取驱动
void Widget::on_pushButton_clicked()
{
QStringList list = QSqlDatabase::drivers();
Qstrlistmodel->setStringList(list);
ui->tableView->setModel(Qstrlistmodel);
}
查看实现效果:
(2)实现数据库参数设置:
// 设置连接参数
void Widget::on_pushButton_2_clicked()
{
// 获取字符串
bool ok;
QString str = QInputDialog::getText(this,"输入对话框", "输入连接信息:",
QLineEdit::Normal,"QMYSQL;localhost;root;123456", &ok);
if(!ok)
return;
// 切割为字符串列表
QStringList list = str.split(";");
if(list.count()!=4)
return;
driverName = list.at(0);
hostName = list.at(1);
userName = list.at(2);
pwdCode = list.at(3);
// 视图更新
Qstrlistmodel->setStringList(list);
ui->tableView->setModel(Qstrlistmodel);
}
?实现效果就是显示参数:
这一步只是指定参数,还没有正式连接。
(3)连接数据库服务,显示当前数据库清单:
// 连接并显示数据库
void Widget::on_pushButton_3_clicked()
{
// 连接数据库
QSqlDatabase db;
if(QSqlDatabase::contains("qt_sql_default_connection"))
db = QSqlDatabase::database("qt_sql_default_connection");
else
db = QSqlDatabase::addDatabase(driverName);
db.setHostName(hostName);
db.setUserName(userName);
db.setPassword(pwdCode);
if(!db.open())
{
QMessageBox::information(this,"错误",db.lastError().text());
return;
}
QSqlQuery query(db);
query.exec("show databases");
dblist.clear();
while(query.next())
dblist<<query.value(0).toString();
// 视图更新
Qstrlistmodel->setStringList(dblist);
ui->tableView->setModel(Qstrlistmodel);
}
显示效果如下:
相当于实现了show databases;
(4)打开数据库,显示其中的表
// 打开数据库显示表清单
void Widget::on_pushButton_4_clicked()
{
// 获取字符串
bool ok;
QString str = QInputDialog::getItem(this,tr("QInputDialog::getItem()"), "选择数据库:",
dblist,0,false, &ok);
if(!ok)
return;
curDb = str;
QSqlDatabase db;
if(QSqlDatabase::contains("qt_sql_default_connection"))
db = QSqlDatabase::database("qt_sql_default_connection");
else
db = QSqlDatabase::addDatabase(driverName);
db.setHostName(hostName);
db.setUserName(userName);
db.setPassword(pwdCode);
if(!db.open())
{
QMessageBox::information(this,"错误",db.lastError().text());
return;
}
// 查询所有表清单
QSqlQuery query(db);
query.exec(QString("use %1").arg(str));
query.exec("show tables");
tblist.clear();
while(query.next())
tblist<<query.value(0).toString();
// 视图更新
Qstrlistmodel->setStringList(tblist);
ui->tableView->setModel(Qstrlistmodel);
}
?实现效果如下:
?显示了当前数据库下的所有表格。
(5)查看表格的字段数
void Widget::on_pushButton_8_clicked()
{
// 获取字符串
bool ok;
QString str = QInputDialog::getItem(this,tr("QInputDialog::getItem()"), "选择表:",
tblist,0,false, &ok);
if(!ok)
return;
curTb = str;
QSqlDatabase db;
if(QSqlDatabase::contains("qt_sql_default_connection"))
db = QSqlDatabase::database("qt_sql_default_connection");
else
db = QSqlDatabase::addDatabase(driverName);
db.setHostName(hostName);
db.setUserName(userName);
db.setPassword(pwdCode);
if(!db.open())
{
QMessageBox::information(this,"错误",db.lastError().text());
return;
}
QSqlQuery query(db);
query.exec(QString("use %1").arg(curDb));
QString sql = QString("SELECT COUNT( * ) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '%1' AND table_name = '%2'").arg(curDb,curTb);
query.exec(sql);
query.first();
int colCount = query.value(0).toInt();
QStringList list;
list.clear();
list<<QString::number(colCount);
//视图更新
Qstrlistmodel->setStringList(list);
ui->tableView->setModel(Qstrlistmodel);
}
?这里还是使用query来实现,并用模型视图显示。
(7)查看表内容
// 打开表内容
void Widget::on_pushButton_6_clicked()
{
// 获取字符串
bool ok;
QString str = QInputDialog::getItem(this,tr("QInputDialog::getItem()"), "选择表:",
tblist,0,false, &ok);
if(!ok)
return;
curTb = str;
QSqlDatabase db;
if(QSqlDatabase::contains("qt_sql_default_connection"))
db = QSqlDatabase::database("qt_sql_default_connection");
else
db = QSqlDatabase::addDatabase(driverName);
db.setHostName(hostName);
db.setUserName(userName);
db.setPassword(pwdCode);
if(!db.open())
{
QMessageBox::information(this,"错误",db.lastError().text());
return;
}
// 查询模型
querymodel = new QSqlQueryModel(this);
QString sql;
sql = QString("USE %1").arg(curDb);
querymodel->setQuery(sql);
sql = QString("SELECT * FROM %1").arg(curTb);
querymodel->setQuery(sql);
ui->tableView->setModel(querymodel);
}
?这里由于表是二维数据,用sqtringlistmodel明显不够使了,改成用querymodel来实现mvc。
?
?
|