记——遇到的问题(关于static)

本文解析了方法体内变量声明的规则,指出方法体中的变量均为局部变量,不可使用static声明全局变量。同时,列举了在方法体中无法使用的其他修饰符,包括private、protected、public和abstract。

做到一道题

题目在方法中声明了一个static修饰的变量

后来查到了编译不通过的原因,方法体中的变量都为局部变量,使用static声明的变量为全局变量,因此错了

此外在方法体中下列修饰符均不能使用:

private  protected public

static

abstract

### 关于 SQLite3 中 `stmt` 的用法 SQLite 使用预处理语句(prepared statements)来优化 SQL 查询执行效率。通过将查询编译成内部表示形式,可以减少重复解析和编译的时间开销。以下是关于 `stmt` 的基本概念及其常见用途。 #### 预处理语句的基础 在 SQLite 中,预处理语句由 C API 提供支持,主要涉及以下几个函数: - **`sqlite3_prepare_v2()`**: 将 SQL 字符串转换为可执行的预处理语句对象[^4]。 - **`sqlite3_step()`**: 执行预处理语句中的下一行数据操作[^5]。 - **`sqlite3_finalize()`**: 销毁预处理语句对象并释放资源[^6]。 这些函数通常用于绑定参数、多次执行相同结构的查询以及管理内存分配。 #### 示例代码展示如何使用 `stmt` 下面是一个简单的例子,演示如何利用 SQLite 的预处理语句插入多条录: ```c #include <stdio.h> #include <sqlite3.h> int main() { sqlite3* db; char* err_msg = 0; int rc = sqlite3_open("test.db", &db); if (rc != SQLITE_OK) { fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1; } const char* sql_stmt = "INSERT INTO tbl1 VALUES (?, ?)"; sqlite3_stmt* stmt; rc = sqlite3_prepare_v2(db, sql_stmt, -1, &stmt, 0); if (rc != SQLITE_OK) { fprintf(stderr, "Failed to prepare statement: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1; } // 绑定第一个参数 sqlite3_bind_text(stmt, 1, "example text", -1, SQLITE_STATIC); // 绑定第二个参数 sqlite3_bind_int(stmt, 2, 42); // 执行插入操作 if (sqlite3_step(stmt) != SQLITE_DONE) { fprintf(stderr, "Insert failed: %s\n", sqlite3_errmsg(db)); } else { printf("Row inserted successfully.\n"); } // 清理预处理语句 sqlite3_finalize(stmt); sqlite3_close(db); return 0; } ``` 此程序展示了如何创建一条带有占位符 (`?`) 的 SQL 插入语句,并通过 `sqlite3_bind_*` 函数为其赋值。最后调用了 `sqlite3_step()` 来完成实际的数据写入过程[^7]。 #### 常见问题及解决方案 1. **错误消息捕获** 如果遇到异常情况,可以通过 `sqlite3_errmsg()` 获取详细的错误描述信息[^8]。 2. **性能优化建议** 对于批量插入场景,推荐先启动事务再提交更改,这样能显著提升速度。例如,在循环外包裹如下命令: ```sql BEGIN TRANSACTION; -- 多次执行 INSERT 操作... COMMIT; ``` 3. **防止 SQL 注入攻击** 利用预处理语句能够有效抵御恶意输入带来的安全风险,因为所有外部传入的内容都会被自动转义处理[^9]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值