16,240
社区成员
发帖
与我相关
我的任务
分享
QSqlDatabase d;
if (QSqlDatabase::contains("qt_sql_default_connection"))
d = QSqlDatabase::database("qt_sql_default_connection");
else
d = QSqlDatabase::addDatabase("QSQLITE");
//d.setHostName("115.28.xx.xxx");
//d.setDatabaseName("DRIVER={SQL SERVER};SERVER='115.28.xx.xxx';DATABASE='zjs_qmysql'");
//d.setPort(3306);
//d.setUserName("huxxxxxx");
//d.setPassword("xxxxxx");
d.open();
if (d.isOpen())
{
qDebug() << QString::fromLocal8Bit( "Hi mysql!连接") << endl;
}
bool ConnectMySqlite(QSqlDatabase& database)
{
database = QSqlDatabase::addDatabase("QSQLITE", "zjs_connect");
database.setHostName("127.0.0.1");
database.setPort(3306);
database.setDatabaseName("localhost");
database.setUserName("root");
database.setPassword("root1");
if (!database.open()) {
qDebug() << "SQLite connected failed.";
return false;
}
else
{
qDebug() << "Success.";
QSqlQuery query = QSqlQuery(database);
query.prepare("select * from qqqtable");
bool b = query.exec();
if (b)
{
while (query.next())
{
qDebug() << query.value(0);
qDebug() << query.value(1);
qDebug() << query.value(2);
}
}
else
{
qDebug() << "select failed";
}
}
}
[/quote]
这里第6行数据库名字怎么是localhost?是不是应该是qqq[/quote]
这里确实写错了,改成qqq就对了。
然后其他的问题总结:
1.确定使用的数据库类型,即addDatabase()中“QSQLITE”这个参数,qt支持多种数据库类型,这里使用什么就传入什么。
2.参数设置如下:
QSqlDatabase database = QSqlDatabase::addDatabase("QMYSQL", "connect"); // 传入使用数据库,及自动义连接名称
database.setHostName("127.0.0.1"); // ip地址
database.setPort(3306); // 端口
database.setDatabaseName("qqq"); // 已有数据库名
database.setUserName("root"); // 账户名
database.setPassword("root1"); // 密码
database.open(); // 打开连接,成功后用此连接初始化QSqlQuery
QSqlQuery query = QSqlQuery(database);
3.语法问题,各个数据库使用的语法差异,语法错误会导致You have an error in your SQL syntax; check the manual that corresponds to your * server version for the right syntax to use near '*' at line * *: Unable to execute query等类似问题
4.错误输出代码如下:
QSqlError error;
error = query.lastError();
if (error.isValid())//发生错误时isValid()返回true
{
switch (error.type()) {
case QSqlError::NoError:
qDebug() << "无错误";
break;
case QSqlError::ConnectionError://连接错语
qDebug() << error.text();
break;
case QSqlError::StatementError://语句错语
qDebug() << error.text();
break;
case QSqlError::TransactionError://事务错误
qDebug() << error.text();
break;
default://未知错误
qDebug() << error.text();
break;
}
}
bool ConnectMySqlite(QSqlDatabase& database)
{
database = QSqlDatabase::addDatabase("QSQLITE", "zjs_connect");
database.setHostName("127.0.0.1");
database.setPort(3306);
database.setDatabaseName("localhost");
database.setUserName("root");
database.setPassword("root1");
if (!database.open()) {
qDebug() << "SQLite connected failed.";
return false;
}
else
{
qDebug() << "Success.";
QSqlQuery query = QSqlQuery(database);
query.prepare("select * from qqqtable");
bool b = query.exec();
if (b)
{
while (query.next())
{
qDebug() << query.value(0);
qDebug() << query.value(1);
qDebug() << query.value(2);
}
}
else
{
qDebug() << "select failed";
}
}
}
[/quote]
这里第6行数据库名字怎么是localhost?是不是应该是qqq
bool ConnectMySqlite(QSqlDatabase& database)
{
database = QSqlDatabase::addDatabase("QSQLITE", "zjs_connect");
database.setHostName("127.0.0.1");
database.setPort(3306);
database.setDatabaseName("localhost");
database.setUserName("root");
database.setPassword("root1");
if (!database.open()) {
qDebug() << "SQLite connected failed.";
return false;
}
else
{
qDebug() << "Success.";
QSqlQuery query = QSqlQuery(database);
query.prepare("select * from qqqtable");
bool b = query.exec();
if (b)
{
while (query.next())
{
qDebug() << query.value(0);
qDebug() << query.value(1);
qDebug() << query.value(2);
}
}
else
{
qDebug() << "select failed";
}
}
}
/* 名称:ConnectMySqlite
* 功能:确认数据库连接
* 输入:无
* 返回:true连接成功,false连接失败
*/
bool MySql::ConnectMySqlite()
{
database = QSqlDatabase::addDatabase("QSQLITE", mySqlConnectName);
database.setDatabaseName(mySqlName);
if(!database.open()) {
qDebug()<<"SQLite connected failed.";
return false;
}
}