SQLite学习笔记4

1、如果是在Windows平台下可以使用SQLiteadministration作为SQLite的图形前端,很方便的。我这里一直在Linux平台下应用.


2、创建一个数据库:#sqlite3 homeg,如果不往数据库里面添加任何的表,这个数据库等于没有建立,不会在硬盘上产生任何文件,如果数据库已经存在,则会打开这个数据库。


3、创建用户表:sqlite>CREATE TABLE users(id,user_name,passwd,time_login,ip_login);SQLite是若类型可以不规定列的数据类型.


4、插入数据:INSERT INTO "users" VALUES(1,'member1',NULL,NULL,NULL);


5、介绍几个函数:


    打开数据库连接:


int sqlite3_open(


       const char *filename,   /* Database filename (UTF-8) */


       sqlite3 **ppDb          /* OUT: SQLite db handle */


);第一个参数为SQLite数据库文件名(sqlite3_open()处理UTF-8格式,sqlite3_open16()处理UTF-16UNICODE格式,sqlite3_open_v2()函数能够通过标志来控制数据库的打开方式),ppDb指向返回的数据库连接句柄,如果不能分配内存给sqlite3对象,则ppDb为一个空指针。数据库打开成功则返回SQLITE_OK,否则返回错误码,sqlite3_errmsg()sqlite3_errmsg16())函数用来获得错误描述。若数据库文件名为“:memory:”,将打开一个私有的临时的在内存中的数据库。如果数据库文件名中包含“:”,建议加上前缀“./”,若文件名参数为空,则会在硬盘上新建一个数据库文件,当数据库连接关闭时,这个数据库也将被自动删除。


    获得错误代码:


int sqlite3_errcode(sqlite3 *db);


const char *sqlite3_errmsg(sqlite3*);


const void *sqlite3_errmsg16(sqlite3*);


sqlite3_errcode()返回最近执行的sqlite3_* API的错误代码,若最近执行的API成功,则返回的值为未定义。sqlite3_errmsg()返回描述错误的英文文本。文本所需的内存由内部控制。


一步执行接口:


int sqlite3_exec(


  sqlite3*,                                  /* An open database */


  const char *sql,                           /* SQL to be evaluated */


  int (*callback)(void*,int,char**,char**),  /* Callback function */


  void *,                                    /* 1st argument to callback */


  char **errmsg                              /* Error msg written here */


);


此接口是执行SQL语句的便捷函数,第一个参数为一个有效的哦且打开了的数据库连接,且此函数执行其中这个连接不能关闭,UTF-8编码的SQL语句通过第二个参数传入函数,函数一条条地执行SQL语句,直到发生错误,或者被中断或者全部执行完毕。第三个参数指定一个回调函数,但得到一条记录后就用这个回调函数来处理。第五个参数执行存放错误信息的地址,其内存由sqlite3_malloc()分配,当不再使用此错误信息时要通过sqlite3_free()来释放,可以通过打印这个信息来获得具体出错的原因。如过某个参数不需要使用的话就填NULL


int sqlite3_close(sqlite3 *);


销毁sqlite3对象。


6、关于sqlite3_exec()的回调。


回调函数可以定义为如下形式:


typedef int (*sqlite3_callback)(void*,int,char**, char**);


回调函数中的参数只能按照下面格式来定义:
    
第一个参数为主调函数传递过来的指针,可以通过这个指针来实现自定义参数的传递;


    第二个为变量的个数,即一条记录中的列数;


    第三个为变量的值,即执行SQL语句查询出来的值都保存在此处,它是一个一维数组,数组中每个元素都是一个char指针


    第四个为变量的名称,是和第三个参数对应的,表示这个字段的字段名


7、第一个SQLite应用程序,程序很简单我就不注释了


#vim sqlite_test.c


#include "stdio.h"


#include "sqlite3.h"


 


int


main(){


        sqlite3 *db;


        char *err_msg = 0;


        char *sql_statement = "insert into users values(NULL,'member2',NULL,datetime('NOW'),NULL)";


        int recode;


        recode = sqlite3_open("/root/FamilyGate/homeg",&db);


        if(recode!=SQLITE_OK){


                printf("Can`t Open Database:%s!\n",sqlite3_errmsg(db));


                sqlite3_close(db);


        }else{


                printf("Open OK!\n");


                recode = sqlite3_exec(db,sql_statement,0,0,&err_msg);


                if(recode!=SQLITE_OK){


                        printf("Error:%s",err_msg);


                        sqlite3_close(db);


                }else{


                        printf("Insert OK!\n");


                        sqlite3_close(db);


                }


        }


}


编译:#gcc -o sqlite3_test -lsqlite3 sqlite_test.c sqlite3.h


注意在编译的时候必须加上-lsqlite3否则的话可能出现说sqlite3_open()没有定义的错误,因为我们在编译的时候用到了sqlite3.so库,如果你安装sqlite3的时候没有用#make install的话可能没有安装这个库,那就必须将这个库拷贝到/usr/lib下面,并且用ldconfig重新载入一下动态库。


检查数据库表中的数据,可以看到已经插入了刚才的数据了。


sqlite> select *from users;


1|member1|||


2|member2||2009-09-10 02:34:47|

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值