메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Autoit sqlite 함수 사용 예제

데브카페

Autoit sqlite 함수 사용 예제

예제 실행 전 주의사항

  1. SQLite3.dll: 모든 예제를 실행하기 전에 SQLite3.dll 파일이 AutoIt 스크립트(.au3)와 같은 디렉토리 또는 시스템 PATH에 있는지 확인하세요.
  2. 파일 생성: 예제는 MyDatabase.db라는 SQLite 데이터베이스 파일을 생성합니다. 예제를 여러 번 실행하면 기존 데이터가 수정될 수 있습니다. 필요시 파일을 삭제하고 다시 실행하세요.
  3. 오류 처리: 위에 제시된 예제들은 간결성을 위해 최소한의 오류 처리를 포함하고 있습니다. 실제 애플리케이션에서는 _SQLite_ErrMsg()를 사용하여 더 상세한 오류 메시지를 사용자에게 제공하는 것이 좋습니다.
  4. _ArrayDisplay: _ArrayDisplay 함수를 사용하려면 #include <Array.au3>를 추가해야 합니다.

이 예제들이 AutoIt의 SQLite.au3 UDF를 이해하는 데 도움이 되기를 바랍니다.

데이터베이스 연결 및 관리 함수 예제

#include <SQLite.au3>

; _SQLite_Startup() 예제
If Not _SQLite_Startup() Then
    MsgBox(0, "오류", "SQLite.dll 로드 실패!")
    Exit
EndIf

; _SQLite_Open() 예제
Local $hDatabase = _SQLite_Open("MyDatabase.db")
If @error Then
    MsgBox(0, "오류", "데이터베이스 열기/생성 실패: " & _SQLite_ErrMsg(0))
    _SQLite_Shutdown()
    Exit
EndIf
MsgBox(0, "성공", "데이터베이스 'MyDatabase.db'가 열렸습니다.")

; 데이터베이스에 테이블 생성 (예제용)
Local $sSQL = "CREATE TABLE IF NOT EXISTS Users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)"
_SQLite_Exec($hDatabase, $sSQL)
If @error Then
    MsgBox(0, "오류", "테이블 생성 실패: " & _SQLite_ErrMsg($hDatabase))
Else
    MsgBox(0, "성공", "Users 테이블이 생성되었거나 이미 존재합니다.")
EndIf

; _SQLite_Close() 예제
_SQLite_Close($hDatabase)
If @error Then
    MsgBox(0, "오류", "데이터베이스 닫기 실패: " & _SQLite_ErrMsg($hDatabase))
Else
    MsgBox(0, "성공", "데이터베이스가 닫혔습니다.")
EndIf

; _SQLite_Shutdown() 예제
_SQLite_Shutdown()
MsgBox(0, "성공", "SQLite.dll이 언로드되었습니다.")

쿼리 실행 및 데이터 처리 함수 예제

#include <SQLite.au3>
#include <Array.au3> ; _ArrayDisplay를 위해

If Not _SQLite_Startup() Then Exit
Local $hDatabase = _SQLite_Open("MyDatabase.db")
If @error Then Exit

; 예제를 위해 데이터 삽입
_SQLite_Exec($hDatabase, "CREATE TABLE IF NOT EXISTS Users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)")
_SQLite_Exec($hDatabase, "INSERT INTO Users (name, age) VALUES ('Alice', 30)")
_SQLite_Exec($hDatabase, "INSERT INTO Users (name, age) VALUES ('Bob', 25)")
_SQLite_Exec($hDatabase, "INSERT INTO Users (name, age) VALUES ('Charlie', 35)")

; _SQLite_Exec() 예제 (데이터 업데이트)
Local $sSQL = "UPDATE Users SET age = 31 WHERE name = 'Alice'"
_SQLite_Exec($hDatabase, $sSQL)
If @error Then
    MsgBox(0, "오류", "데이터 업데이트 실패: " & _SQLite_ErrMsg($hDatabase))
Else
    MsgBox(0, "성공", "Alice의 나이가 업데이트되었습니다.")
EndIf

; _SQLite_Query(), _SQLite_FetchData(), _SQLite_FetchNames(), _SQLite_QueryFinalize() 예제
Local $hQuery = _SQLite_Query($hDatabase, "SELECT * FROM Users")
If Not @error Then
    Local $aNames = _SQLite_FetchNames($hQuery)
    If IsArray($aNames) Then
        _ArrayDisplay($aNames, "컬럼 이름")
    EndIf

    Local $aRow
    While 1
        $aRow = _SQLite_FetchData($hQuery)
        If @error Then ExitLoop ; 더 이상 데이터가 없거나 오류 발생 시
        If IsArray($aRow) Then
            _ArrayDisplay($aRow, "데이터 행")
        EndIf
    WEnd
    _SQLite_QueryFinalize($hQuery)
