目前,我正在开展一个边做边学的项目,该项目应该使用数据库来保存数据。我正在使用 Qt C++ 并且我已经安装了 postgres.app。
我第一次尝试编写连接方法主要取自这个来源(http://www.youtube.com/watch?v=3XE2bKUAxfw),经过一些修改后看起来像这样:
int database::connect(QString servername, QString dbname){
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setConnectOptions();
QString dsn = QString("Driver={PostgreSQL};Server=%1;Port=5432;Database=%2;").arg(servername).arg(dbname);
db.setDatabaseName(dsn);
if (db.open()){
qDebug() << "Opened";
return 1;
db.close();
} else {
qDebug() << "Error = " << db.lastError().text();
return -1;
}
}
第一种方法产生错误:“无法连接到服务器:没有这样的文件或目录服务器是否在本地运行并接受 Unix 域套接字上的连接“/var/pgsql_socket/.s.PGSQL.5432”?QPSQL:无法连接"
在我无法解决这个问题之后,我决定从头开始这个方法。这是我在一些互联网研究和阅读 Qt 文档后得出的结论:
int database::nconnect(QString servername, QString dbname){
QSqlDatabase db;
db = (QSqlDatabase::addDatabase("QPSQL"));
db.setHostName(servername);
db.setDatabaseName(dbname);
db.setUserName("janhettenkofer");
db.setPassword("testpw");
bool connectioncheck = db.open("janhettenkofer","testpw");
if (connectioncheck == true){
qDebug() << "Connection to database established." << endl;
} else {
qDebug() << "Error for database " << db.databaseName() << " :" << db.lastError().text() << endl;
}
return connectioncheck;
}
此方法导致错误“致命:用户“janhettenkofer”的密码验证失败”
我用这里解释的方法摆脱了另一个 PostgreSQL 安装:https ://stackoverflow.com/a/20010057 。现在我用第二个函数得到这个错误(它没有改变第一个错误消息):“致命:数据库“mydb”不存在 QPSQL:无法连接”
在上面提到的线程中,提出了另一种修复第一个错误的方法,但是当我打开终端并输入“which psql”时什么也没发生,甚至没有显示“command not found”消息。而且我不知道如何应用有关导出路径的建议。谷歌只告诉我应该这样做,但不告诉我怎么做。终端是我刚刚学习使用的另一件事。
感谢您提前提供有关如何使用终端的任何想法或建议。
编辑:
好的,我发现了如何将 psql 添加到 PATH 中。现在我可以跑了which psql
。这指向我正在使用的 Postgres.app 安装。之后,我创建了用户数据库数据库。我可以使用 Qt 或终端连接到该数据库。但是我无法创建任何其他数据库。据我了解,你这样做createdb mydb
,然后CREATE DATABASE
。在我这样做之后\list
仍然只显示用户数据库、postgres 数据库和 template0 和 template1。没有mydb。