Witam,
chciałbym poradzić się Was w sprawie poniższego kodu - **co można/należy poprawić/zmienić ? **
Mam klasę DataBaseOperation, która odpowiedzialna jest za komunikację z bazą danych..
class DataBaseOperation;
//metoda wyciągająca dane produktow o konkretnej wartosci
QList<QStringList> DataBaseOperation::getValue(QString value)
{
QString query = QString("SELECT * FROM Product WHERE value= ?");
QStringList arg;
arg.append(value);
QList<QStringList> result = this->Select(query, arg);
return result;
}
// ogólna metoda wykorzystywana do wykonywania select'ów do bazy danych..
QList<QStringList> DataBaseOperation::Select(QString query, QStringList param)
{
QSqlQuery Query;
Query.prepare(query);
for (int i=0; i<param.count(); i++)
Query.bindValue(i,param[i]);
if (!Query.exec())
qDebug() << Query.lastError().text();
QList<QStringList> tab;
if (Query.size()>0)
{
while (Query.next())
{
QStringList record;
for(int j=0;j< Query.record().count();j++)
record << Query.value(j).toString();
tab.append(record);
}
}
else
{
qDebug() << "error";
}
return list;
}
Klasa ValuenWidget wyświetlająca dane osoby np. w QEditLine'ach..
class ValueWidget;
DataBaseOperation db;
QList<QStringList> records2 = db.getValue(QString value);
A teraz jeszcze konkretne pytania od mnie:
- Wydaje mi się, że tutaj powinno się raczej stosować typ INT, bo tego typu jest kolumna w bazie, ale z drugiej strony wszędzie trzeba operować na stringach więc i tak trzeba rzutować..
QList<QStringList> DataBaseOperation::getValue(QString value)
- Czy w takich sytuacja, w c++ argumenty funkcji powinno przekazywać się przez referencje ? (deklaracja funkcji z &query, &arg ) ?
QList<QStringList> result = this->Select(query, arg);
- Jak zbudowalibyście metodę wyciągającą dane z bazy danych - chodzi konkretnie o select'a ?
QList<QStringList> DataBaseOperation::Select(QString query, QStringList param)
Ja zdecydowałem się wykorzystać typ QList<QStringList>, gdzie QStringList reprezentują kolejne wiersze, natomiast QList jest kontenerem (tabelą) dla tych wierszy.. Zdaje to egzamin, ale coś nie 'pasi' mi przy przekazywaniu tego typu między klasami/metodami.. bo praktycznie jest on przekazywany przez wartość.. (btw. czy w tym przypadku to jest złe ?). Chciałem wykorzystać tutaj wskaźniki, ale zauważyłem że byłby problem z prawidłowym zwalnianiem pamięci.. (przynajmniej jeśli zachowałbym kod w takiej postaci jak jest..)
podsumowując: szukam podpowiedzi mających na celu wzniesienie tego kod na wyższy (odpowiedni) poziom...