Qt
क्यूटी पर एसक्यूएल
खोज…
मूल कनेक्शन और क्वेरी
QSqlDatabase Class एक कनेक्शन के माध्यम से डेटाबेस तक पहुँचने के लिए एक इंटरफ़ेस प्रदान करता है। QSqlDatabase का एक उदाहरण कनेक्शन का प्रतिनिधित्व करता है। कनेक्शन समर्थित डेटाबेस ड्राइवरों में से एक के माध्यम से डेटाबेस तक पहुंच प्रदान करता है। जोड़ना सुनिश्चित करें
QT += SQL
.pro फ़ाइल में। एक परीक्षण डीबीबी नामक SQL DB को एक देश के साथ मान लें जो अगले कॉलम को दर्शाता है:
| country |
-----------
| USA |
TestDB से 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 :: तैयार () कॉल करने की आवश्यकता है।
MS SQL Server डेटाबेस कनेक्शन QODBC का उपयोग कर
QODBC के साथ डेटाबेस कनेक्शन खोलने की कोशिश करते समय कृपया सुनिश्चित करें
- आपके पास QODBC ड्राइवर उपलब्ध है
- आपके सर्वर में ODBC इंटरफ़ेस है और यह सक्षम है (यह आपके ODBC ड्राइवर प्रतिष्ठानों पर निर्भर करता है)
- साझा मेमोरी एक्सेस, टीसीपी / आईपी कनेक्शन या नामित पाइप कनेक्शन का उपयोग करें।
सभी कनेक्शनों को केवल QSqlDatabase :: setDatabaseName नाम से सेट करने के लिए डेटाबेसनाम की आवश्यकता होती है।
साझा मेमोरी एक्सेस का उपयोग करके कनेक्शन खोलें
काम करने के इस विकल्प के लिए आपको मशीन की मेमोरी तक पहुंच की आवश्यकता होगी और साझा मेमोरी को एक्सेस करने की अनुमति होनी चाहिए। साझा किए गए मेमोरी कनेक्शन का उपयोग करने के लिए यह एलपीजी सेट करने के लिए आवश्यक है: सर्वर स्ट्रिंग के सामने। SQL सर्वर मूल क्लाइंट 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");
}
नामांकित पाइप का उपयोग करके खुला कनेक्शन
इस विकल्प के लिए एक पूर्ण DSN होने के लिए आपके ODBC कनेक्शन की आवश्यकता होती है। सर्वर स्ट्रिंग को Windows Computername और SQL सर्वर के Instancename का उपयोग करके सेटअप किया जाता है। उदाहरण कनेक्शन SQL सर्वर मूल क्लाइंट 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");
}
टीसीपी / आईपी का उपयोग कर कनेक्शन खोलें
टीसीपी / आईपी कनेक्शन खोलने के लिए सर्वर को एक निश्चित पोर्ट पर कनेक्शन की अनुमति देने के लिए कॉन्फ़िगर किया जाना चाहिए, अन्यथा आपको वर्तमान में सक्रिय पोर्ट के लिए क्वेरी करनी होगी। इस उदाहरण में हमारे पास 5171 पर एक निश्चित पोर्ट है। आप 1 पर एक निश्चित पोर्ट पर कनेक्शन की अनुमति देने के लिए सर्वर स्थापित करने के लिए एक उदाहरण पा सकते हैं। टीसीपी / आईपी का उपयोग कर कनेक्शन खोलने के लिए सर्वर आईपी और पोर्ट का एक टपल का उपयोग करें:
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");
}