現在、データベースを使用してデータを保存するプロジェクトを行うことで、学習に取り組んでいます。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;
}
この方法では、「FATAL: ユーザー "janhettenkofer" のパスワード認証に失敗しました」というエラーが発生しました。
ここで説明されている方法で PostgreSQL の別のインストールを取り除きました: https://stackoverflow.com/a/20010057。2 番目の関数でこのエラーが発生しました (最初のエラー メッセージは変更されませんでした): "FATAL: database "mydb" does not exist QPSQL: Unable to connect"
上記のスレッドでは、最初のエラーを修正する別の方法が提案されましたが、ターミナルを開いて「which psql」と入力しても何も起こらず、「コマンドが見つかりません」というメッセージさえ表示されません。そして、エクスポート PATH に関するアドバイスを適用する方法がわかりません。Google は、私がそれを行うべきだと教えてくれるだけで、方法については教えてくれません。ターミナルは、私が使用することを学んでいる別のものです。
事前に端末の使用方法に関するアイデアやアドバイスをありがとうございます。
編集:
わかりました、psql を PATH に追加する方法を見つけました。走れるようになりwhich psql
ました。これは、私が使用している Postgres.app インストールを示しています。その後、ユーザー データベース データベースを作成しました。Qt またはターミナルを使用して、このデータベースに接続できます。ただし、他のデータベースを作成することはできません。私が理解しているように、あなたはそうしcreatedb mydb
ますCREATE DATABASE
。これを行った後も\list
、ユーザー データベース、postgres データベース、および template0 と template1 のみが表示されます。mydb はありません。