SQLITE数据库C++封装类
- 格式:pdf
- 大小:88.69 KB
- 文档页数:5
[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的基本使⽤以及封装使⽤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简单封装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数据库通常使用封装好的类库,如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 提供了 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⽅法。
分享给⼤家供⼤家参考。
具体分析如下:地址: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` 是一个与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语言中用法在 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;}处理查询结果:如果执行的是查询语句,你需要使用回调函数来处理查询结果。
C# SQLite数据库访问封装类C# 异常处理(Catch Throw)IL分析在客户端配置文件<configuration>节点下,添加:[html] view plain copy 在CODE上查看代码片派生到我的代码片<connectionStrings><add name="localdb" connectionString="Data Source=config/local.db;Version=3;UseUTF16Encoding=True;"providerName="System.Data.SQLite.SQLiteFactory"/></connectionStrings>其中【localdb】是本地SQLite数据库的名称,【config/local.db】是在当前程序运行目录下SQLite数据库位置C# SQLite数据库访问封装类代码:[csharp] view plain copy 在CODE上查看代码片派生到我的代码片/// <summary>/// 本类为SQLite数据库帮助静态类,使用时只需直接调用即可,无需实例化/// </summary>public static class SQLiteHelper{// Application.StartupPathpublic static string LocalDbConnectionString = ConfigurationManager.ConnectionStrings["localdb"].ConnectionString;#region ExecuteNonQuery/// <summary>/// 执行数据库操作(新增、更新或删除)/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="cmd">SqlCommand对象</param>/// <returns>所受影响的行数</returns>public static int ExecuteNonQuery(string connectionString, SQLiteCommand cmd){int result = 0;if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");using (SQLiteConnection con = new SQLiteConnection(connectionString)){SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, true, mandType, mandText);try{result = cmd.ExecuteNonQuery();mit();}catch (Exception ex){trans.Rollback();throw ex;}}return result;}/// <summary>/// 执行数据库操作(新增、更新或删除)/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="commandText">执行语句或存储过程名</param>/// <param name="commandType">执行类型</param>/// <returns>所受影响的行数</returns>public static int ExecuteNonQuery(string connectionString, string commandText, CommandType commandType){int result = 0;if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");if (commandText == null || commandText.Length == 0)throw new ArgumentNullException("commandText");SQLiteCommand cmd = new SQLiteCommand();using (SQLiteConnection con = new SQLiteConnection(connectionString)){SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, true, commandType, commandText);try{result = cmd.ExecuteNonQuery();mit();}catch (Exception ex){trans.Rollback();throw ex;}}return result;}/// <summary>/// 执行数据库操作(新增、更新或删除)/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="commandText">执行语句或存储过程名</param>/// <param name="commandType">执行类型</param>/// <param name="cmdParms">SQL参数对象</param>/// <returns>所受影响的行数</returns>public static int ExecuteNonQuery(string connectionString, string commandText, CommandType commandType, params SQLiteParameter[] cmdParms){int result = 0;if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");if (commandText == null || commandText.Length == 0)throw new ArgumentNullException("commandText");SQLiteCommand cmd = new SQLiteCommand();using (SQLiteConnection con = new SQLiteConnection(connectionString)){SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, true, commandType, commandText);try{result = cmd.ExecuteNonQuery();mit();}catch (Exception ex){trans.Rollback();throw ex;}}return result;}#endregion#region ExecuteScalar/// <summary>/// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="cmd">SqlCommand对象</param>/// <returns>查询所得的第1行第1列数据</returns>public static object ExecuteScalar(string connectionString, SQLiteCommand cmd){object result = 0;if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");using (SQLiteConnection con = new SQLiteConnection(connectionString)){SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, true, mandType, mandText);try{result = cmd.ExecuteScalar();mit();}catch (Exception ex){trans.Rollback();throw ex;}}return result;}/// <summary>/// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="commandText">执行语句或存储过程名</param>/// <param name="commandType">执行类型</param>/// <returns>查询所得的第1行第1列数据</returns>public static object ExecuteScalar(string connectionString, string commandText, CommandType commandType){object result = 0;if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");if (commandText == null || commandText.Length == 0)throw new ArgumentNullException("commandText");SQLiteCommand cmd = new SQLiteCommand();using (SQLiteConnection con = new SQLiteConnection(connectionString)){SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, true, commandType, commandText);try{result = cmd.ExecuteScalar();mit();}catch (Exception ex){trans.Rollback();throw ex;}}return result;}/// <summary>/// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="commandText">执行语句或存储过程名</param>/// <param name="commandType">执行类型</param>/// <param name="cmdParms">SQL参数对象</param>/// <returns>查询所得的第1行第1列数据</returns>public static object ExecuteScalar(string connectionString, string commandText, CommandType commandType, params SQLiteParameter[] cmdParms){object result = 0;if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");if (commandText == null || commandText.Length == 0)throw new ArgumentNullException("commandText");SQLiteCommand cmd = new SQLiteCommand();using (SQLiteConnection con = new SQLiteConnection(connectionString)){SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, true, commandType, commandText);try{result = cmd.ExecuteScalar();mit();}catch (Exception ex){trans.Rollback();throw ex;}}return result;}#endregion#region ExecuteReader/// <summary>/// 执行数据库查询,返回SqlDataReader对象/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="cmd">SqlCommand对象</param>/// <returns>SqlDataReader对象</returns>public static DbDataReader ExecuteReader(string connectionString, SQLiteCommand cmd){DbDataReader reader = null;if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");SQLiteConnection con = new SQLiteConnection(connectionString);SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, false, mandType, mandText);try{reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);}catch (Exception ex){throw ex;}return reader;}/// <summary>/// 执行数据库查询,返回SqlDataReader对象/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="commandText">执行语句或存储过程名</param>/// <param name="commandType">执行类型</param>/// <returns>SqlDataReader对象</returns>public static DbDataReader ExecuteReader(string connectionString, string commandText, CommandType commandType){DbDataReader reader = null;if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");if (commandText == null || commandText.Length == 0)throw new ArgumentNullException("commandText");SQLiteConnection con = new SQLiteConnection(connectionString);SQLiteCommand cmd = new SQLiteCommand();SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, false, commandType, commandText);try{reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);}catch (Exception ex){throw ex;}return reader;}/// <summary>/// 执行数据库查询,返回SqlDataReader对象/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="commandText">执行语句或存储过程名</param>/// <param name="commandType">执行类型</param>/// <param name="cmdParms">SQL参数对象</param>/// <returns>SqlDataReader对象</returns>public static DbDataReader ExecuteReader(string connectionString, string commandText, CommandType commandType, params SQLiteParameter[] cmdParms){DbDataReader reader = null;if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");if (commandText == null || mandText.Length == 0)throw new ArgumentNullException("commandText");SQLiteConnection con = new SQLiteConnection(connectionString);SQLiteCommand cmd = new SQLiteCommand();SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, false, commandType, commandText, cmdParms);try{reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);}catch (Exception ex){throw ex;}return reader;}#endregion#region ExecuteDataSet/// <summary>/// 执行数据库查询,返回DataSet对象/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="cmd">SqlCommand对象</param>/// <returns>DataSet对象</returns>public static DataSet ExecuteDataSet(string connectionString, SQLiteCommand cmd){DataSet ds = new DataSet();SQLiteConnection con = new SQLiteConnection(connectionString);SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, false, mandType, mandText);try{SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);sda.Fill(ds);}catch (Exception ex){throw ex;}finally{if (cmd.Connection != null){if (cmd.Connection.State == ConnectionState.Open){cmd.Connection.Close();}}}return ds;}/// <summary>/// 执行数据库查询,返回DataSet对象/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="commandText">执行语句或存储过程名</param>/// <param name="commandType">执行类型</param>/// <returns>DataSet对象</returns>public static DataSet ExecuteDataSet(string connectionString, string commandText, CommandType commandType){if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");if (commandText == null || commandText.Length == 0)throw new ArgumentNullException("commandText");DataSet ds = new DataSet();SQLiteConnection con = new SQLiteConnection(connectionString);SQLiteCommand cmd = new SQLiteCommand();SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, false, commandType, commandText);try{SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);sda.Fill(ds);}catch (Exception ex){throw ex;}finally{if (con != null){if (con.State == ConnectionState.Open){con.Close();}}}return ds;}/// <summary>/// 执行数据库查询,返回DataSet对象/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="commandText">执行语句或存储过程名</param>/// <param name="commandType">执行类型</param>/// <param name="cmdParms">SQL参数对象</param>/// <returns>DataSet对象</returns>public static DataSet ExecuteDataSet(string connectionString, string commandText, CommandType commandType, params SQLiteParameter[] cmdParms){if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");if (commandText == null || commandText.Length == 0)throw new ArgumentNullException("commandText");DataSet ds = new DataSet();SQLiteConnection con = new SQLiteConnection(connectionString);SQLiteCommand cmd = new SQLiteCommand();SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, false, commandType, commandText, cmdParms);try{SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);sda.Fill(ds);}catch (Exception ex){throw ex;}finally{if (con != null){if (con.State == ConnectionState.Open){con.Close();}}}return ds;}#endregion#region 通用分页查询方法/// <summary>/// 通用分页查询方法/// </summary>/// <param name="connString">连接字符串</param>/// <param name="tableName">表名</param>/// <param name="strColumns">查询字段名</param>/// <param name="strWhere">where条件</param>/// <param name="strOrder">排序条件</param>/// <param name="pageSize">每页数据数量</param>/// <param name="currentIndex">当前页数</param>/// <param name="recordOut">数据总量</param>/// <returns>DataTable数据表</returns>public static DataTable SelectPaging(string connString, string tableName, string strColumns, string strWhere, string strOrder, int pageSize, int currentIndex, out int recordOut) {DataTable dt = new DataTable();recordOut = Convert.ToInt32(ExecuteScalar(connString, "select count(*) from " + tableName, CommandType.Text));string pagingTemplate = "select {0} from {1} where {2} order by {3} limit {4} offset {5} ";int offsetCount = (currentIndex - 1) * pageSize;string commandText = String.Format(pagingTemplate, strColumns, tableName, strWhere, strOrder, pageSize.ToString(), offsetCount.ToString());using (DbDataReader reader = ExecuteReader(connString, commandText, CommandType.Text)){if (reader != null){dt.Load(reader);}}return dt;}#endregion#region 预处理Command对象,数据库链接,事务,需要执行的对象,参数等的初始化/// <summary>/// 预处理Command对象,数据库链接,事务,需要执行的对象,参数等的初始化/// </summary>/// <param name="cmd">Command对象</param>/// <param name="conn">Connection对象</param>/// <param name="trans">Transcation对象</param>/// <param name="useTrans">是否使用事务</param>/// <param name="cmdType">SQL字符串执行类型</param>/// <param name="cmdText">SQL Text</param>/// <param name="cmdParms">SQLiteParameters to use in the command</param>private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, ref SQLiteTransaction trans, bool useTrans, CommandType cmdType, string cmdText, params SQLiteParameter[] cmdParms){if (conn.State != ConnectionState.Open)conn.Open();cmd.Connection = conn;mandText = cmdText;if (useTrans){trans = conn.BeginTransaction(IsolationLevel.ReadCommitted);cmd.Transaction = trans;}mandType = cmdType;if (cmdParms != null){foreach (SQLiteParameter parm in cmdParms)cmd.Parameters.Add(parm);}}#endregion}使用demo:[csharp] view plain copy 在CODE上查看代码片派生到我的代码片/// <summary>/// 获取数据库关键字信息/// </summary>/// <param name="category">分类</param>/// <param name="versions">版本</param>/// <returns></returns>private DataSet GetSystemDataBaseKeyWords(string category, string versions){StringBuilder sql = new StringBuilder();sql.Append("SELECT Keywords , Versions , Type , Description , Category , Id , Extends ");sql.Append(" FROM A_DataBaseKeyWords ");sql.AppendFormat(" WHERE 1={0} ", "1");if (!String.IsNullOrEmpty(category)){sql.AppendFormat(" AND Category='{0}'", category);}if (!String.IsNullOrEmpty(versions)){sql.AppendFormat(" AND Versions='{0}'", versions);}return SQLiteHelper.ExecuteDataSet(SQLiteHelper.LocalDbConnectionString, sql.ToString(), CommandType.Text);}。
android sqlite数据库原理-回复Android SQLite数据库原理SQLite是一种轻量级的关系型数据库,广泛应用于移动平台上,特别是Android应用程序中。
SQLite在安卓系统上的使用是基于C/C++库,提供了一套接口供开发者使用。
在本文中,我们将以Android SQLite数据库原理为主题,详细介绍其背后的原理和相关操作。
一、SQLite数据库概述SQLite是一种嵌入式数据库,它以库的形式嵌入到应用程序中,与其他大型数据库不同,它没有独立的服务进程,也不需要独立的服务器。
SQLite 的数据库文件是存储在应用程序的私有存储空间中,可以通过一系列API 进行操作。
SQLite支持大部分的SQL标准,并且具有ACID(原子性、一致性、隔离性和持久性)特性。
二、SQLite数据库文件结构1. SQLite数据库文件的后缀名为.db,它可能由多个页面组成,每个页面的大小通常为4KB。
一个页面可以存储一条或多条数据记录。
2. SQLite数据库由多个表组成,每个表由多个列和多个行组成。
表的列定义了每个数据记录中可以保存的数据类型和数值的约束。
3. SQLite数据库还包括索引,索引可以加速数据的检索。
在SQLite中,每个表最多只能有一个主索引(Primary Index),也可以有多个次索引(Secondary Index)。
三、SQLite数据库数据类型SQLite支持多种数据类型,常见的有:1. INTEGER:整型数据。
2. TEXT:以UTF-8编码存储的文本数据。
3. REAL:浮点型数据。
4. BLOB:二进制大型对象,可以用来存储图片、音频等二进制数据。
5. NULL:空值。
当我们在创建表时,需要明确每个列的数据类型。
四、SQLite数据库操作1. 数据库的创建和打开在Android中,我们可以使用SQLiteOpenHelper类来创建和打开数据库。
它提供了两种方法:onCreate()和onUpgrade()。