SQLite 소개
SQLite는 경량의 자체 포함형 SQL 데이터베이스 엔진입니다. 서버가 필요 없으며, 데이터베이스가 하나의 파일로 저장됩니다. SQLite는 임베디드 시스템 및 소형 애플리케이션에 적합합니다.
SQLite 설치 및 설정
SQLite 설치
리눅스 환경에서 SQLite를 설치하려면 다음 명령어를 사용합니다.
sudo apt-get install sqlite3 libsqlite3-dev
SQLite와 C++ 연동
SQLite와 C++을 연동하여 데이터베이스를 사용하려면 sqlite3.h
헤더 파일과 libsqlite3
라이브러리를 사용해야 합니다.
1. 데이터베이스 연결 및 테이블 생성
다음 코드는 SQLite 데이터베이스에 연결하고, 테이블을 생성하는 예제입니다.
sqlite_example.cpp
#include <iostream>
#include <sqlite3.h>
static int callback(void* NotUsed, int argc, char** argv, char** azColName) {
for (int i = 0; i < argc; i++) {
std::cout << azColName[i] << ": " << argv[i] ? argv[i] : "NULL";
}
std::cout << std::endl;
return 0;
}
int main() {
sqlite3* db;
char* zErrMsg = 0;
int rc;
// 데이터베이스 열기
rc = sqlite3_open("test.db", &db);
if (rc) {
std::cerr << "Can't open database: " << sqlite3_errmsg(db) << std::endl;
return(0);
} else {
std::cout << "Opened database successfully" << std::endl;
}
// SQL 실행
const char* sql = "CREATE TABLE COMPANY(" \
"ID INT PRIMARY KEY NOT NULL," \
"NAME TEXT NOT NULL," \
"AGE INT NOT NULL," \
"ADDRESS CHAR(50)," \
"SALARY REAL );";
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if (rc != SQLITE_OK) {
std::cerr << "SQL error: " << zErrMsg << std::endl;
sqlite3_free(zErrMsg);
} else {
std::cout << "Table created successfully" << std::endl;
}
// 데이터베이스 닫기
sqlite3_close(db);
return 0;
}
이 코드는 SQLite 데이터베이스 파일 test.db
를 열고, COMPANY
테이블을 생성합니다.
2. 데이터 삽입 및 조회
다음 코드는 COMPANY
테이블에 데이터를 삽입하고 조회하는 예제입니다.
sqlite_example.cpp (계속)
int main() {
sqlite3* db;
char* zErrMsg = 0;
int rc;
// 데이터베이스 열기
rc = sqlite3_open("test.db", &db);
if (rc) {
std::cerr << "Can't open database: " << sqlite3_errmsg(db) << std::endl;
return(0);
} else {
std::cout << "Opened database successfully" << std::endl;
}
// 데이터 삽입
const char* sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
"VALUES (1, 'Paul', 32, 'California', 20000.00 ); " \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
"VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); " \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
"VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );" \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
"VALUES (4, 'Mark', 25, 'Rich-Mond', 65000.00 );";
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if (rc != SQLITE_OK) {
std::cerr << "SQL error: " << zErrMsg << std::endl;
sqlite3_free(zErrMsg);
} else {
std::cout << "Records created successfully" << std::endl;
}
// 데이터 조회
sql = "SELECT * from COMPANY";
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if (rc != SQLITE_OK) {
std::cerr << "SQL error: " << zErrMsg << std::endl;
sqlite3_free(zErrMsg);
} else {
std::cout << "Operation done successfully" << std::endl;
}
// 데이터베이스 닫기
sqlite3_close(db);
return 0;
}
이 코드는 COMPANY
테이블에 데이터를 삽입하고, 모든 레코드를 조회하여 출력합니다.
MySQL 소개
MySQL은 널리 사용되는 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)입니다. 대규모 데이터베이스 애플리케이션에 적합합니다.
MySQL 설치 및 설정
MySQL 설치
리눅스 환경에서 MySQL을 설치하려면 다음 명령어를 사용합니다.
sudo apt-get install mysql-server libmysqlclient-dev
MySQL 설정
MySQL 서버를 설치한 후, MySQL 서비스가 실행 중인지 확인합니다.
sudo systemctl start mysql
sudo systemctl enable mysql
MySQL 서버에 접속하여 데이터베이스와 사용자 계정을 생성합니다.
sudo mysql -u root -p
CREATE DATABASE testdb;
CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON testdb.* TO 'testuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
MySQL과 C++ 연동
MySQL과 C++을 연동하기 위해 mysql.h
헤더 파일과 libmysqlclient
라이브러리를 사용해야 합니다.
1. 데이터베이스 연결 및 테이블 생성
다음 코드는 MySQL 데이터베이스에 연결하고, 테이블을 생성하는 예제입니다.
mysql_example.cpp
#include <mysql/mysql.h>
#include <iostream>
int main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
const char *server = "localhost";
const char *user = "testuser";
const char *password = "password"; /* set me first */
const char *database = "testdb";
conn = mysql_init(NULL);
// 데이터베이스 연결
if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) {
std::cerr << "mysql_real_connect() failed\n";
mysql_close(conn);
return 1;
}
// SQL 실행
if (mysql_query(conn, "CREATE TABLE IF NOT EXISTS COMPANY (ID INT PRIMARY KEY, NAME TEXT, AGE INT, ADDRESS CHAR(50), SALARY REAL)")) {
std::cerr << "CREATE TABLE failed. Error: " << mysql_error(conn) << std::endl;
mysql_close(conn);
return 1;
}
std::cout << "Table created successfully" << std::endl;
// 데이터베이스 닫기
mysql_close(conn);
return 0;
}
이 코드는 MySQL 데이터베이스 testdb
에 연결하고, COMPANY
테이블을 생성합니다.
2. 데이터 삽입 및 조회
다음 코드는 COMPANY
테이블에 데이터를 삽입하고 조회하는 예제입니다.
mysql_example.cpp (계속)
int main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
const char *server = "localhost";
const char *user = "testuser";
const char *password = "password"; /* set me first */
const char *database = "testdb";
conn = mysql_init(NULL);
// 데이터베이스 연결
if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) {
std::cerr << "mysql_real_connect() failed\n";
mysql_close(conn);
return 1;
}
// SQL 실행 - 테이블 생성
if (mysql_query(conn, "CREATE TABLE IF NOT EXISTS COMPANY (ID INT PRIMARY KEY, NAME TEXT, AGE INT, ADDRESS CHAR(50), SALARY REAL)")) {
std::cerr << "CREATE TABLE failed. Error: " << mysql_error(conn) << std::endl;
mysql_close(conn);
return 1;
}
std::cout << "Table created successfully" << std::endl;
// 데이터 삽입
if (mysql_query(conn, "INSERT INTO
COMPANY (ID, NAME, AGE, ADDRESS, SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00)")) {
std::cerr << "INSERT failed. Error: " << mysql_error(conn) << std::endl;
mysql_close(conn);
return 1;
}
if (mysql_query(conn, "INSERT INTO COMPANY (ID, NAME, AGE, ADDRESS, SALARY) VALUES (2, 'Allen', 25, 'Texas', 15000.00)")) {
std::cerr << "INSERT failed. Error: " << mysql_error(conn) << std::endl;
mysql_close(conn);
return 1;
}
std::cout << "Records inserted successfully" << std::endl;
// 데이터 조회
if (mysql_query(conn, "SELECT * FROM COMPANY")) {
std::cerr << "SELECT failed. Error: " << mysql_error(conn) << std::endl;
mysql_close(conn);
return 1;
}
res = mysql_store_result(conn);
if (res == NULL) {
std::cerr << "mysql_store_result() failed. Error: " << mysql_error(conn) << std::endl;
mysql_close(conn);
return 1;
}
int num_fields = mysql_num_fields(res);
while ((row = mysql_fetch_row(res))) {
for (int i = 0; i < num_fields; i++) {
std::cout << (row[i] ? row[i] : "NULL") << " ";
}
std::cout << std::endl;
}
// 결과 해제 및 데이터베이스 닫기
mysql_free_result(res);
mysql_close(conn);
return 0;
}
이 코드는 COMPANY
테이블에 데이터를 삽입하고, 모든 레코드를 조회하여 출력합니다.
빌드 및 실행
1. SQLite 예제 빌드 및 실행
g++ sqlite_example.cpp -o sqlite_example -lsqlite3
./sqlite_example
2. MySQL 예제 빌드 및 실행
g++ mysql_example.cpp -o mysql_example `mysql_config --cflags --libs`
./mysql_example
이제 SQLite와 MySQL을 사용하여 데이터베이스 연동을 구현하고, 데이터를 삽입하고 조회하는 예제를 실행할 수 있습니다.
이제 27일차의 학습을 마쳤습니다. SQLite와 MySQL을 사용하여 C++ 애플리케이션에서 데이터베이스를 연동하고 사용하는 방법을 학습하고 실습해보았습니다.
질문이나 피드백이 있으면 언제든지 댓글로 남겨 주세요. 내일은 "C++로 게임 개발 (SFML, SDL)"에 대해 학습하겠습니다.
'-----ETC----- > C++ 고급 프로그래밍과 응용 프로젝트 시리즈' 카테고리의 다른 글
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 28: C++로 게임 개발 (SFML, SDL) (0) | 2024.08.01 |
---|---|
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 26: C++로 네트워크 프로그래밍 (소켓 프로그래밍) (0) | 2024.08.01 |
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 24: gRPC를 이용한 분산 시스템 (0) | 2024.08.01 |
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 25: CMake를 이용한 빌드 시스템 관리 (0) | 2024.08.01 |
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 22: Boost 라이브러리 소개 및 활용 (0) | 2024.08.01 |