1:c中使用sqlite3需要调用函数接口操作: sqlite3 *db; int status=sqlite_open("dbname",&db);//打开或者创建数据库 int status=sqlite3_exec(db,yuju,huitiaohanshu,0,cuowuzhizhen);//数据库所有的操作都得通过这个函数执行 sqlite3_close(db);//使用完后要关闭数据库资源 2:sqlite3语句: 建表: create table pic([picId] integer PRIMARY KEY AUTOINCREMENT, [InsertTime] TimeStamp NOT NULL DEFAULT (datetime(‘now‘,‘localtime‘)), [url] varchar(20)); //创建了一个有三个字段(picId,url,inserttime)并且这里的插入时间为自动插入当前当地时间 约束条件: not null: unique:唯一 primary key:主键 foreign key:外键(创建该表和父表之间的联系) check:对该项输入内容的条件检查 default:默认值 数据类型:(相似匹配,会自动寻找比较合适的具体数据类型进行匹配) integer: int integer int2 int8 (unsigned big int) (big int) text: character(20) varchar(255) text clob.... none: real: real double float.. numeric: boolean data datetime create table teacher(id integer primary key auto increment); create table stu (id integer primary key autoincrement, name varchar(20) check(length(name)>3), tel varchar(11) not null default ‘13631629322‘, cls integer not null , unique(name,tel),//设置name和tel的组合唯一 foreign key(cls) references teacher(id));//绑定两个表中的id 插入: insert into pic([picId],[url]) values(null,‘%s‘); //当每个字段都要插入时可以缺省表后面的参数 insert into stu1 select * from stu; //将一个表的所有内容导入另外一个 查询: select * from pic; select name from stu where id=0; select id from stu order by id;//由id排序输出 select * from stu where name like "t%";//找到stu中名字以t开头的数据 select * from stu group by id having id>2;//查询id>2的数据并且按照id分组 select * from stu limit 1 offset 2;//从索引2开始输出后面一个数据 //c语言中查询一般是使用的回调,在执行sql语句的时候就传入查询数据以后应该怎么处理的函数
例子:
#include <stdio.h> #include<time.h> #include <sqlite3.h> #include<string.h> //查询的回调函数声明 int select_callback(void * data, int col_count, char ** col_values, char ** col_Name); int main(int argc, char * argv[]) { const char * sSQL1 = "create table pic([picId] integer PRIMARY KEY AUTOINCREMENT, [InsertTime] TimeStamp NOT NULL DEFAULT (datetime(‘now‘,‘localtime‘)), [url] varchar(20));"; char * pErrMsg = 0; int result = 0; // 连接数据库 sqlite3 * db = 0; int ret = sqlite3_open("./test9.db", &db); if( ret != SQLITE_OK ){ fprintf(stderr, "无法打开数据库: %s", sqlite3_errmsg(db)); return(1); } printf("数据库连接成功!\n"); // 执行建表SQL sqlite3_exec( db, sSQL1, 0, 0, &pErrMsg ); if( ret!=SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", pErrMsg); sqlite3_free(pErrMsg); return 1; } printf("建表成功!\n"); // 执行插入记录SQL //result = sqlite3_exec( db, "insert into pic([url]) values(‘/c‘);", 0, 0, &pErrMsg); int i; for(i=0;i<5;i++){ if(sqlite3_exec( db, "insert into pic([picId],[url]) values(null,‘/c‘)", 0, 0, &pErrMsg)!= SQLITE_OK){ fprintf(stderr, "insert SQL error: %s\n", pErrMsg); sqlite3_free(pErrMsg); printf("插入失败!\n"); }else{ printf("插入数据成功\n"); } } // 查询数据表 printf("开始查询数据库内容\n"); //sqlite3_exec( db, "select * from pic;", select_callback, 0, &pErrMsg); if(sqlite3_exec( db, "select * from pic;", select_callback, 0, &pErrMsg)!=SQLITE_OK){ fprintf(stderr, "insert SQL error: %s\n", pErrMsg); }else{ printf("查询失败 \n"); } // 关闭数据库 sqlite3_close(db); db = 0; printf("数据库关闭成功!\n"); return 0; } int select_callback(void * data, int col_count, char ** col_values, char ** col_Name) { // 每条记录回调一次该函数,有多少条就回调多少次 int i; for( i=0; i < col_count; i++){ printf( "%s = %s\n", col_Name[i], col_values[i] == 0 ? "NULL" : col_values[i] ); } return 0; }
时间: 2024-10-16 21:52:37