Else
    MsgBox(0, "오류", "쿼리 준비 실패: " & _SQLite_ErrMsg($hDatabase))
EndIf

; _SQLite_QuerySingleRow() 예제
Local $aSingleRow = _SQLite_QuerySingleRow($hDatabase, "SELECT name, age FROM Users WHERE id = 2")
If IsArray($aSingleRow) Then
    MsgBox(0, "단일 행", "ID 2번 사용자: " & $aSingleRow[0] & ", " & $aSingleRow[1] & "세")
Else
    MsgBox(0, "오류", "단일 행 쿼리 실패: " & _SQLite_ErrMsg($hDatabase))
EndIf

; _SQLite_GetTable() 예제
Local $aResultTable
_SQLite_GetTable($hDatabase, "SELECT * FROM Users", $aResultTable)
If IsArray($aResultTable) Then
    ; _SQLite_GetTable은 1차원 배열로 반환하며, 첫 행은 컬럼 수, 그 다음은 컬럼 이름, 그 다음은 데이터 순
    MsgBox(0, "GetTable 결과", "총 " & $aResultTable[0] & "개의 컬럼과 " & ($aResultTable[1] / $aResultTable[0] - 1) & "개의 행.")
    _ArrayDisplay($aResultTable, "GetTable Raw Data")
Else
    MsgBox(0, "오류", "GetTable 실패: " & _SQLite_ErrMsg($hDatabase))
EndIf


; _SQLite_GetTable2d() 예제
Local $aResult2d, $iRows, $iColumns
_SQLite_GetTable2d($hDatabase, "SELECT name, age FROM Users", $aResult2d, $iRows, $iColumns)
If IsArray($aResult2d) Then
    MsgBox(0, "GetTable2d 결과", "총 " & $iRows & "개의 행, " & $iColumns & "개의 컬럼.")
    _ArrayDisplay($aResult2d, "GetTable2d 결과")
Else
    MsgBox(0, "오류", "GetTable2d 실패: " & _SQLite_ErrMsg($hDatabase))
EndIf

; _SQLite_GetTableData2D() 예제
Local $aDataOnly
_SQLite_GetTableData2D($hDatabase, "SELECT name, age FROM Users WHERE age > 25", $aDataOnly)
If IsArray($aDataOnly) Then
    MsgBox(0, "GetTableData2D 결과", "25세 초과 사용자 데이터")
    _ArrayDisplay($aDataOnly, "GetTableData2D 결과 (데이터만)")
Else
    MsgBox(0, "오류", "GetTableData2D 실패: " & _SQLite_ErrMsg($hDatabase))
EndIf


_SQLite_Close($hDatabase)
_SQLite_Shutdown()

오류 및 상태 정보 함수 예제

#include <SQLite.au3>

If Not _SQLite_Startup() Then Exit
Local $hDatabase = _SQLite_Open("MyDatabase.db")
If @error Then Exit

; 예제를 위해 테이블 및 데이터 준비
_SQLite_Exec($hDatabase, "CREATE TABLE IF NOT EXISTS Products (id INTEGER PRIMARY KEY, name TEXT, price REAL)")
_SQLite_Exec($hDatabase, "INSERT INTO Products (name, price) VALUES ('Laptop', 1200.50)")
_SQLite_Exec($hDatabase, "INSERT INTO Products (name, price) VALUES ('Mouse', 25.99)")

; _SQLite_Changes() 예제
_SQLite_Exec($hDatabase, "UPDATE Products SET price = 1250.00 WHERE name = 'Laptop'")
MsgBox(0, "변경 사항", "최근 변경된 행 수: " & _SQLite_Changes($hDatabase))

; _SQLite_TotalChanges() 예제
_SQLite_Exec($hDatabase, "DELETE FROM Products WHERE name = 'Mouse'") ; 추가 변경
MsgBox(0, "총 변경 사항", "총 변경된 행 수: " & _SQLite_TotalChanges($hDatabase))

; _SQLite_ErrCode() 및 _SQLite_ErrMsg() 예제 (오류 유발)
_SQLite_Exec($hDatabase, "INSERT INTO Products (id, name, price) VALUES (1, 'Keyboard', 75.00)") ; PRIMARY KEY 충돌 유발
If @error Then
    MsgBox(0, "오류 정보", "오류 코드: " & _SQLite_ErrCode($hDatabase) & @CRLF & _
                           "오류 메시지: " & _SQLite_ErrMsg($hDatabase))
