# Cpp11Sqlite **Repository Path**: cpplibs/Cpp11Sqlite ## Basic Information - **Project Name**: Cpp11Sqlite - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-09-30 - **Last Updated**: 2024-09-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Cpp11Sqlite 用C++ 11 封装sqlite的C接口。封装的接口简洁、易用,并支持prepared statement以及批量插入。 # 使用例子 ## 没有返回数据的语句 ### 不影响数据集的语句 #### 表操作语句 ```cpp SqliteDB db("test.db"); int ret = db.execute("drop table if exists student"); if( ret != SQLITE_OK ) { std::cout<<"fail to drop table "< 对应sql语法: insert into student(id, name, score) values('001', 'aa', 81),('002', 'bb', 82)('003', 'cc', 83),('004', 'dd', 84); ```cpp SqliteDB db("test_many.db"); std::vector> vec; vec.emplace_back(std::make_tuple(std::string("001"), std::string("aa"), 81)); vec.emplace_back(std::make_tuple(std::string("002"), std::string("bb"), 82)); vec.emplace_back(std::make_tuple(std::string("003"), std::string("cc"), 83)); vec.emplace_back(std::make_tuple(std::string("004"), std::string("dd"), 84)); string sql = "insert into student(id, name, score) "; ret = db.executemany(sql, vec); if( ret != SQLITE_OK ) { std::cout<<"fail to insert many "< 对应sql语法: insert into student(id, name, score) select '005', 'ee', 85 union all select '006', 'ff', 86 union all select '007', 'gg', 87 ```cpp SqliteDB db("test_many.db"); std::vector> vec; vec.emplace_back(std::make_tuple(std::string("005"), std::string("ee"), 85)); vec.emplace_back(std::make_tuple(std::string("006"), std::string("ff"), 86)); vec.emplace_back(std::make_tuple(std::string("007"), std::string("gg"), 87)); string sql = "insert into student(id, name, score) "; ret = db.executemany2(sql, vec); if( ret != SQLITE_OK ) { std::cout<<"fail to insertmany2 "< st = db.createPreparedStatement(sql); std::shared_ptr stmt = st.lock(); int ret = stmt->update("005", "zhaosi", 86); if( ret != SQLITE_OK && ret != SQLITE_DONE) { std::cout<<"fail to execute "<errorMsg()<reset(); if( ret != SQLITE_OK ) { std::cout<<"fial to reset "<errorMsg()<update("004", "test", 73); if( ret != SQLITE_OK && ret != SQLITE_DONE) { std::cout<<"fail to execute "<errorMsg()< st = db.createPreparedStatement(sql); std::shared_ptr stmt = st.lock(); int ret = stmt->update("wangliu", 87); if( ret != SQLITE_OK && ret != SQLITE_DONE ) std::cout<<"fail to execute "<errorMsg()<close();//支持手动关闭PreparedStatement,可以检查其返回值。 assert(ret == SQLITE_OK); sql = "insert into student(id, name, score) values(?, 'Tom', 79)"; st = db.createPreparedStatement(sql); stmt = st.lock(); ret = stmt->update("007"); if( ret != SQLITE_OK && ret != SQLITE_DONE ) std::cout<<"fail to execute "<errorMsg()< ?"); std::weak_ptr st = db.createPreparedStatement(sql); std::shared_ptr stmt = st.lock(); int ret; QueryResultRowSet begin, end; std::tie(ret, begin, end) = stmt->query(80); if( ret != SQLITE_OK ) { std::cout<<"fail to query "<errorMsg()<(0); std::string name = col.getColumn(1); int score = col.getColumn(2); std::cout< st = db.createPreparedStatement(sql); std::shared_ptr stmt = st.lock(); int ret; QueryResultRowSet begin, end; std::tie(ret, begin, end) = stmt->query(); std::cout<<"name\tscore"<("name"); int score = col.getColumn("sc"); std::cout<close();//主动关闭 ``` 输出结果: |name | score| |-----------|------| |xiaoming | 99| |zhangsan | 80| |zhaosi | 86| |test | 73| |wangliu | 87| |Tom | 79| |Jack | 99|