qt远程数据库连接参数的问题

zyww 2017-10-16 03:45:14

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;
}

不管上面代码中注释的那几句是否注释都能成功打开这个连接,但是不管是创建表还是在已有表中插入数据都不能成功,求大神解答。
...全文
878 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyww 2017-10-17
  • 打赏
  • 举报
回复
引用 1 楼 ch122633 的回复:
sqlite里面有创建表吗? 没有表会不会连接失败?
创不创建表都可以连接,根本不知道它连到哪里去了。 用你这个方法也是连接成功,但是我只是随便输入了两个mySqlConnectName和mySqlName参数。。。 ConnectMySqlite(d, "zjs_qmysql", "zjs_connect"); // 改成传参形式,传入的database和两个name,其他什么参数都没有,也是连接成功的。不知道这是连到哪了。。。
zyww 2017-10-17
  • 打赏
  • 举报
回复
引用 8 楼 ch122633 的回复:
[quote=引用 5 楼 sinat_27741463 的回复:] [quote=引用 4 楼 zc1239044730 的回复:] 数据库名字都不指定,你如何去操作数据呢?
这也是问题啊,我是试过指定名字的,但是连接后查询、插入等操作仍然不成功。 下面代码的基础是:我手动在本地创建好了个名为qqq的数据库,并在数据库中创建了一个qqqtable,然后插入了三条数据,每条数据都是三个字段,结果是下面代码可以连接到数据库(不知道连接到哪里),但是不能执行查询操作(用控制台可以手动查询到这些数据)。 下面代码的输出是: Success. select failed

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;
	}
}
习惯就好zz 2017-10-17
  • 打赏
  • 举报
回复
引用 5 楼 sinat_27741463 的回复:
[quote=引用 4 楼 zc1239044730 的回复:] 数据库名字都不指定,你如何去操作数据呢?
这也是问题啊,我是试过指定名字的,但是连接后查询、插入等操作仍然不成功。 下面代码的基础是:我手动在本地创建好了个名为qqq的数据库,并在数据库中创建了一个qqqtable,然后插入了三条数据,每条数据都是三个字段,结果是下面代码可以连接到数据库(不知道连接到哪里),但是不能执行查询操作(用控制台可以手动查询到这些数据)。 下面代码的输出是: Success. select failed

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
zyww 2017-10-17
  • 打赏
  • 举报
回复
大神们能否提供一些这个问题的解决思路,或者是qt数据库连接更详细的资料,这个问题困扰我两天并且我也查询了很多资料,没有找到更有用的资料或者方法。
zyww 2017-10-17
  • 打赏
  • 举报
回复
引用 4 楼 zc1239044730 的回复:
数据库名字都不指定,你如何去操作数据呢?
补充,上面代码中sql查询语句select * from qqqtable最后那个分号忘打了,但是打不打都是同样的结果
zyww 2017-10-17
  • 打赏
  • 举报
回复
引用 4 楼 zc1239044730 的回复:
数据库名字都不指定,你如何去操作数据呢?
这也是问题啊,我是试过指定名字的,但是连接后查询、插入等操作仍然不成功。 下面代码的基础是:我手动在本地创建好了个名为qqq的数据库,并在数据库中创建了一个qqqtable,然后插入了三条数据,每条数据都是三个字段,结果是下面代码可以连接到数据库(不知道连接到哪里),但是不能执行查询操作(用控制台可以手动查询到这些数据)。 下面代码的输出是: Success. select failed

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";
		}
	}
}
9990002222 2017-10-17
  • 打赏
  • 举报
回复
数据库名字都不指定,你如何去操作数据呢?
习惯就好zz 2017-10-16
  • 打赏
  • 举报
回复
/* 名称:ConnectMySqlite
 * 功能:确认数据库连接
 * 输入:无
 * 返回:true连接成功,false连接失败
 */
bool MySql::ConnectMySqlite()
{
    database = QSqlDatabase::addDatabase("QSQLITE", mySqlConnectName);

    database.setDatabaseName(mySqlName);

    if(!database.open()) {
        qDebug()<<"SQLite connected failed.";
        return false;
    }
}
习惯就好zz 2017-10-16
  • 打赏
  • 举报
回复
sqlite里面有创建表吗? 没有表会不会连接失败?

16,240

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