본문 바로가기
Qt

[Qt] Sql 사용법(Table 생성, 검색, 저장)

by 목가 2016. 7. 31.
반응형

Qt 에서 Sql 을 연동한 후 사용법은 매우 간단하다.


먼저 데이터베이스를 생성해야 한다. 


아래 코드를 보면 QSqlDatabae 변수인 m_LocalDB 에 Database 를 추가한다. 

(Database 를 가져올 때도 마찬가지로 사용됨)

m_LocalDB = QSqlDatabase::addDatabase(sql, dbName);    // QSQLITE (SQL 타입)


그리고 Database 의 이름(경로)를 지정한다. 


준비는 끝났고, Database 를 open 해본다. 존재하면 열릴 것이고, 존재하지 않으면 열리지 않을 것이다. 


QSqlQuery query(m_LocalDB);        // DB 에 query 명령을 보내기위한 변수를 선언


query.exec("create table 이름" "(id integer primary key," "buildingname varchar(30)," "streetarea integer)");


위와 query 를 실행하면 table 이 정해진 이름으로 생성되고, id는 주키값을 갖는 칼럼, buildingname 은 30개까지 입력가능한 문자열, streetarea 는 정수값 칼럼이된다. 

주의할 점은 테이블 생성할대 괄호()와 ", 등을 잘 보고 넣어줘야한다. 에러가 나지 않고 정상동작하는 것처럼 보이지만 실제 값을 가져와보면 값이 안들어가거나 값이 없다. 



QString sql = "QSQLITE";

QString dbName = "LocalDB";
    m_LocalDB = QSqlDatabase::addDatabase(sql,dbName);

    m_LocalDB.setDatabaseName(DB_FILE_PATH); //path  넣어주면 
    if(!m_LocalDB.open())
    {
        qDebug()<<"local Database Setting Open failed!";

        QSqlDatabase::removeDatabase("LocalDB");

    }

    if(m_LocalDB.isValid())
    {
        qDebug()<<"Database is valid";
    }
    else
    {
        qDebug()<<"Database is not valid";
    }
    QSqlQuery query(m_LocalDB);

    query.exec("create table realestate"
              "(id integer primary key, "
              "buildingname varchar(30), "
              "streetarea integer, "
              "streetarea2 integer, "
               "depositmin integer, "
               "depositmax integer, "
               "maintanancecost integer, "
               "monthlyrentmin integer, "
               "monthlyrentmax integer, "
               "lessor varchar(30), "
               "tenant varchar(30), "
               "note varchar(300))");



위에 처럼 테이블을 생성했으면 값을 넣고 가져와야한다. 


데이터베이스 명령어를 조금 안다면 쉽게 이해하고 사용할 수 있다. 


테이블에 값을 넣을 때는 INSERT 명령어를 사용한다.


아래 Qt Documentation 에 나오는 설명처럼 query 명령어를 사용해서 값을 직접 넣거나, 변수를 통해서 넣을 수 있다. (위는 직접, 아래는 변수 or 직접할당된 곳에넣음)


테이블에 있는 값을 검색하고 싶을 때는 SELECT 명령어를 사용하면된다.

query.exec("select * from realestate");

위처럼 검색하면 realestate 라는 테이블에 있는 데이터를 전부 가져오는 것이다. 

그리고 가져온 값을 query.next() 함수를 통해서 한줄씩 가져올 수 있다. 

while(query.next())
    {
        qDebug() << query.value(0).toInt() << query.value(1).toString() << query.value(2).toInt() << query.value(3).toInt()
                 << query.value(4).toInt() << query.value(5).toInt() << query.value(6).toInt() << query.value(7).toInt()
                 << query.value(8).toInt() << query.value(9).toString() << query.value(10).toString() << query.value(11).toString();

        //검색한 내용... 끝까지 읽어드려 처리하는 부분

    }


반응형

'Qt' 카테고리의 다른 글

[Qt] QTableWidget  (1) 2016.08.01
[Qt] SELECT 명령어 사용 (WHERE)  (0) 2016.08.01
[Qt] 디자이너에서 탭 순서 바꾸기(change tab order)  (0) 2016.07.31
[Qt] Sql 연동하기  (0) 2016.07.29
[Qt] Dialog 종료  (0) 2016.07.29

댓글