#ifndef INJURYDATABASE_H
#define INJURYDATABASE_H

#include <QtSql>
#include <QSqlDatabase>
#include <QWidget>
#include <QSqlQuery>
#include <QString>
#include <QSqlRecord>
#include <QDebug>
#include <QSqlError>


using namespace std;


struct Injury
{
    QString id;
    int rank;
    double lon;
    double lat;
    int flag;
};

class InjuryDatabase
{
    // Q_OBJECT宏用于提供Qt信号槽和元对象系统服务
    // 它必须限定为私有访问权限
    //Q_OBJECT

public:
    static InjuryDatabase *getInstance();
    InjuryDatabase();
    ~InjuryDatabase();

    //打开
    bool open(const QString &dbName,const QString &userName = QString(),const QString &passwd = QString());
    //添加数据记录
    bool add(const Injury &data);
    //查询所有数据
    bool select_all(QList<Injury> &result);
    //删除伤员记录
    bool deleteById(const QString &id);

    Injury data;
    //返回有效信息
    void ReturnInfo(QList<Injury> data);


private:
    //查询有效数据
    bool select_valid(const QString &tableName,QList<Injury> &result);
    //关闭
    void close();
    //开始添加字段
    void beginAddFiled(const QString &tableName);

    //添加字段
    void addFiled(const QString &filedName);

    //结束添加字段
    void endAddFiled();

    //开始添加行
    void beginAddRow();

    //添加字段值
    void addValue(const QVariant &value);

    //结束添加行
    void endAddRow();

    //执行
    bool exec(const QString &sql);


private:
    //数据库
    QSqlDatabase m_sqlDb;

    //表名
    QString m_tableName;

    //字段名
    QStringList m_fieldName;

    //头sql
    QString m_headerSql;

    //值sql
    QString m_valueSql;

    //已添加row数
    int m_fieldAdd = 0;

};



#endif // INJURYDATABASE_H
