수색…


기본 연결 및 쿼리

QSqlDatabase 클래스는 연결을 통해 데이터베이스에 액세스하기위한 인터페이스를 제공합니다. QSqlDatabase의 인스턴스는 연결을 나타냅니다. 연결은 지원되는 데이터베이스 드라이버 중 하나를 통해 데이터베이스에 대한 액세스를 제공합니다. 추가해야 함

QT += SQL 

.pro 파일에서. testDB라는 이름의 SQL DB에 다음 열을 연결하는 countryTable이 있다고 가정합니다.

| country |
-----------
| USA     |

QueryDB에서 SQL 데이터를 쿼리하고 가져 오기 위해서는 :

#include <QtGui>
#include <QtSql>
 
int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL"); // Will use the driver referred to by "QPSQL" (PostgreSQL Driver) 
    db.setHostName("TestHost");
    db.setDatabaseName("TestDB");
    db.setUserName("Foo");
    db.setPassword("FooPass");
    
    bool ok = db.open();
    if(ok)
    {
        QSqlQuery query("SELECT country FROM countryTable");
        while (query.next())
        {
          QString country = query.value(0).toString();
          qWarning() << country; // Prints "USA"
        }
    }

    return app.exec();
}

Qt SQL 쿼리 매개 변수

SQL 쿼리를 실제 값과 분리하는 것이 편리한 경우가 많습니다. 이 작업은 자리 표시자를 사용하여 수행 할 수 있습니다. Qt는 명명 된 바인딩과 위치 바인딩이라는 두 가지 자리 표시 자 구문을 지원합니다.

명명 된 바인딩 :

QSqlQuery query;
query.prepare("INSERT INTO employee (id, name, salary) VALUES (:id, :name, :salary)");
query.bindValue(":id", 1001);
query.bindValue(":name", "Thad Beaumont");
query.bindValue(":salary", 65000);
query.exec();

위치 바인딩 :

QSqlQuery query;
query.prepare("INSERT INTO employee (id, name, salary) VALUES (?, ?, ?)");
query.addBindValue(1001);
query.addBindValue("Thad Beaumont");
query.addBindValue(65000);
query.exec();

bindValue() 또는 addBindValue() 를 호출하기 전에 QSqlQuery :: prepare ()를 한 번 호출해야합니다.

QODBC를 사용하는 MS SQL Server 데이터베이스 연결

QODBC로 데이터베이스 연결을 열려고 할 때

  • QODBC 드라이버를 사용할 수 있습니다.
  • 서버에 ODBC 인터페이스가 있고 활성화되어 있습니다 (ODBC 드라이버 설치에 따라 다름)
  • 공유 메모리 액세스, TCP / IP 연결 또는 명명 된 파이프 연결을 사용하십시오.

모든 연결은 QSqlDatabase :: setDatabaseName을 호출하여 DatabaseName 만 설정해야합니다.


공유 메모리 액세스를 사용하는 개방형 연결

이 옵션을 사용하려면 컴퓨터의 메모리에 액세스해야하며 공유 메모리에 액세스 할 수있는 권한이 있어야합니다. 공유 메모리 연결을 사용하려면 서버 문자열 앞에 lpc :를 설정해야합니다. SQL Server Native Client 11을 사용하는 연결은 다음 단계를 사용하여 수행됩니다.

QString connectString = "Driver={SQL Server Native Client 11.0};";                     // Driver is now {SQL Server Native Client 11.0}
connectString.append("Server=lpc:"+QHostInfo::localHostName()+"\\SQLINSTANCENAME;");   // Hostname,SQL-Server Instance
connectString.append("Database=SQLDBSCHEMA;");  // Schema
connectString.append("Uid=SQLUSER;");           // User
connectString.append("Pwd=SQLPASS;");           // Pass
db.setDatabaseName(connectString);

if(db.open())
{
    ui->statusBar->showMessage("Connected");
}
else
{
    ui->statusBar->showMessage("Not Connected");
}

명명 된 파이프를 사용하여 열기 연결

이 옵션을 사용하려면 ODBC 연결에 전체 DSN이 있어야합니다. 서버 문자열은 SQL Server의 Windows Computername과 Instancename을 사용하여 설정됩니다. 예제 연결은 SQL Server Native Client 10.0을 사용하여 열립니다.

QString connectString = "Driver={SQL Server Native Client 10.0};"; // Driver can also be {SQL Server Native Client 11.0}
connectString.append("Server=SERVERHOSTNAME\\SQLINSTANCENAME;");   // Hostname,SQL-Server Instance
connectString.append("Database=SQLDBSCHEMA;");  // Schema
connectString.append("Uid=SQLUSER;");           // User
connectString.append("Pwd=SQLPASS;");           // Pass
db.setDatabaseName(connectString);

if(db.open())
{
    ui->statusBar->showMessage("Connected");
}
else
{
    ui->statusBar->showMessage("Not Connected");
}

TCP / IP를 사용하여 열린 연결

TCP / IP 연결을 열려면 고정 포트에서 연결을 허용하도록 서버를 구성해야합니다. 그렇지 않으면 먼저 현재 활성 포트를 쿼리해야합니다. 이 예에서는 5171에 고정 포트가 있습니다. 고정 포트에서 1의 연결을 허용하도록 서버를 설정하는 예제를 찾을 수 있습니다. TCP / IP를 사용하는 연결을 열려면 서버와 포트의 튜플을 사용하십시오.

QString connectString = "Driver={SQL Server};"; // Driver is now {SQL Server}
connectString.append("Server=10.1.1.15,5171;"); // IP,Port
connectString.append("Database=SQLDBSCHEMA;");  // Schema
connectString.append("Uid=SQLUSER;");           // User
connectString.append("Pwd=SQLPASS;");           // Pass
db.setDatabaseName(connectString);

if(db.open())
{
    ui->statusBar->showMessage("Connected");
}
else
{
    ui->statusBar->showMessage("Not Connected");
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow