다른 명령
편집 요약 없음 |
|||
| 47번째 줄: | 47번째 줄: | ||
_SQLite_Shutdown() | _SQLite_Shutdown() | ||
MsgBox(0, "성공", "SQLite.dll이 언로드되었습니다.") | MsgBox(0, "성공", "SQLite.dll이 언로드되었습니다.") | ||
</source> | |||
쿼리 실행 및 데이터 처리 함수 예제 | === 쿼리 실행 및 데이터 처리 함수 예제 === | ||
<source lang=autoit> | |||
#include <SQLite.au3> | #include <SQLite.au3> | ||
#include <Array.au3> ; _ArrayDisplay를 위해 | #include <Array.au3> ; _ArrayDisplay를 위해 | ||
2025년 7월 25일 (금) 19:22 기준 최신판
Autoit sqlite 함수 사용 예제
예제 실행 전 주의사항
- SQLite3.dll: 모든 예제를 실행하기 전에 SQLite3.dll 파일이 AutoIt 스크립트(.au3)와 같은 디렉토리 또는 시스템 PATH에 있는지 확인하세요.
- 파일 생성: 예제는 MyDatabase.db라는 SQLite 데이터베이스 파일을 생성합니다. 예제를 여러 번 실행하면 기존 데이터가 수정될 수 있습니다. 필요시 파일을 삭제하고 다시 실행하세요.
- 오류 처리: 위에 제시된 예제들은 간결성을 위해 최소한의 오류 처리를 포함하고 있습니다. 실제 애플리케이션에서는 _SQLite_ErrMsg()를 사용하여 더 상세한 오류 메시지를 사용자에게 제공하는 것이 좋습니다.
- _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()