学习笔记——SQLite3 编程与 HTML 基础

SQLite3 编程与 HTML 基础

一、SQLite3 编程基础

1. 基本流程

复制代码
#include <sqlite3.h>

// 1. 打开数据库
int sqlite3_open(const char *filename, sqlite3 **ppDb);

// 2. 执行SQL语句
int sqlite3_exec(
    sqlite3 *db,                     // 数据库句柄
    const char *sql,                 // SQL语句
    int (*callback)(void*,int,char**,char**), // 回调函数
    void *arg,                       // 回调函数参数
    char **errmsg                    // 错误信息
);

// 3. 关闭数据库
int sqlite3_close(sqlite3 *db);

2. 完整示例

cpp 复制代码
#include <sqlite3.h>
#include <stdio.h>

// 回调函数 - 显示查询结果
int show(void* arg, int col, char** result, char** title)
{
    static int flag = 0;
    int i = 0;
    
    if (0 == flag)
    {
        flag = 1;
        // 打印标题行
        for (i = 0; i < col; i++)
        {
            printf("%s\t\t", title[i]);
        }
        printf("\n");
    }
    
    // 打印数据行
    for (i = 0; i < col; i++)
    {
        printf("%s\t\t", result[i]);
    }
    printf("\n");
    
    return 0;  // 必须返回0,否则只调用一次
}

int main(int argc, char** argv)
{
    sqlite3* db = NULL;
    char* errmsg = NULL;
    
    // 1. 打开数据库
    int ret = sqlite3_open("123.db", &db);
    if (ret != SQLITE_OK)
    {
        fprintf(stderr, "sqlite3_open error: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        return 1;
    }
    
    // 2.1 插入数据
    char sql_cmd[512] = "insert into user values(6,'lvbu',31);";
    ret = sqlite3_exec(db, sql_cmd, NULL, NULL, &errmsg);
    if (ret != SQLITE_OK)
    {
        fprintf(stderr, "sqlite3_exec error: %s\n", errmsg);
        sqlite3_free(errmsg);
        sqlite3_close(db);
        return 1;
    }
    
    // 2.2 查询数据
    char query_cmd[512] = "select * from user;";
    ret = sqlite3_exec(db, query_cmd, show, NULL, &errmsg);
    if (ret != SQLITE_OK)
    {
        fprintf(stderr, "sqlite3_exec error: %s\n", errmsg);
        sqlite3_free(errmsg);
        sqlite3_close(db);
        return 1;
    }
    
    // 3. 关闭数据库
    sqlite3_close(db);
    return 0;
}

3. 重要注意事项

  • sqlite3_exec 的回调函数会被调用多次,每次处理一条记录

  • 回调函数必须返回0,否则只会调用一次

  • 错误信息需要使用 sqlite3_free() 释放

  • 每次操作后都应检查返回值

二、HTML 基础

1. 基本结构

复制代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>页面标题</title>
</head>
<body>
    页面内容...
</body>
</html>

2. 常用标签

超链接 <a>
复制代码
<!-- 1. 链接外部网站 -->
<a href="http://www.baidu.com">百度</a>

<!-- 2. 链接本地文件 -->
<a href="1.html">本地页面</a>

<!-- 3. 图片链接 -->
<a href="1.html">
    <img src="abc.jpg" alt="图片描述">
</a>
图片 <img>
复制代码
<!-- 单标签 -->
<img src="abc.jpg" alt="图片描述" width="100" height="200">
<img src="abc.jpg" alt="图片描述" width="50%" height="50%">

属性说明:

  • src:图像来源(必需)

  • alt:替代文本(图片无法显示时显示)

  • width, height:宽高(像素或百分比)

表单 <form>
复制代码
<form action="submit.php" method="post">
    <!-- 表单元素 -->
</form>

表单属性:

  • action:数据提交的目标地址

  • method:提交方式

    • get:数据附加在URL后面(默认)

    • post:数据打包发送(更安全)

输入框 <input>
复制代码
<!-- 文本输入框 -->
<input type="text" name="username" placeholder="请输入用户名" required>

<!-- 密码框 -->
<input type="password" name="password">

<!-- 提交按钮 -->
<input type="submit" value="提交">

<!-- 重置按钮 -->
<input type="reset" value="重置">

<!-- 普通按钮 -->
<input type="button" value="点击" οnclick="function()">

<!-- 图片按钮 -->
<input type="image" src="button.jpg">

<!-- 隐藏字段 -->
<input type="hidden" name="token" value="abc123">

<!-- 邮箱输入 -->
<input type="email" name="email">

<input> 常用属性:

  • type:输入框类型

  • name:参数名称(传递给服务器的变量名)

  • value:默认值

  • maxlength:最大长度

  • placeholder:提示信息

  • required:必填项

3. 学习资源

三、总结

SQLite3 编程要点

  1. 三部曲:打开 → 执行 → 关闭

  2. 错误处理:每次操作后检查返回值

  3. 资源管理:及时关闭数据库和释放错误信息

  4. 回调函数:正确处理查询结果

HTML 学习要点

  1. 语义化:使用合适的标签

  2. 属性:了解常用属性的作用

  3. 表单:重点掌握数据提交方式

  4. 兼容性:注意不同浏览器的支持差异

开发建议

  1. 始终检查SQLite操作的返回值

  2. HTML标签属性使用双引号

  3. 表单设计考虑用户体验

  4. 图片添加alt属性提高可访问性

相关推荐
m0_715674431 小时前
政务泛监测体系能力排行:AI 重塑监测边界,治理的颗粒度革命
大数据·网络·人工智能·安全·网络安全·政务
w_zero_one1 小时前
递归算法(一)
java·开发语言·算法
AI 编程助手GPT2 小时前
curl 返回成功就能收文件?用本地 HTTP 验证错误页与超时
网络·网络协议·http
Zhao-Jichao2 小时前
AI Prompting for Everyone 课程笔记 - P21 总结 Conclusion
人工智能·笔记
欢欢李2 小时前
【LTE L3 笔记 05】LTE同步信号
笔记·无线通信·物理层·lte·空口协议
风影同志783243 小时前
20 个比特能装下多少行情?——实测拆解 Kronos 的 K 线分词器
算法
十碗饭吃不饱3 小时前
后端运维:网络联通、进程查询、Java服务启动脚本
java·运维·网络
写的都是BUG4 小时前
APK 里的钥匙,一直就放在门口:聊聊加固真正该做什么
前端·算法
La Pulga4 小时前
【FreeRTOS源码学习笔记】空闲任务与阻塞延时
笔记·mcu·学习·嵌入式·freertos·实时操作系统
蒸蒸yyyyzwd4 小时前
秋招学习笔记 day106
笔记·学习