Qt
SQL on Qt
수색…
기본 연결 및 쿼리
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");
}