如何编写高效且安全的SQLite操作类代码?

avatar
作者
筋斗云
阅读量:0
``python,import sqlite3,,class SQLiteHelper:, def __init__(self, db_name):, self.conn = sqlite3.connect(db_name), self.cursor = self.conn.cursor(),, def close(self):, self.conn.close(),, def execute(self, sql):, self.cursor.execute(sql), self.conn.commit(),, def fetchall(self, sql):, self.cursor.execute(sql), return self.cursor.fetchall(),``

SQLite 操作类代码

SQLite 是一个轻量级的关系型数据库管理系统,广泛应用于嵌入式系统、移动应用和桌面应用中,为了简化对 SQLite 数据库的操作,通常会封装一些常用的操作类,这些类提供了面向对象的方式来访问和管理 SQLite 数据库,使开发人员可以轻松地添加、修改、删除和查询数据。

如何编写高效且安全的SQLite操作类代码?

常见操作类示例

以下是几个常见的 SQLite 操作类示例,包括 Python、C++ 和 PHP 的实现:

Python 示例(EasySqlite)

 import sqlite3 class EasySqlite:     """     sqlite 数据库操作工具类     database: 数据库文件地址,db/mydb.db     """     _connection = None     def __init__(self, database):         # 连接数据库         self._connection = sqlite3.connect(database)     def _dict_factory(self, cursor, row):         d = {}         for idx, col in enumerate(cursor.description):             d[col[0]] = row[idx]         return d     def execute(self, sql, args=[], result_dict=True, commit=True):         """         执行数据库操作的通用方法         Args:         sql: sql语句         args: sql参数         result_dict: 操作结果是否用dict格式返回         commit: 是否提交事务         Returns:         list 列表,         [{'id': 1, 'name': '张三'}, {'id': 2, 'name': '李四'}]         """         if result_dict:             self._connection.row_factory = self._dict_factory         else:             self._connection.row_factory = None         # 获取游标         _cursor = self._connection.cursor()         # 执行SQL获取结果         _cursor.execute(sql, args)         if commit:             self._connection.commit()         data = _cursor.fetchall()         _cursor.close()         return data

C++ 示例(SQLiteCpp)

 #include <sqlite3.h> #include <string> class SQLiteDB { public:     SQLiteDB(const std::string& dbName);     ~SQLiteDB();     bool open();     void close();     bool execute(const std::string& sql);     // Other methods... private:     sqlite3* db; }; SQLiteDB::SQLiteDB(const std::string& dbName) : db(nullptr) {     if (sqlite3_open((dbName + ".db").c_str(), &db)) {         // handle error     } } SQLiteDB::~SQLiteDB() {     close(); } void SQLiteDB::close() {     if (db) {         sqlite3_close(db);         db = nullptr;     } } bool SQLiteDB::open() {     if (db == nullptr && sqlite3_open(":memory:", &db)) {         // handle error         return false;     }     return true; } bool SQLiteDB::execute(const std::string& sql) {     char* errMsg;     if (sqlite3_exec(db, sql.c_str(), nullptr, nullptr, &errMsg) != SQLITE_OK) {         // handle error         return false;     }     return true; }

