1.qt5已经内带了 QSqlite 驱动 和 sqlite数据库,非常方便,
使用数据库QSqlDatabase类进行数据库相关的编程时,要在.pro里面 += sql
其他的废话不说,上代码 ( 数据库是工程目录下自己创建的一个stock.db文件 )
void MainWindow::initDataBase()
{
QSqlDatabase db;
//创建数据库实例(即创建数据库连接)
//addDatabase() 第一个参数为要装载的驱动,这里使用qt自带的qsqlite
//第二个参数"connectDB_1" 为自定义的数据库连接名,不是数据库名 )
db = QSqlDatabase::addDatabase("QSQLITE", "connectDB_1");
//选择要使用的数据库名字 即工程目录下的stock.db
//因为连接的是本地sqlite数据库,所以 主机,用户名,密码不需要配置
db.setDatabaseName("stock.db");
// db.setHostName("host");
// db.setDatabaseName("dbname");
// db.setUserName("username");
// db.setPassword("password");
//尝试连接数据库
if (!db.open()) {
outQString("无法打开数据库,错误为:" + db.lastError().text() );
}
else {
outQString("数据库已成功打开");
qDebug()<<"数据库含表:"<< db.tables(); //输出数据库里面的表
//QSL语句,参数里要填入一个数据库实例,而且一定要在 db.open()以后定义,
//之前报了一个out of memory Unable to execute statement 就是因为在db.open()前就定义了
QSqlQuery query( db ) ;
//如果表table_1不存在 则创建
if( ! db.tables().contains("table_1") ) {
bool correct = query.exec(" create table table_1 ("
" sid INTEGER PRIMARY KEY AUTOINCREMENT ,"
" scode varchar not null ,"
" sname varchar not null "
") ");
if(!correct ) outQString("建表语句执行错误:" + query.lastError().text() );
else
outQString("建表table_1 成功");
}
else outQString("表table_1已存在");
}
2. QSqlQuery query; 一定要在 db.open()以后定义
之前报了一个out of memory Unable to execute statement 就是因为在QSqlDatabase的 db.open()前就定义了
资料参考:
Qt 学习之路 2(55):数据库操作 http://www.devbean.net/2013/06/qt-study-road-2-database/
Qt, QSqlDatabase类详细介绍 http://hi.baidu.com/ageeker/item/40059c0237697ed21ff046f1
最后再暴贴51cto的