2

Qt を使用してデータベースに接続しています (これまでのところ PostgreSQL と mySQL を使用しています)。ポートの動作について少し混乱しています。それが違いを生む場合、私はUbuntuを使用しています。

ここのドキュメントによると: http://doc.qt.nokia.com/4.8-snapshot/qsqldatabase.html#setPortポートのデフォルト値はありません。ただし、設定で実際にポートを設定していないことに気付きましたが、問題なく接続しています。

だから私はそれを次のように設定しました:

QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setHostName("localhost");
db.setDatabaseName("mydb");
db.setUserName("name");
db.setPassword("pass");

どちらが機能しますか(mySQLドライバーでも試しました)

これを行う場合にも機能します:db.setPort(-1);または、デフォルトのポートを使用して期待するとおり:db.setPort(5432);

ただし、他のポートは機能しませんが、これは予想どおりです。したがって、デフォルトのポート値がなく、-1 が明らかに有効なポートではないと言われている場合、どのように機能しますか?

4

1 に答える 1

2

Qt自体はデフォルトのポート値を提供しない場合がありますが、個々のドライバーは提供します。openQt経由の場合open、ドライバー固有のコードのを呼び出すだけです。

たとえば、Postgressドライバーコードには次のopen関数が含まれています。

bool QPSQLDriver::open(const QString & db, const QString & user,
  const QString & password, const QString & host,
  int port, const QString& connOpts)
{
  if (isOpen()) close();

  QString conn;

  if (!host.isEmpty())
    conn.append(QLatin1String("host=")).append(qQuote(host));
  :
  if (port != -1)
    conn.append(QLatin1String(" port=")).append(qQuote(QString::number(port)));
  :
  d->connection = PQconnectdb(conn.toLocal8Bit().constData());
  :
  return true;
}

同様に、MySQLのドライバーコード(port > -1) ? port : 0はポートパラメーターとしてに渡されます。mysql_real_connect()つまり、の値-1はに変換され0ます。そして、MySQLコーダーが言うように、それはmysql_real_connect()デフォルトのポートを使用するように通知します。

つまり、ポートはQTの一般的なデフォルトから-1、特定のドライバーが適切なデフォルトとして必要とするもの(MySQLの場合は3306、DB2の場合は50000(または60000)など)に変換されます。

設定するとそのままドライバーに渡されます。

于 2012-07-27T08:35:41.567 に答える