C++中對SQLite進行增刪改查

#include <iostream>
#include <sqlite3.h>// 創建數據庫連接
sqlite3* OpenDatabase(const char* dbFilePath) {sqlite3* db;// 打開數據庫if (sqlite3_open(dbFilePath, &db) != SQLITE_OK) {std::cerr << "Error opening database." << std::endl;return nullptr;}return db;
}// 關閉數據庫連接
void CloseDatabase(sqlite3* db) {sqlite3_close(db);
}// 創建表
void CreateTable(sqlite3* db) {const char* createTableSQL = "CREATE TABLE IF NOT EXISTS Users (Id INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT, Age INTEGER);";if (sqlite3_exec(db, createTableSQL, nullptr, nullptr, nullptr) != SQLITE_OK) {std::cerr << "Error creating table." << std::endl;} else {std::cout << "Table created or already exists." << std::endl;}
}// 插入數據
void InsertData(sqlite3* db, const char* name, int age) {const char* insertDataSQL = "INSERT INTO Users (Name, Age) VALUES (?, ?);";sqlite3_stmt* statement;if (sqlite3_prepare_v2(db, insertDataSQL, -1, &statement, nullptr) == SQLITE_OK) {// 綁定參數sqlite3_bind_text(statement, 1, name, -1, SQLITE_STATIC);sqlite3_bind_int(statement, 2, age);// 執行語句if (sqlite3_step(statement) != SQLITE_DONE) {std::cerr << "Error inserting data." << std::endl;} else {std::cout << "Data inserted." << std::endl;}// 釋放資源sqlite3_finalize(statement);}
}// 查詢數據
void QueryData(sqlite3* db) {const char* queryDataSQL = "SELECT * FROM Users;";sqlite3_stmt* statement;if (sqlite3_prepare_v2(db, queryDataSQL, -1, &statement, nullptr) == SQLITE_OK) {std::cout << "Id\tName\tAge" << std::endl;// 遍歷結果集while (sqlite3_step(statement) == SQLITE_ROW) {std::cout << sqlite3_column_int(statement, 0) << "\t" << sqlite3_column_text(statement, 1) << "\t" << sqlite3_column_int(statement, 2) << std::endl;}// 釋放資源sqlite3_finalize(statement);}
}// 更新數據
void UpdateData(sqlite3* db, int id, const char* name, int age) {const char* updateDataSQL = "UPDATE Users SET Name=?, Age=? WHERE Id=?;";sqlite3_stmt* statement;if (sqlite3_prepare_v2(db, updateDataSQL, -1, &statement, nullptr) == SQLITE_OK) {// 綁定參數sqlite3_bind_text(statement, 1, name, -1, SQLITE_STATIC);sqlite3_bind_int(statement, 2, age);sqlite3_bind_int(statement, 3, id);// 執行語句if (sqlite3_step(statement) != SQLITE_DONE) {std::cerr << "Error updating data." << std::endl;} else {std::cout << "Data updated." << std::endl;}// 釋放資源sqlite3_finalize(statement);}
}// 刪除數據
void DeleteData(sqlite3* db, int id) {const char* deleteDataSQL = "DELETE FROM Users WHERE Id=?;";sqlite3_stmt* statement;if (sqlite3_prepare_v2(db, deleteDataSQL, -1, &statement, nullptr) == SQLITE_OK) {// 綁定參數sqlite3_bind_int(statement, 1, id);// 執行語句if (sqlite3_step(statement) != SQLITE_DONE) {std::cerr << "Error deleting data." << std::endl;} else {std::cout << "Data deleted." << std::endl;}// 釋放資源sqlite3_finalize(statement);}
}int main() {// 指定數據庫文件路徑const char* dbFilePath = "sample.db";// 創建數據庫連接sqlite3* db = OpenDatabase(dbFilePath);if (db) {// 創建表CreateTable(db);// 插入數據InsertData(db, "John Doe", 30);// 查詢數據QueryData(db);// 更新數據UpdateData(db, 1, "Updated Name", 35);// 查詢更新后的數據QueryData(db);// 刪除數據DeleteData(db, 1);// 查詢刪除后的數據QueryData(db);// 關閉數據庫連接CloseDatabase(db);}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163799.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163799.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163799.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HTTP ERROR 403 No valid crumb was included in the request

1、報錯截圖&#xff1a; 2、產生原因&#xff1a; 開啟了csrf&#xff0c;即跨站請求偽造 3、新版本不支持頁面修改&#xff0c;故需要修改jenkins配置文件 3.1 進入編輯配置文件 vim /etc/sysconfig/jenkins 3.2 修改JENKINS_JAVA_OPTIONS&#xff0c;并保存修改 JENKI…

深度學習之四(循環神經網絡Recurrent Neural Networks,RNNs)

概念 循環神經網絡(Recurrent Neural Networks,RNNs)是一類專門用于處理序列數據的神經網絡,它在處理時考慮了序列數據的順序和上下文信息。RNNs 在自然語言處理、時間序列分析、語音識別等領域得到廣泛應用。 1. 基本結構: RNN 的基本結構包含一個或多個循環單元,每個…

Ubuntu 系統上使用 QQ 郵箱的 SMTP 服務器發送郵件,msmtp(已驗證)

安裝 msmtp sudo apt-get update sudo apt-get install msmtp2 .配置 msmtp nano ~/.msmtprcdefaults auth on tls on tls_starttls on tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile ~/.msmtp.logaccount qq host …

Lua腳本解決redis實現的分布式鎖多條命令原子性問題

線程1現在持有鎖之后&#xff0c;在執行業務邏輯過程中&#xff0c;他正準備刪除鎖&#xff0c;而且已經走到了條件判斷的過程中&#xff0c;比如他已經拿到了當前這把鎖確實是屬于他自己的&#xff0c;正準備刪除鎖&#xff0c;但是此時他的鎖到期了&#xff0c;那么此時線程2…

Android : ExpandableListView(折疊列表) +BaseExpandableListAdapter-簡單應用

示例圖&#xff1a; 實體類DemoData.java package com.example.myexpandablelistview.entity;public class DemoData {private String content;private int img;public DemoData(String content, int img) {this.content content;this.img img;}public String getContent()…

STM32——外部中斷

文章目錄 0.中斷關系映射1.使能 IO 口時鐘&#xff0c;初始化 IO 口為輸入2.設置 IO 口模式&#xff0c;觸發條件&#xff0c;開啟 SYSCFG 時鐘&#xff0c;設置 IO 口與中斷線的映射關系。3.配置NVIC優先級管理&#xff0c;并使能中斷4.編寫中斷服務函數。5.編寫中斷處理回調函…

springboot多數據源集成

springboot多數據源集成 1、添加依賴2、添加配置3、代碼使用4、動態切換數據庫 1、添加依賴 <!--多數據源--> <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version…

[個人筆記] Windows的IT運維筆記

IT技術 - 運維篇 第二章 Windows的IT運維筆記 IT技術 - 運維篇系列文章回顧一、Windows10專業版添加gpedit.msc二、海康威視前端頁面導出通道名稱參考鏈接 系列文章回顧 第一章 快速下載微軟評估版本鏡像的方法 一、Windows10專業版添加gpedit.msc 執行以下bat腳本 echo off…

Rust使用iced構建UI時,如何在界面顯示中文字符

注&#xff1a;此文適合于對rust有一些了解的朋友 iced是一個跨平臺的GUI庫&#xff0c;用于為rust語言程序構建UI界面。 iced的基本邏輯是&#xff1a; UI交互產生消息message&#xff0c;message傳遞給后臺的update&#xff0c;在這個函數中編寫邏輯&#xff0c;然后通過…

護法革命:CIMIVO+SOTUY洗前發膜讓發絲重獲“芯”生

愛美之心人皆有之,經常燙染或者是在太陽下暴曬,都會對發絲造成一定的傷害,一旦發絲受損,就會導致發芯內部角蛋白流失、化學鍵連接斷裂,進而出現各種發質問題。為此,日本知名化妝品集團NABOCUL旗下發芯修護引領品牌ENNEO創新研發兩大核心成分:CIMIVO、SOTUY,能夠從根源修護發芯內…

EXCEL小技巧

1、兩列文本合并顯示&#xff1a; CONCATENATE(B6,E6) &#xff08;如果顯示公式而非文本&#xff0c;就是公式輸錯了&#xff0c;比如后缺少空格&#xff09;

mac 終端配置

Mac iTerm2 配置 安裝 brew install iTerm2安裝完成之后&#xff0c;需要重新打開終端&#xff0c;既可以看見安裝 iTerm2 的效果。 iTerm2 美化 使用 oh-my-zsh 美化 iTerm2 終端 安裝 brew install wget sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/mast…

宇宙工具箱:辦公娛樂兩不誤堪稱手機的百寶箱

宇宙工具箱 宇宙工具箱&#xff0c;提供大量實用工具&#xff0c;多種類型盡在其中&#xff0c;支持圖片/視頻處理、計算、查詢、娛樂等多方內容&#xff0c;滿足用戶使用需求&#xff0c;超多工具直接使用。 獲取資源 詳細獲取地址請點擊 宇宙工具箱 功能特點 1、計算工具…

【硬核HeyGen平替】在window平臺上使用MyHeyGen

最近在研究HeyGen的平替開源項目&#xff0c;然后發現了MyHeyGen這個項目&#xff0c;但是文檔上面并沒有說明如果在window平臺上使用&#xff0c;考慮到非window平臺安裝顯卡驅動什么的比較繁瑣&#xff0c;所以嘗試硬著頭皮干... 前提 開源項目中所需的環境準備要先準備好 1…

測試15k薪資第1步 —— 自動化測試理論基礎

目錄 1、自動化測試定義 2、自動化測試分類&工具 3、未來發展趨勢 1.1、什么是自動化測試 自動化測試指的是利用軟件工具或腳本來執行測試任務&#xff0c;以替代手動測試過程的一種測試方法。它的主要目的是通過自動化執行、驗證和評估軟件應用的功能、穩定性、性能等方面…

Kotlin(十一) 標準函數with、run和apply

with with函數接收兩個參數&#xff1a;第一個參數可以是一個任意類型的對象&#xff0c;第二個參數是一個Lambda表達式。with函數會在Lambda表達式中提供第一個參數對象的上下文&#xff0c;并使用Lambda表達式中的最后一行代碼作為返回值返回。示例代碼如下&#xff1a; va…

python常用第三方模塊 --- Pyinstaller(把程序打包成可執行程序)

打包方法&#xff1a; 在cmd下進行 pyinstaller -F 路徑/程序文件名 注意&#xff1a;使用pyinstaller之前需要安裝 pip install pyinstaller

ELK架構

經典的ELK 經典的ELK主要是由Filebeat Logstash Elasticsearch Kibana組成&#xff0c;如下圖&#xff1a;&#xff08;早期的ELK只有Logstash Elasticsearch Kibana&#xff09; 此架構主要適用于數據量小的開發環境&#xff0c;存在數據丟失的危險。 整合消息隊列Ngin…

如何用網格交易做ETF套利

ETF套利是指利用ETF基金的交易機制&#xff0c;通過短期的買賣差價或組合投資來獲取利潤。 具體來說&#xff0c;ETF套利最常用的套利方法則是&#xff1a;價格套利和波動套利。 1. 價格套利&#xff1a;當ETF二級市場的價格與一級市場的凈值出現偏差時&#xff0c;投資者可以通…

【SwiftUI】7.預覽及其內部機制

上一篇講到了組件及組件化&#xff0c;從概念和優/缺點兩個方向說明了組件化的意義&#xff0c;更為重要的是&#xff0c;組件和組件化是一個在編程領域&#xff0c;放之四海皆可以的概念&#xff0c;理解和運用它是非常必要的&#xff0c;希望大家能掌握。今天我們介紹另一個特…