EndIf

; _SQLite_LastInsertRowID() 예제
_SQLite_Exec($hDatabase, "INSERT INTO Products (name, price) VALUES ('Monitor', 300.00)")
MsgBox(0, "마지막 삽입 ROWID", "마지막으로 삽입된 ROWID: " & _SQLite_LastInsertRowID($hDatabase))

_SQLite_Close($hDatabase)
_SQLite_Shutdown()

데이터 인코딩 및 이스케이프 함수 예제

  • 이 함수들은 주로 SQL 쿼리 내에 직접 변수 값을 삽입할 때 발생할 수 있는 SQL 인젝션 공격을 방지하고, BLOB(Binary Large Object) 데이터를 안전하게 저장하기 위해 사용됩니다.
#include <SQLite.au3>

If Not _SQLite_Startup() Then Exit
Local $hDatabase = _SQLite_Open("MyDatabase.db")
If @error Then Exit

_SQLite_Exec($hDatabase, "CREATE TABLE IF NOT EXISTS DataStore (id INTEGER PRIMARY KEY, text_data TEXT, binary_data BLOB)")

; _SQLite_Escape() 예제 (TEXT 데이터)
Local $sUserInput = "O'Malley's Bar" ; SQL 인젝션 위험 문자 포함
Local $sEscapedInput = _SQLite_Escape($sUserInput)
MsgBox(0, "_SQLite_Escape()", "원본: " & $sUserInput & @CRLF & "이스케이프: " & $sEscapedInput)
_SQLite_Exec($hDatabase, "INSERT INTO DataStore (text_data) VALUES ('" & $sEscapedInput & "')")

; _SQLite_Encode() 예제 (BLOB 데이터)
Local $sBinaryData = "이것은 이진 데이터입니다! 🚀" ; 임의의 이진 데이터 (AutoIt에서는 문자열로 처리)
Local $sEncodedBinary = _SQLite_Encode($sBinaryData)
MsgBox(0, "_SQLite_Encode()", "원본: " & $sBinaryData & @CRLF & "인코딩: " & $sEncodedBinary)
_SQLite_Exec($hDatabase, "INSERT INTO DataStore (binary_data) VALUES (" & $sEncodedBinary & ")")

; _SQLite_FastEncode() 및 _SQLite_FastEscape()는 _SQLite_Encode() 및 _SQLite_Escape()의 최적화된 버전입니다.
; 특정 상황에서 성능이 중요할 때 사용되지만, 기능적인 차이는 크게 없습니다.
; 사용법은 동일합니다.

_SQLite_Close($hDatabase)
_SQLite_Shutdown()

기타 유틸리티 함수 예제

#include <SQLite.au3>
#include <Array.au3> ; _ArrayDisplay를 위해

If Not _SQLite_Startup() Then Exit
Local $hDatabase = _SQLite_Open("MyDatabase.db")
If @error Then Exit

; _SQLite_LibVersion() 예제
MsgBox(0, "SQLite 버전", "현재 SQLite 라이브러리 버전: " & _SQLite_LibVersion())

; _SQLite_Display2DResult() 예제
; 예제를 위해 2차원 배열 생성
Local $aData[3][2] = [["Name", "Age"], ["Alice", 30], ["Bob", 25]]
_SQLite_Display2DResult($aData, "사용자 정보") ; GUI로 표시

; _SQLite_SafeMode() 예제 (일반적으로 변경할 필요는 없습니다)
MsgBox(0, "안전 모드", "현재 안전 모드 설정: " & _SQLite_SafeMode())
_SQLite_SafeMode(True) ; 안전 모드 활성화 (기본값)
MsgBox(0, "안전 모드 변경", "안전 모드 활성화: " & _SQLite_SafeMode())

; _SQLite_SetTimeout() 예제
; 데이터베이스가 잠겨 있을 때 쿼리가 대기할 시간을 설정합니다.
_SQLite_SetTimeout($hDatabase, 5000) ; 5초 대기
MsgBox(0, "타임아웃 설정", "쿼리 타임아웃 5000ms로 설정되었습니다.")

; _SQLite_SQLiteExe() 예제
; 이 함수는 sqlite3.exe가 시스템 PATH에 있거나 스크립트 실행 경로에 있어야 합니다.
; 이 함수는 잘 사용되지 않으며, AutoIt 내에서 직접 SQLite 함수를 사용하는 것이 일반적입니다.
; MsgBox(0, "_SQLite_SQLiteExe()", _SQLite_SQLiteExe(".databases")) ; 실행 가능한 경우 데이터베이스 목록 출력

_SQLite_Close($hDatabase)
_SQLite_Shutdown()

Comments