PHP 示例(PDOsqlite)

 class PDOsqlite {     public $dbcharset = 'utf8';     private $dbFile = '';     public $dbh = null;     protected static $instanceArr = array();     public function __construct($dbname) {         $this>dbFile = "存放数据库文件的目录" . $dbname;         try {             $this>dbh = new PDO('sqlite:' . $this>dbFile);         } catch (PDOException $e) {             try {                 $this>dbh = new PDO('sqlite2:' . $this>dbFile);             } catch (PDOException $e) {                 $this>outputError($e>getMessage());             }         }     }     /**      * 单例模式      * @param $dbname      * @return Object      */     public static function getInstance($dbname) {         if (!key_exists($dbname, self::$instanceArr)) {             self::$instanceArr[$dbname] = new self($dbname);         }         return self::$instanceArr[$dbname];     }     /**      * @param $tab_name  数据表名      * @param $dataArr  需要插入的字段数组      * @return int|void      */     public function insert($tab_name, $dataArr) {         if (is_array($dataArr) && count($dataArr) > 0) {             $key_list = '';             $value_list = '';             foreach ($dataArr as $key => $val) {                 $key_list .= "'" . $key . "',";                 $value_list .= "'" . $val . "',";             }             $key_list = '(' . rtrim($key_list, ',') . ')';             $value_list = '(' . rtrim($value_list, ',') . ')';             $sql = "insert into $tab_name $key_list values $value_list";             $result = $this>dbh>exec($sql);             $this>getPDOError();             return $result;         }         return;     } }

相关问答FAQs

Q1: SQLite 操作类的主要作用是什么?

A1: SQLite 操作类的主要作用是提供一种面向对象的方式来访问和管理 SQLite 数据库,通过封装常用的数据库操作方法,如增、删、改、查等,可以简化开发过程,提高代码的可维护性和可重用性。

Q2: 使用 SQLite 操作类时需要注意哪些事项?

A2: 使用 SQLite 操作类时需要注意以下几点:确保数据库连接正确;在执行 SQL 语句时处理可能出现的异常;根据需要选择适当的事务管理方式;及时关闭数据库连接以释放资源。


 import sqlite3 class SQLiteOperation:     def __init__(self, db_name):         self.conn = sqlite3.connect(db_name)         self.cursor = self.conn.cursor()          def create_table(self, create_table_sql):         try:             self.cursor.execute(create_table_sql)             self.conn.commit()             print("Table created successfully")         except Exception as e:             print(f"Failed to create table: {e}")          def insert_data(self, insert_data_sql, data):         try:             self.cursor.execute(insert_data_sql, data)             self.conn.commit()             print("Data inserted successfully")         except Exception as e:             print(f"Failed to insert data: {e}")          def query_data(self, query_data_sql):         try:             self.cursor.execute(query_data_sql)             results = self.cursor.fetchall()             return results         except Exception as e:             print(f"Failed to query data: {e}")             return []          def update_data(self, update_data_sql, data):         try:             self.cursor.execute(update_data_sql, data)             self.conn.commit()             print("Data updated successfully")         except Exception as e:             print(f"Failed to update data: {e}")          def delete_data(self, delete_data_sql, data):         try:             self.cursor.execute(delete_data_sql, data)             self.conn.commit()             print("Data deleted successfully")         except Exception as e:             print(f"Failed to delete data: {e}")          def close_connection(self):         self.conn.close()         print("Database connection closed") 使用示例 db_name = "example.db" db = SQLiteOperation(db_name) 创建表 create_table_sql = """ CREATE TABLE IF NOT EXISTS users (     id INTEGER PRIMARY KEY AUTOINCREMENT,     name TEXT NOT NULL,     age INTEGER ); """ db.create_table(create_table_sql) 插入数据 insert_data_sql = "INSERT INTO users (name, age) VALUES (?, ?);" data = ('Alice', 30) db.insert_data(insert_data_sql, data) 查询数据 query_data_sql = "SELECT * FROM users;" results = db.query_data(query_data_sql) print(results) 更新数据 update_data_sql = "UPDATE users SET age = ? WHERE name = ?;" data = (35, 'Alice') db.update_data(update_data_sql, data) 删除数据 delete_data_sql = "DELETE FROM users WHERE name = ?;" data = ('Alice', ) db.delete_data(delete_data_sql, data) 关闭数据库连接 db.close_connection()

这个类提供了基本的数据库操作,你可以根据需要对其进行扩展,例如添加错误处理、日志记录等,在创建表和插入数据时,确保SQL语句是正确的,并且传递给函数的数据与SQL语句中的占位符相匹配。

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!