struct Person
{
int id;
string name;
int age;
string address;
double salary;
};
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 기능 |
//+------------------------------------------------------------------+
void OnStart()
{
int db;
string filename="company.sqlite";
//--- 열기
db=DatabaseOpen(filename, DATABASE_OPEN_READWRITE | DATABASE_OPEN_CREATE |DATABASE_OPEN_COMMON);
if(db==INVALID_HANDLE)
{
Print("DB: ", filename, " 코드와 함께 열기 실패 ", GetLastError());
return;
}
//--- 테이블 COMPANY가 존재하면 테이블을 놓습니다
if(DatabaseTableExists(db, "COMPANY"))
{
//--- 테이블 삭제
if(!DatabaseExecute(db, "DROP TABLE COMPANY"))
{
Print("코드가 있는 테이블 COMPANY 삭제 실패 ", GetLastError());
DatabaseClose(db);
return;
}
}
//--- 테이블 생성
if(!DatabaseExecute(db, "CREATE TABLE COMPANY("
"ID INT PRIMARY KEY NOT NULL,"
"NAME TEXT NOT NULL,"
"AGE INT NOT NULL,"
"ADDRESS CHAR(50),"
"SALARY REAL );"))
{
Print("DB: ", filename, " 코드로 테이블 생성 실패 ", GetLastError());
DatabaseClose(db);
return;
}
//--- 데이터 삽입
if(!DatabaseExecute(db, "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 25000.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 );"))
{
Print("DB: ", filename, " 코드로 삽입하는데 실패 ", GetLastError());
DatabaseClose(db);
return;
}
//--- 요청 준비
int request=DatabasePrepare(db, "SELECT * FROM COMPANY WHERE SALARY>15000");
if(request==INVALID_HANDLE)
{
Print("DB: ", filename, " 코드를 이용한 요청 실패 ", GetLastError());
DatabaseClose(db);
return;
}
//--- 기록 인쇄
Person person;
Print("급여 인원 > 15000:");
for(int i=0; DatabaseReadBind(request, person); i++)
Print(i, ": ", person.id, " ", person.name, " ", person.age, " ", person.address, " ", person.salary);
//--- 사용 후 요청 삭제
DatabaseFinalize(request);
Print("일부 통계:");
//--- 총 급여에 대한 새로운 요구를 준비
request=DatabasePrepare(db, "SELECT SUM(SALARY) FROM COMPANY");
if(request==INVALID_HANDLE)
{
Print("DB: ", filename, " 코드를 이용한 요청 실패 ", GetLastError());
DatabaseClose(db);
return;
}
while(DatabaseRead(request))
{
double total_salary;
DatabaseColumnDouble(request, 0, total_salary);
Print("총 급여=", total_salary);
}
//--- 사용 후 요청 삭제
DatabaseFinalize(request);
//--- 평균 급여에 대한 새로운 요구를 준비
request=DatabasePrepare(db, "SELECT AVG(SALARY) FROM COMPANY");
if(request==INVALID_HANDLE)
{
Print("DB: ", filename, " 코드를 이용한 요청 실패 ", GetLastError());
ResetLastError();
DatabaseClose(db);
return;
}
while(DatabaseRead(request))
{
double aver_salary;
DatabaseColumnDouble(request, 0, aver_salary);
Print("평균 급여=", aver_salary);
}
//--- 사용 후 요청 삭제
DatabaseFinalize(request);
//--- 데이터베이스 닫기
DatabaseClose(db);
}
//+-------------------------------------------------------------------
/*
Output:
Persons with salary > 15000:
0: 1 Paul 32 California 25000.0
1: 3 Teddy 23 Norway 20000.0
2: 4 Mark 25 Rich-Mond 65000.0
Some statistics:
Total salary=125000.0
Average salary=31250.0
*/
|