SQLITE数据库C++封装类
[Android]Sqlite数据库操作工具封装类
![[Android]Sqlite数据库操作工具封装类](https://img.taocdn.com/s3/m/84bb5e846429647d27284b73f242336c1eb930ee.png)
[Android]Sqlite数据库操作⼯具封装类sqlite 数据库封装类DatabaseUtil.java(封装的类)package com.jack.androidbase.tools;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;/*** sqlite 数据库操作类*/public class DatabaseUtil {private static final String TAG = "DatabaseUtil";/*** Database Name*/private static final String DATABASE_NAME = "student_data";/*** Database Version*/private static final int DATABASE_VERSION = 1;/*** Table Name*/private static final String DATABASE_TABLE = "tb_student";/*** Table columns*/public static final String KEY_NAME = "name";public static final String KEY_GRADE = "grade";public static final String KEY_ROWID = "_id";/*** Database creation sql statement*/private static final String CREATE_TABLE ="create table " + DATABASE_TABLE + " (" + KEY_ROWID + " integer primary key autoincrement, "+ KEY_NAME + " text not null, " + KEY_GRADE + " text not null);";/*** Context*/private final Context mCtx;private DatabaseHelper mDbHelper;private SQLiteDatabase mDb;/*** Inner private class. Database Helper class for creating and updating database.*/private static class DatabaseHelper extends SQLiteOpenHelper {DatabaseHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);}/*** onCreate method is called for the 1st time when database doesn't exists.*/@Overridepublic void onCreate(SQLiteDatabase db) {Log.i(TAG, "Creating DataBase: " + CREATE_TABLE);db.execSQL(CREATE_TABLE);}/*** onUpgrade method is called when database version changes.*/@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {Log.w(TAG, "Upgrading database from version " + oldVersion + " to "+ newVersion);}}/*** Constructor - takes the context to allow the database to be* opened/created** @param ctx the Context within which to work*/public DatabaseUtil(Context ctx) {this.mCtx = ctx;}/*** This method is used for creating/opening connection** @return instance of DatabaseUtil* @throws SQLException*/public DatabaseUtil open() throws SQLException {mDbHelper = new DatabaseHelper(mCtx);mDb = mDbHelper.getWritableDatabase();return this;}/*** This method is used for closing the connection.*/public void close() {mDbHelper.close();}/*** This method is used to create/insert new record record.** @param name* @param grade* @return long*/public long insert(String name, String grade) {ContentValues initialValues = new ContentValues();initialValues.put(KEY_NAME, name);initialValues.put(KEY_GRADE, grade);return mDb.insert(DATABASE_TABLE, null, initialValues);}/*** This method will delete record.** @param rowId* @return boolean*/public boolean delete(long rowId) {return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; }/*** This method will deleteAll record.** @return*/public boolean deleteAll() {return mDb.delete(DATABASE_TABLE, " 1 ", null) > 0;}/*** This method will return Cursor holding all the records.** @return Cursor*/public Cursor fetchAll() {return mDb.query(DATABASE_TABLE, new String[]{KEY_ROWID, KEY_NAME, KEY_GRADE}, null, null, null, null, null);}/*** This method will return Cursor holding the specific record.** @param id* @return Cursor* @throws SQLException*/public Cursor fetch(long id) throws SQLException {Cursor mCursor =mDb.query(true, DATABASE_TABLE, new String[]{KEY_ROWID,KEY_NAME, KEY_GRADE}, KEY_ROWID + "=" + id, null,null, null, null, null);if (mCursor != null) {mCursor.moveToFirst();}return mCursor;}/*** This method will update record.** @param id* @param name* @param standard* @return boolean*/public boolean update(int id, String name, String standard) {ContentValues args = new ContentValues();args.put(KEY_NAME, name);args.put(KEY_GRADE, standard);return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + id, null) > 0;}}使⽤详解:DatabaseUtil dbUtil = new DatabaseUtil(this);dbUtil.open();switch (v.getId()) {case R.id.other_btn_sqlite_list: //查询Cursor cursor = dbUtil.fetchAll();if (cursor != null) {while (cursor.moveToNext()) {Log.i("Student", "ID:" + cursor.getInt(0) + ",Student Name: " + cursor.getString(1) + ",Grade: " + cursor.getString(2));}}break;case R.id.other_btn_sqlite_add:dbUtil.insert("Prashant Thakkar", "100");Log.i("Student", "add over");break;case R.id.other_btn_sqlite_update:dbUtil.update(1, "aa", "bb");Log.i("Student", "update over");break;case R.id.other_btn_sqlite_del:dbUtil.delete(2);Log.i("Student", "delete over");break;case R.id.other_btn_sqlite_del_all:dbUtil.deleteAll();Log.i("Student", "delete all over");break;}dbUtil.close();参考⽹址:https:///sowhat4999/p/4439856.htmlhttps:///ProMonkey/p/5765616.html (有添加单例模式)本博客地址:本⽂原⽂地址:转载请著名出处!谢谢~~。
sqlite3的基本使用以及封装使用

sqlite3的基本使⽤以及封装使⽤1基本使⽤1.打开数据库int sqlite3_open(const char *filename, // 数据库的⽂件路径sqlite3 **ppDb // 数据库实例);2.执⾏任何SQL语句int sqlite3_exec(sqlite3*, // ⼀个打开的数据库实例const char *sql, // 需要执⾏的SQL语句int (*callback)(void*,int,char**,char**), // SQL语句执⾏完毕后的回调void *, // 回调函数的第1个参数char **errmsg // 错误信息);3.检查SQL语句的合法性(查询前的准备)int sqlite3_prepare_v2(sqlite3 *db, // 数据库实例const char *zSql, // 需要检查的SQL语句int nByte, // SQL语句的最⼤字节长度sqlite3_stmt **ppStmt, // sqlite3_stmt实例,⽤来获得数据库数据const char **pzTail);4.查询⼀⾏数据int sqlite3_step(sqlite3_stmt*); // 如果查询到⼀⾏数据,就会返回SQLITE_ROW5.利⽤stmt获得某⼀字段的值(字段的下标从0开始)double sqlite3_column_double(sqlite3_stmt*, int iCol); // 浮点数据int sqlite3_column_int(sqlite3_stmt*, int iCol); // 整型数据sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); // 长整型数据const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); // ⼆进制⽂本数据const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); // 字符串数据1创建⼀个model类,.h⽂件#import <Foundation/Foundation.h>@interface IWStudent : NSObject@property (nonatomic, assign) int ID;@property (nonatomic, copy) NSString *name;@property (nonatomic, assign) int age;@end.m⽂件#import"IWStudent.h"@implementation IWStudent@end2创建⼯具类....封装⽅法.h⽂件#import <Foundation/Foundation.h>@class IWStudent;@interface IWStudentTool : NSObject/*** 添加学⽣** @param student 需要添加的学⽣*/+ (BOOL)addStudent:(IWStudent *)student;/*** 获得所有的学⽣** @return 数组中装着都是IWStudent模型*/+ (NSArray *)students;/*** 根据搜索条件获得对应的学⽣** @param condition 搜索条件*/+ (NSArray *)studentsWithCondition:(NSString *)condition;@end.m⽂件#import"IWStudentTool.h"#import"IWStudent.h"#import <sqlite3.h>@implementation IWStudentTool// static的作⽤:能保证_db这个变量只被IWStudentTool.m直接访问static sqlite3 *_db;+ (void)initialize{// 0.获得沙盒中的数据库⽂件名NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"]; // 1.创建(打开)数据库(如果数据库⽂件不存在,会⾃动创建)int result = sqlite3_open(filename.UTF8String, &_db);if (result == SQLITE_OK) {NSLog(@"成功打开数据库");// 2.创表const char *sql = "create table if not exists t_student (id integer primary key autoincrement, name text, age integer);";char *errorMesg = NULL;int result = sqlite3_exec(_db, sql, NULL, NULL, &errorMesg);if (result == SQLITE_OK) {NSLog(@"成功创建t_student表");} else {NSLog(@"创建t_student表失败:%s", errorMesg);}} else {NSLog(@"打开数据库失败");}}+ (BOOL)addStudent:(IWStudent *)student{NSString *sql = [NSString stringWithFormat:@"insert into t_student (name, age) values('%@', %d);", , student.age];char *errorMesg = NULL;int result = sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errorMesg);return result == SQLITE_OK;}+ (NSArray *)students{// 0.定义数组NSMutableArray *students = nil;// 1.定义sql语句const char *sql = "select id, name, age from t_student;";// 2.定义⼀个stmt存放结果集sqlite3_stmt *stmt = NULL;// 3.检测SQL语句的合法性int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);if (result == SQLITE_OK) {NSLog(@"查询语句是合法的");students = [NSMutableArray array];// 4.执⾏SQL语句,从结果集中取出数据while (sqlite3_step(stmt) == SQLITE_ROW) { // 真的查询到⼀⾏数据// 获得这⾏对应的数据IWStudent *student = [[IWStudent alloc] init];// 获得第0列的idstudent.ID = sqlite3_column_int(stmt, 0);// 获得第1列的nameconst unsigned char *sname = sqlite3_column_text(stmt, 1); = [NSString stringWithUTF8String:(const char *)sname];// 获得第2列的agestudent.age = sqlite3_column_int(stmt, 2);// 添加到数组[students addObject:student];}} else {NSLog(@"查询语句⾮合法");}return students;}+ (NSArray *)studentsWithCondition:(NSString *)condition{// 0.定义数组NSMutableArray *students = nil;// 1.定义sql语句const char *sql = "select id, name, age from t_student where name like ?;";// 2.定义⼀个stmt存放结果集sqlite3_stmt *stmt = NULL;// 3.检测SQL语句的合法性int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);if (result == SQLITE_OK) {NSLog(@"查询语句是合法的");students = [NSMutableArray array];// 填补占位符的内容NSString *newCondition = [NSString stringWithFormat:@"%%%@%%", condition]; // NSLog(@"%@", newCondition);sqlite3_bind_text(stmt, 1, newCondition.UTF8String, -1, NULL);// 4.执⾏SQL语句,从结果集中取出数据while (sqlite3_step(stmt) == SQLITE_ROW) { // 真的查询到⼀⾏数据// 获得这⾏对应的数据IWStudent *student = [[IWStudent alloc] init];// 获得第0列的idstudent.ID = sqlite3_column_int(stmt, 0);// 获得第1列的nameconst unsigned char *sname = sqlite3_column_text(stmt, 1); = [NSString stringWithUTF8String:(const char *)sname];// 获得第2列的agestudent.age = sqlite3_column_int(stmt, 2);// 添加到数组[students addObject:student];}} else {NSLog(@"查询语句⾮合法");}return students;}@end2.封装为⼯具类。
C#SQLite简单封装

C#SQLite简单封装SQLiteHelper类按 Ctrl+C 复制代码按 Ctrl+C 复制代码1///<summary>2///初始化 SQLiteHelper3///</summary>4///<param name="connectionstring">数据库连接字符串</param>5public SQLiteHelper(string connectionstring)6 {7this._SQLiteConnString = connectionstring;8this._SQLiteConn = new SQLiteConnection(this._SQLiteConnString);9this._mit += new SQLiteCommitHandler(_SQLiteConn_Commit);10this._SQLiteConn.RollBack += new EventHandler(_SQLiteConn_RollBack);11 }1213///<summary>14/// SQLiteHelper 析构函数15///</summary>16 ~SQLiteHelper()17 {18this.Dispose(false);19 }2021#endregion22#region方法23///<summary>24///打开数据库连接25///</summary>26private void Open()27 {28if(this._SQLiteConn.State == ConnectionState.Closed)29 {30this._SQLiteConn.Open();31 }32 }33///<summary>34///关闭数据库连接35///</summary>36private void Close()37 {38if(this._SQLiteConn.State != ConnectionState.Closed)39 {40if (this._IsRunTrans && this._autocommit)41 {mit();43 }44this._SQLiteConn.Close();45 }46 }47///<summary>48///开始数据库事务49///</summary>50public void BeginTransaction()51 {52this._SQLiteConn.BeginTransaction();53this._IsRunTrans = true;54 }55///<summary>56///开始数据库事务57///</summary>58///<param name="isoLevel">事务锁级别</param>59public void BeginTransaction(IsolationLevel isoLevel) 60 {61this._SQLiteConn.BeginTransaction(isoLevel);62this._IsRunTrans = true;63 }64///<summary>65///提交当前挂起的事务66///</summary>67public void Commit()68 {69if (this._IsRunTrans)70 {71this._mit();72this._IsRunTrans = false;73 }74 }75///<summary>76///回滚当前挂起的事务77///</summary>78public void Rollback()79 {80if (this._IsRunTrans)81 {82this._SQLiteTrans.Rollback();83this._IsRunTrans = false;84 }85 }86///<summary>87///执行SQL语句88///</summary>89///<param name="command">SQL语句</param>90///<returns>返回受影响行数[SELECT 不会返回影响行]</returns>91public int Execute(string command)92 {93int result = -1;94this.Open();95using(SQLiteCommand sqlitecmd = new SQLiteCommand(command))96 {97 result = sqlitecmd.ExecuteNonQuery();98 }99this.Close();100return result;101 }102///<summary>103///执行SQL语句104///</summary>105///<param name="command">SQL语句</param>106///<param name="parameter">参数组</param>107///<returns>返回受影响行数[SELECT 不会返回影响行]</returns>108public int Execute(string command, SQLiteParameter[] parameter)109 {110int result = -1;111this.Open();112using(SQLiteCommand sqlitecmd = new SQLiteCommand(command))113 {114 sqlitecmd.Parameters.AddRange(parameter);115 result = sqlitecmd.ExecuteNonQuery();116 }117this.Close();118return result;119 }120///<summary>121///执行SQL语句122///</summary>123///<param name="command">SQL语句</param>124///<returns>返回第一行第一列值</returns>125public object ExecuteScalar(string command)126 {127object result = null;128this.Open();129using(SQLiteCommand sqlitecmd = new SQLiteCommand(command))130 {131 result = sqlitecmd.ExecuteScalar();132 }133this.Close();134return result;135 }136///<summary>137///执行SQL语句138///</summary>139///<param name="command">SQL语句</param>140///<param name="parmeter">参数组</param>141///<returns>返回受影响行数[SELECT 不会返回影响行]</returns>142public object ExecuteScalar(string command, SQLiteParameter[] parmeter)143 {144object result = null;145this.Open();146using(SQLiteCommand sqlitecmd = new SQLiteCommand(command))147 {148 sqlitecmd.Parameters.AddRange(parmeter);149 result = sqlitecmd.ExecuteScalar();150 }151this.Close();152return result;153 }154///<summary>155///执行SQL语句156///</summary>157///<param name="command">SQL语句</param>158///<returns>返回DataSet数据集</returns>159public DataSet GetDs(string command)161return this.GetDs(command, string.Empty);162 }163public DataSet GetDs(string command, string tablename)164 {165 DataSet ds = new DataSet();166this.Open();167using(SQLiteCommand sqlitecmd = new SQLiteCommand(command, this._SQLiteConn))168 {169using (SQLiteDataAdapter sqliteadapter = new SQLiteDataAdapter(sqlitecmd))170 {171if (string.Empty.Equals(tablename))172 {173 sqliteadapter.Fill(ds);174 }175else176 {177 sqliteadapter.Fill(ds, tablename);178 }179 }180 }181this.Close();182return ds;183 }184185public DataSet GetDs(string command, out SQLiteCommand SqlItecmd)187return this.GetDs(command, string.Empty, out SqlItecmd);188 }189190public DataSet GetDs(string command, string tablename, out SQLiteCommand SqlItecmd)191 {192 DataSet ds = new DataSet();193this.Open();194SQLiteCommand sqlcmd = new SQLiteCommand(command, this._SQLiteConn);195using (SQLiteDataAdapter sqladapter = new SQLiteDataAdapter(sqlcmd))196 {197 sqladapter.Fill(ds);198 }199 SqlItecmd = sqlcmd;200this.Close();201return ds;202 }203204public int Update(DataSet ds, ref SQLiteCommand SqlItecmd)205 {206return this.Update(ds, string.Empty, ref SqlItecmd);207 }208209public int Update(DataSet ds, string tablename, ref SQLiteCommand SqlItecmd)211int result = -1;212this.Open();213using (SQLiteDataAdapter sqladapter = new SQLiteDataAdapter(SqlItecmd))214 {215using(SQLiteCommandBuilder sqlcommandbuilder = new SQLiteCommandBuilder(sqladapter)) 216 {217if (string.Empty.Equals(tablename))218 {219 result = sqladapter.Update(ds);220 }221else222 {223 result = sqladapter.Update(ds, tablename);224 }225 }226 }227this.Close();228return result;229 }230///<summary>231///释放该实例的托管资源232///</summary>233public virtual void Dispose()234 {235this.Dispose(true);236 GC.SuppressFinalize(this);237 }238protected void Dispose(bool disposing) 239 {240if (!this._disposed)241 {242if (disposing)243 {244// 定义释放非托管资源245 }246this._disposed = true;247 }248 }249#endregion250#region属性251///<summary>252///获取数据库连接字符串253///</summary>254public string ConnectionString255 {256get257 {258return this._SQLiteConnString; 259 }260 }261///<summary>262///设置是否自动提交事务263///</summary>264public bool AutoCommit265 {266get267 {268return this._autocommit;269 }270set271 {272this._autocommit = value;273 }274 }275#endregion276#region事件277void _SQLiteConn_RollBack(object sender, EventArgs e)278 {279this._IsRunTrans = false;280 }281void_SQLiteConn_Commit(object sender, CommitEventArgs e)282 {283this._IsRunTrans = false;284 }285#endregion286 }287 }。
python访问sqlite封装的常用类实例

python访问sqlite封装的常用类实例在Python中,访问SQLite数据库通常使用封装好的类库,如sqlite3模块提供了对SQLite数据库的底层访问。
SQLite是一种轻量级的关系型数据库,广泛应用于移动应用和嵌入式系统中。
下面将介绍SQLite数据库的常用类和实例。
1. 连接数据库:使用sqlite3.connect()函数可以建立与SQLite数据库的连接。
这个函数接受一个参数,表示数据库文件的路径。
如果数据库文件不存在,会自动创建。
示例代码:```import sqlite3conn = sqlite3.connect("test.db")```2. 创建表:使用游标(cursor)对象可以执行SQL语句。
首先,要调用游标的execute()方法,参数是一条创建表的SQL语句。
然后,调用commit()方法提交事务,确保表结构的改变生效。
示例代码:```cursor = conn.cursor()cursor.execute("CREATE TABLE IF NOT EXISTS students (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)")mit()```3. 插入数据:使用INSERT语句可以将数据插入到表中。
首先,要调用游标的execute()方法,参数是一条插入数据的SQL语句。
然后,调用commit()方法提交事务,确保数据的改变生效。
示例代码:```cursor.execute("INSERT INTO students (name, age) VALUES ('Alice', 20)")mit()```4. 查询数据:使用SELECT语句可以从表中查询数据。
首先,要调用游标的execute()方法,参数是一条查询数据的SQL语句。
然后,通过调用游标的fetchone()或fetchall()方法获取查询结果。
sqlite数据库 c语言

sqlite数据库 c语言SQLite 是一个 C 语言库,用于轻量级的磁盘文件数据库。
它的特点是数据库文件是单个磁盘文件,可以通过常规的读写文件系统来访问。
SQLite 提供了 SQL 语言接口,可以执行 SQL 查询和更新。
以下是一个简单的 C 语言示例,使用 SQLite 进行数据库操作:```cinclude <>include <>int main() {sqlite3 db;char err_msg = 0;int rc;char sql;rc = sqlite3_open("", &db);if (rc) {fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db)); return(0);} else {fprintf(stderr, "成功打开数据库\n");}// 创建表格sql = "CREATE TABLE Friends (Id INT, Name TEXT);"rc = sqlite3_exec(db, sql, 0, 0, &err_msg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL错误: %s\n", err_msg);sqlite3_free(err_msg);} else {fprintf(stdout, "表格创建成功\n");}// 插入数据sql = "INSERT INTO Friends (Id, Name) VALUES (1, 'Tom');" rc = sqlite3_exec(db, sql, 0, 0, &err_msg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL错误: %s\n", err_msg);sqlite3_free(err_msg);} else {fprintf(stdout, "数据插入成功\n");}// 查询数据sql = "SELECT FROM Friends;"rc = sqlite3_exec(db, sql, callback, 0, &err_msg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL错误: %s\n", err_msg);sqlite3_free(err_msg);} else {fprintf(stdout, "查询成功\n");}sqlite3_close(db);return 0;}```这个示例首先打开一个名为 "" 的数据库,然后创建一个名为 "Friends" 的表格,插入一行数据,然后查询所有的数据。
C#操作SQLite方法实例详解

C#操作SQLite⽅法实例详解本⽂实例讲述了C#操作SQLite⽅法。
分享给⼤家供⼤家参考。
具体分析如下:地址:System.Data.Sqlite⼊⼿。
⾸先import/using:复制代码代码如下:using System.Data.SQLite;Connection和Command:private SQLiteConnection conn;private SQLiteCommand cmd;连接db:conn = new SQLiteConnection("Data Source=c:\\test.db");conn.Open();INSERT/UPDATE:cmd = conn.CreateCommand();mandText = "INSERT INTO user(email,name) VALUES ('email','name')";cmd.ExecuteNonQuery();mandText = "UPDATE userSET name = 'Codelicious' WHERE ID = 1";cmd.ExecuteNonQuery();SELECT:mandText = "SELECT ID, name FROM user";SQLiteDataReader reader = cmd.ExecuteReader();if (reader.HasRows){while (reader.Read()){Console.WriteLine("ID: " + reader.GetInt16(0));Console.WriteLine("name: " + reader.GetString(1));}}模板程序:using System;using System.Data;using mon;using System.Data.SQLite;namespace SQLiteQueryBrowser{/// <summary>/// 说明:这是⼀个针对System.Data.SQLite的数据库常规操作封装的通⽤类。
wxsqlite 编译

wxsqlite 编译`wxSQLite` 是一个与wxWidgets GUI 库集成的SQLite 数据库的C++ 封装。
以下是一个简单的wxSQLite 编译示例,假设你已经安装了wxWidgets 和SQLite,并且已经获取了wxSQLite 的源代码。
步骤:1. 获取wxSQLite 源代码:-你可以从官方网站或版本控制系统(如GitHub)获取最新的wxSQLite 源代码。
2. 创建一个构建目录:-在wxSQLite 源代码的根目录下创建一个新的目录,用于构建输出。
```bashmkdir buildcd build```3. 运行CMake:-使用CMake 生成构建系统。
确保指定了正确的路径,包括wxWidgets 和SQLite 的头文件和库。
```bashcmake ..```-如果有特定的库路径,你可能需要添加类似于以下内容的参数:```bashcmake -DwxWidgets_ROOT_DIR=/path/to/wxWidgets -DwxWidgets_LIB_DIR=/path/to/wxWidgets/lib ..```4. 构建项目:-运行构建系统,比如使用`make`:```bashmake```-或者,如果你是在Windows 上使用Visual Studio,你可以通过打开生成的解决方案文件来构建项目。
5. 安装(可选):-可以选择将构建的库安装到系统中:```bashmake install```这将把库文件和头文件复制到系统的标准位置。
请注意,这只是一个简单的示例。
具体的步骤可能因你的操作系统、构建工具和库的版本而有所不同。
确保查看wxSQLite 的文档,以获取更详细的信息和可能的配置选项。
sqlist在c语言中用法

sqlist在c语言中用法在 C 语言中,如果你想要使用 SQL,你通常会使用 SQL 数据库的 C 接口库来执行 SQL 查询和操作数据库。
最常见的 C 接口库之一是 SQLite,它是一个轻量级的、自包含的、基于文件的 SQL 数据库引擎。
以下是在 C 语言中使用 SQLite 的基本用法:包含头文件:首先,你需要包含SQLite 头文件,通常是sqlite3.h。
#include <sqlite3.h>打开数据库:使用 sqlite3_open() 函数打开或创建一个数据库连接。
如果数据库文件不存在,则会创建一个新的数据库文件。
cCopy codesqlite3 *db;int rc = sqlite3_open("example.db", &db);if (rc != SQLITE_OK) {// 打开数据库失败fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));sqlite3_close(db);return 1;}执行 SQL 语句:你可以使用 sqlite3_exec() 函数执行 SQL 查询或操作。
cCopy codeconst char *sql = "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)";rc = sqlite3_exec(db, sql, 0, 0, 0);if (rc != SQLITE_OK) {// SQL 执行失败fprintf(stderr, "SQL error: %s\n", sqlite3_errmsg(db));sqlite3_close(db);return 1;}处理查询结果:如果执行的是查询语句,你需要使用回调函数来处理查询结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
bool ExecSql( const char *szsql ); char* GetError(); static int FunSqlExec(void *buf, int nData, char **szValue, char **szName );
//cpp
#include "DataBase.h"
int CDataBase::m_nHandleCount = 0; CDataBase* CDataBase::m_pHandle = NULL; CDataBase::CDataBase(void) {
meห้องสมุดไป่ตู้set( m_szErrMsg, 0, MAX_SIZE_BUF ); m_pdb = NULL; m_pHandle = NULL; }
char* CDataBase::GetError() {
return m_szErrMsg; }
int CDataBase::GetRecordSetSize() {
return m_Recordset.size(); }
void CDataBase::GetRecordSetValueByIndex( unsigned int nIndex, PSINGLERECORD pValue)
{ if ( m_Recordset.size() <= nIndex ) { return; } SINGLERECORD::iterator iter = m_Recordset[nIndex].begin(); for ( ; iter != m_Recordset[nIndex].end(); iter ++ ) { pValue->insert( (*iter) ); }
int GetRecordSetSize(); void GetRecordSetValueByIndex( unsigned int nIndex, PSINGLERECORD pValue); string GetValueByIndexAndKey( unsigned int nIndex, string strKey ); //增删改查 };
CDataBase(void); ~CDataBase(void); static int m_nHandleCount; static CDataBase *m_pHandle; struct sqlite3* m_pdb; RECORDSET m_Recordset; char m_szErrMsg[MAX_SIZE_BUF]; public: static CDataBase* GetDataBaseHandle(); void ReleaseDataBaseHandle();
if( SQLITE_OK != sqlite3_open( path, &m_pdb) ) {
SQLITE_LAST_ERRNO; return false; } else { sqlite3_exec(m_pdb, "PRAGMA synchronous = OFF; ", 0,0,0); return true; } }
CDataBase::~CDataBase(void) { }
CDataBase* CDataBase::GetDataBaseHandle() {
if ( m_pHandle == NULL ) {
m_pHandle = new CDataBase; if ( m_pHandle != NULL ) {
}
string CDataBase::GetValueByIndexAndKey( unsigned int nIndex, string strKey ) {
string str; if ( m_Recordset.size() <= nIndex ) {
return str; } SINGLERECORD::iterator iter = m_Recordset[nIndex].begin(); for ( ; iter != m_Recordset[nIndex].end(); iter ++ ) {
m_nHandleCount --; } if ( m_nHandleCount == 0 ) {
if ( m_pHandle != NULL ) {
delete m_pHandle; m_pHandle = NULL; } } }
bool CDataBase::OpenDB( const char *path ) {
strcpy( m_szErrMsg, pErr ); return false; } return true; }
int CDataBase::FunSqlExec( void *buf, int nData, char **szValue, char **szName ) {
CDataBase* pDb = (CDataBase*)buf; map<string, string> rec; string strName, strValue;
for ( int i = 0; i < nData; i ++ ) {
strName = szName[i%nData]; if ( szValue[i] != NULL ) {
strValue = szValue[i]; } else {
strValue = "0"; } rec.insert( make_pair<string, string>(strName, strValue) ); } pDb->m_Recordset.push_back( rec ); return 0; }
自己封装的一个简单的sqlite操作类.喜欢的拿走. //头文件 #pragma once #include <vector> #include <map> #include <string> #include "sqlite/sqlite3.h" using namespace std; typedef map<string, string> SINGLERECORD, *PSINGLERECORD; typedef vector<SINGLERECORD> RECORDSET; #define MAX_SIZE_BUF 128 class CDataBase { private:
bool CDataBase::CloseDB() {
if ( SQLITE_OK != sqlite3_close(m_pdb) ) {
return false; } else {
return true; } }
bool CDataBase::ExecSql( const char *szsql ) {
memset( m_szErrMsg, 0, MAX_SIZE_BUF ); m_Recordset.clear(); char *pErr = m_szErrMsg; if ( SQLITE_OK != sqlite3_exec(m_pdb, szsql, &CDataBase::FunSqlExec, this, &pErr)) {
m_nHandleCount ++; return m_pHandle; } return NULL; } else { m_nHandleCount ++; return m_pHandle; } }
void CDataBase::ReleaseDataBaseHandle() {
if ( m_nHandleCount > 0 ) {
if ( iter->first == strKey ) {
return iter->second; } } return str; }