Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как подключиться к базе данных через qtSql?

Арсений Фильков Знаток (437), на голосовании 1 неделю назад
Как подключиться к базе данных через qtSql?
Пробовал много вариантов, вот один из них:

 #include  
#include
#include

int main(int argc, char* argv[])
{
QCoreApplication a(argc, argv);


QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

db.setHostName("sql8.freesqldatabase.com");
db.setDatabaseName("sql8691941");
db.setUserName("sql8691941");
db.setPassword("s6UGlAyxFN");
db.setPort(3306);

const bool ok = db.open();

if (ok)
{
qDebug()<<"OK!\n";
}
else
{
qDebug()<<"NOT OK!\n";
}


QSqlQuery query(db);

if (!query.exec("CREATE TABLE `sql8691941`.`test1` ( `id` INT NOT NULL , `price` INT NOT NULL ) ENGINE = InnoDB;"))
{
qDebug()< }

if (!query.exec("SELECT * FROM `test1`"))
{
qDebug()< }

qDebug()<<"42\n";

while (query.next())
{
const int id = query.value(0).toInt();
const int price = query.value(1).toInt();
qDebug() << id <<' '<< price<<'\n';
}

qDebug()<<"end\n";

return 0;
}
Подскажите как сделать чтобы я мог подключаться к ней и выполнять с ней операции
Голосование за лучший ответ
Павел Михаловский Просветленный (32436) 1 месяц назад
А что это за база?
Если SQLite, то это файл и хост не надо и порт не надо.

Что за ошибка выводится?
Арсений ФильковЗнаток (437) 1 месяц назад
Да SQLite. Терминал:
OK!

QSqlError("1", "Unable to execute statement", "unknown database `sql8691941`")

QSqlError("1", "Unable to execute statement", "no such table: test1")

42

end

"то это файл и хост" - файл, то есть бд имя? Можно подробнее что прописать пожалкйста
Павел Михаловский Просветленный (32436) Арсений Фильков, ещё вопрос, ты создал базу данных? Просто установить нельзя, её ещё нужно создать и создать в ней таблицы
Татьяна Просветленный (23245) 1 месяц назад
В твоем коде у тебя уже содержится код для работы с базой данных но чтобы он работал тебе нужно подключить библиотеки
 #include  
#include
#include
а также еще прописать путь для этих библиотек
Арсений ФильковЗнаток (437) 1 месяц назад
"а также еще прописать путь для этих библиотек" - а где это сделать?
Татьяна Просветленный (23245) Арсений Фильков, Для того чтобы использовать библиотеки QSqlDatabase, QSqlQuery и QSqlError в вашем проекте на C++, вам необходимо указать путь к ним в вашем проекте. Обычно это делается в файле проекта (например, в файле .pro для проектов Qt). Вы можете добавить путь к этим библиотекам в вашем файле .pro следующим образом:
 INCLUDEPATH += путь_к_Qt_библиотекам 
ТатьянаПросветленный (23245) 1 месяц назад
Где "путь_к_Qt_библиотекам" - это путь к папке, где находятся библиотеки Qt, содержащие необходимые вам классы. Например, если у вас установлен Qt в стандартной директории, то путь может выглядеть примерно так:
 INCLUDEPATH += C:/Qt/5.15.2/msvc2019_64/include/QtSql 
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (243442) 1 месяц назад
Надо пробовать прямые тесты:

 #include   
#include
#include

void setupDatabase() {
QSqlDatabase db = QSqlDatabase::database();
QSqlQuery query(db);
if (!query.exec("CREATE TABLE IF NOT EXISTS test1 (id INT PRIMARY KEY, price INT);")) {
qDebug()<< "Error creating table:" << query.lastError();
}
if (!query.exec("INSERT INTO test1 VALUES (1, 100);")) {
qDebug()<< "Error inserting data:" << query.lastError();
}
if (!query.exec("INSERT INTO test1 VALUES (2, 200);")) {
qDebug()<< "Error inserting data:" << query.lastError();
}
}

void selectFromTable() {
QSqlDatabase db = QSqlDatabase::database();
QSqlQuery query(db);
if (!query.exec("SELECT * FROM test1")) {
qDebug()<< "Error selecting data:" << query.lastError();
}
while (query.next()) {
const int id = query.value(0).toInt();
const int price = query.value(1).toInt();
qDebug() << id <<' '<< price;
}
}

int main(int argc, char* argv[])
{
QCoreApplication a(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("test.db");
const bool ok = db.open();
if (!ok) {
qDebug()<<"Failed to open database:" << db.lastError();
return 1;
}
setupDatabase();
selectFromTable();
return 0;
}
Арсений ФильковЗнаток (437) 1 месяц назад
Спасибо, но я имел ввиду почему не видит мой хост
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (243442) Арсений Фильков, во-первых: 2024-03-19 00:28:29.380954 - Произошла ошибка при выполнении запроса к https://fsql8.reesqldatabase.com : [Errno 11001] getaddrinfo failed во-вторых, надо изменить строку подключения на : QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
Похожие вопросы